タイトルが示唆するように、私はトップダウンの宇宙ゲームを開発しています。
プレイヤーが制御する船でニュートン物理学を使用するつもりはありません。FlatSpace 2(素晴らしいゲーム)に似た制御スキームを実現しようとしています。マウスコントロールではなく、キーボードコントロールでこの感覚を実現する方法を理解できません。助言がありますか?
Unity3dを使用していて、C#またはjavaScript(unityScriptまたは正しい用語は何か)を使用して、コード例をいくつかドロップしたい場合は問題なく動作します。
編集:もちろん、私はFlatSpace 2の制御スキームについて説明する必要があります。マウスボタンを押したまま、船を移動したい方向にマウスを動かします。しかし、それは私が操作方法を知らないコントロールではなく、車の運転と飛行機の飛行の混合感です。それは本当によくできています。YouTubeリンク:iPhoneのFlatSpace2
私はiPhoneゲームを開発していませんが、ビデオはムーブメントスタイルの原則を示しています。
編集2
少し興味があるようですので、私は継続するために使用したコードのバージョンを投稿します。十分に機能します。時々十分で十分です!
using UnityEngine;
using System.Collections;
public class ShipMovement : MonoBehaviour
{
public float directionModifier;
float shipRotationAngle;
public float shipRotationSpeed = 0;
public double thrustModifier;
public double accelerationModifier;
public double shipBaseAcceleration = 0;
public Vector2 directionVector;
public Vector2 accelerationVector = new Vector2(0,0);
public Vector2 frictionVector = new Vector2(0,0);
public int shipFriction = 0;
public Vector2 shipSpeedVector;
public Vector2 shipPositionVector;
public Vector2 speedCap = new Vector2(0,0);
void Update()
{
directionModifier = -Input.GetAxis("Horizontal");
shipRotationAngle += ( shipRotationSpeed * directionModifier ) * Time.deltaTime;
thrustModifier = Input.GetAxis("Vertical");
accelerationModifier = ( ( shipBaseAcceleration * thrustModifier ) ) * Time.deltaTime;
directionVector = new Vector2( Mathf.Cos(shipRotationAngle ), Mathf.Sin(shipRotationAngle) );
//accelerationVector = Vector2(directionVector.x * System.Convert.ToDouble(accelerationModifier), directionVector.y * System.Convert.ToDouble(accelerationModifier));
accelerationVector.x = directionVector.x * (float)accelerationModifier;
accelerationVector.y = directionVector.y * (float)accelerationModifier;
// Set friction based on how "floaty" controls you want
shipSpeedVector.x *= 0.9f; //Use a variable here
shipSpeedVector.y *= 0.9f; //<-- as well
shipSpeedVector += accelerationVector;
shipPositionVector += shipSpeedVector;
gameObject.transform.position = new Vector3(shipPositionVector.x, 0, shipPositionVector.y);
}
}