私は c# mono と unity3d 4.1.2 を使用しています。
次のスクリプトがあります。
using UnityEngine;
using System.Collections;
public class PlayerMove : MonoBehaviour
{
public float MoveSpeed = 10.0f;
public float maxVel = 0.000000001f;
// Use this for initialization
void Start ()
{
}
void FixedUpdate()
{
if(Input.GetKey(KeyCode.D))
{
Debug.Log("D got called");
rigidbody.AddForce(Vector3.right * MoveSpeed);
}
if(Input.GetKey(KeyCode.A))
{
Debug.Log("A got called");
rigidbody.AddForce(Vector3.left * MoveSpeed);
}
rigidbody.velocity = Vector3.ClampMagnitude(rigidbody.velocity, maxVel);
Debug.Log (rigidbody.velocity.x);
}
// Update is called once per frame
void Update ()
{
}
}
お分かりのように、これは単純なプレーヤーの移動スクリプトです。私は Rigidbody を球体にアタッチしており、"AddForce" を使用して x 軸に沿って左右に動かしたいと考えています。
「clampMagnitude」を使用して剛体に最大速度を実装しようとしましたが、何もしないようです。「maxVel」の値を 0.000000001 に設定しました! 何かが起こるかどうかを確認します。
明らかに私はここに何かが欠けています.誰かが問題を指摘できますか?
追加情報:
剛体はキネマティックではありませんが、重力を使用します (これは将来変更する予定の機能ですが、関係ありません)。
デバッグ情報
if(Input.GetKey(KeyCode.D))
{
rigidbody.AddForce(Vector3.right * MoveSpeed);
Debug.Log("BEFORE = " + rigidbody.velocity.magnitude);
}
if(Input.GetKey(KeyCode.A))
{
rigidbody.AddForce(Vector3.left * MoveSpeed);
}
rigidbody.velocity = Vector3.ClampMagnitude(rigidbody.velocity, maxVel);
Debug.Log("AFTER = " + rigidbody.velocity.magnitude);
D の Reuslt スナップショット、前 = 12.1911 後 = 12.1911 後 = 12.38866 後 = 12.50772
更新:(回答)
ブルー氏の助けのおかげで、問題は変数 maxVel だったようです。これは公開されていたので、インスペクターで変更され、プライベートに設定され、修正された更新に入ることがうまくいったようです。したがって、このスクリプトは現在機能しており、ユーザーは剛体の X 軸を 2 次元で制御できます。この記事が役に立つことを願っています! 自己メモ = 剛体 = 頭痛の種!