web-dev-qa-db-ja.com

Rigidbody GameObjectを移動する適切な方法

Unityを学び始めました。このスクリプトを使って簡単な箱を動かそうとしました。前提は、誰かが「w」を押すたびにボックスが前進することです。

public class PlayerMover : MonoBehaviour {

public float speed;
private Rigidbody rb;


public void Start () {
    rb = GetComponent<Rigidbody>();
}

public void Update () {
    bool w = Input.GetButton("w");

    if (w) {
        Vector3 move = new Vector3(0, 0, 1) * speed;
        rb.MovePosition(move);
        Debug.Log("Moved using w key");

    }

}
}

私がこれを使用するときはいつでも、ボックスは「w」キーを押しても前進しません。私のコードの何が問題になっていますか? Vector 3 moveを設定する方法かもしれないと思ったので、z軸を速度に置き換えてみましたが、うまくいきませんでした。誰かが私がめちゃくちゃになっているところを教えてもらえますか?

4
Pike D.

これを試して:

_using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMover : MonoBehaviour {

    public float speed;
    private Rigidbody rb;


    void Start () {
        rb = GetComponent<Rigidbody>();
    }

    void Update () {
        bool w = Input.GetKey(KeyCode.W);

        if (w) {
            Vector3 move = new Vector3(0, 0, 1) * speed *Time.deltaTime;
            rb.MovePosition(move);
            Debug.Log("Moved using w key");

        }

    }
}
_

入力を取得するにはInput.GetKey(KeyCode.W)を使用します。
編集注記:オブジェクトをその初期位置に相対的に移動するには、rb.MovePosition(transform.position+move)ではなくrb.MovePosition(move)を使用します

0
trahane