3

私は 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 次元で制御できます。この記事が役に立つことを願っています! 自己メモ = 剛体 = 頭痛の種!

4

2 に答える 2