0

関数 SetFloat() は、キャラクターが x 軸で移動する速度を認識しませんが、y 軸は認識します。プレイヤーの速度がアニメーターで作成された「速度」フロートに署名されていない理由がわかりません

public float acceleration;
public bool isGrounded = true;
public float jumpHeight;
Animator anim;

// Use this for initialization
void Start () {
    anim = GetComponent<Animator>();
}

// Update is called once per frame
void Update () {
    if(Input.GetKey(KeyCode.Space) && isGrounded == true){
        GetComponent<Rigidbody2D>().velocity = new Vector2 (0 , jumpHeight);
        isGrounded = false;
    }

    if(GetComponent<Rigidbody2D>().velocity.y == 0){
        isGrounded = true;
    }

    anim.SetFloat("Speed", Mathf.Abs(GetComponent<Rigidbody2D>().velocity.x));

    if(Input.GetKey(KeyCode.D)){
        transform.position += new Vector3 (acceleration * Time.deltaTime , 0.0f, 0.0f);
        transform.localScale = new Vector3 (5,5,5);
    }
    if(Input.GetKey (KeyCode.A)){
        transform.localScale = new Vector3 (-5,5,5);
        transform.position -= new Vector3 (acceleration * Time.deltaTime , 0.0f , 0.0f);
    }

}
4

1 に答える 1

0

この質問がまだ関連しているかどうかはわかりませんが、アニメーターでフロートを設定したい場合は、transform.position を使用できません。transform.position は Rigidbody の値を変更しません。そのためには、rigidbody.MovePosition または Rigidbody.AddForce を使用して Rigidbody を移動します。

多くのコードを記述する必要がないため、rigidbody.MovePosition を使用することをお勧めします。

私がそれを行う方法は、Input.GetKey を使用しないことです。これは、かなりずさんで、Input.GetAxis と同様に機能しないためです。

function Update()
{
float keyboardX = Input.GetAxis("Horizontal") * acceleration * Time.deltaTime;

rigid.MovePosition(keyboardX);

anim.SetFloat("Speed", Mathf.Abs(GetComponent<Rigidbody2D>().velocity.x));
}

これはうまくいくはずです。繰り返しますが、これがどれほど関連性があるかわかりません。

于 2016-05-02T04:54:40.287 に答える