私はユニティと剛体の新人です。私は3Dトロンライトサイクルゲームを作ろうと試みることによって学ぶと思っていました。私は以下の見円柱、球、および矩形の組み合わせを使用して、私のプレーヤーの車を作った:ユニティ - リジッドボディーをオートバイに使用する - どのようにすればいいですか?
私は細長い球に剛体を使用し、次のコードを使用:
public float accel = 1.0f;
// Use this for initialization
void Start() {
cycleSphere = GetComponent<Rigidbody>();
}
void FixedUpdate() {
cycleSphere.velocity = Vector3.forward * accel;
}
車両が前方に移動します。私はこれを行うより良い方法があるかどうかはわかりませんが、もしあれば、そう言いなさい。
私は車両にメインカメラを取り付けて、X回転を無効にしてカメラとローリングを防止しました。
ここでは、AとDボタンを押して回転させたいと思います。オリジナルのトロンライトサイクルの90度回転とは異なり、私はそれを通常の車両のように回したかったのです。
だから私はこれを試してみました:
void Update() {
if (Input.GetKey (KeyCode.A)) {
turning = true;
turnAnglePerFixedUpdate -= turnRateAngle;
} else if (Input.GetKey (KeyCode.D)) {
turning = true;
turnAnglePerFixedUpdate += turnRateAngle;
} else {
turning = false;
}
}
void FixedUpdate() {
float mag = cycleSphere.velocity.magnitude;
if (!turning) {
Quaternion quat = Quaternion.AngleAxis (turnAnglePerFixedUpdate, transform.up);// * transform.rotation;
cycleSphere.MoveRotation (quat);
}
cycleSphere.velocity = Vector3.forward * accel;
}
上記のコードは、車両を回転させていますが、それはまだでそれがあった最後の方向に移動する - それはより多くのタンクタレットのように振る舞います。さらに悪いことに、AまたはDのどちらかを押しすぎると、希望の方向に回転し、しばらくしてからナットを動かすと、カメラはその方向に回転します。
私が間違って何をしましたし、どのように私はそれを修正することができますか?
うーん、興味深いです。私はそれ以来、私のコードにいくつかの変更を加えました、そして私はそれを働かせましたが、私はあなたの助言を取って、入力にgetKeyを置き換えました。このコードはどのようにターンしますか? –
このコードは、 '2 * forwardForce'と組み合わされた' Input.GetAxis( "horizontal") 'から取り出された値に関係します。それは前進するために残っていることを意味するが、ある程度の水平方向の入力があるときはいつも力を変更する(少し湾曲させる)。 –