Unityは、キーボードのキーを介してボールの動きを制御します

まず、新しいシーンを作成します。
ここに画像の説明を挿入します
達成する必要のある効果はボールを動かすことであり、移動操作はスクリプトを使用して実装する必要があります。
ここに画像の説明を挿入します
Moveスクリプトを作成し、同時にボールにアタッチします。同時に、剛体コンポーネントを使用して移動操作を実現する必要があるため、剛体コンポーネントを作成して、剛体をボールに取り付ける必要もあります。
ここに画像の説明を挿入します
上記の手順を実装した後、スクリプトの作成を開始します。
ボールを移動するにはリジッドボディコンポーネントを使用する必要があるため、最初のステップはリジッドボディコンポーネントを取得し、リジッドボディコンポーネントに値を割り当てることです。最後に、リジッドボディコンポーネントに力を加えるだけで済みます。

public class Move : MonoBehaviour {
    
    

    //定义一个刚体对象
    private Rigidbody rb;
    
	void Start () {
    
    
        //接收刚体组件
        rb = GetComponent<Rigidbody>();
	}

	void Update () {
    
    
        //添加一个力,Vector3为一个三维向量,参数分别为x,y,z,当x = 1时,表示当前x方向发生偏移
        rb.AddForce(new Vector3(1, 0, 0));
	}
}

実行してみると、一定の方向にしか動かないことがわかりましたが、ボタンで動かすことはできますか?
判断のためにアップデートにインプットを導入する必要があります。

void Update () {
    
    
        //Input.GetAxis用于检测是否按下键盘按键
        //Horizontal表示水平按键
        float h = Input.GetAxis("Horizontal");
        //Vertical表示垂直按键
        float v = Input.GetAxis("Vertical");
        //添加一个力
        rb.AddForce(new Vector3(h, 0, v));
	}

しかし、ボールの動きが非常に遅いことがわかりました。1つのパラメーターを定義するだけで済みます。

public class Move : MonoBehaviour {
    
    

    //定义一个刚体对象
    private Rigidbody rb;
    //定义小球移动的速度
    public int speed = 5;

    // Use this for initialization
	void Start () {
    
    
        //接收刚体组件
        rb = GetComponent<Rigidbody>();
	}
	
	    
	void Update () {
    
    
        //Input.GetAxis用于检测是否按下键盘按键
        //Horizontal表示水平按键
        float h = Input.GetAxis("Horizontal");
        //Vertical表示垂直按键
        float v = Input.GetAxis("Vertical");
        //添加一个力
        rb.AddForce(new Vector3(1, 0, 0) * speed);
	}
}

なぜ共通変数として速度を設定する必要があるのですか?
ここに画像の説明を挿入します
後の段階では、ここでボールの動きの速度を設定するだけでよく、スクリプトで設定する必要はありません。

ボールの動きを制御しましたが、ボールが消えてカメラの視野内に入ることができます。ボールを常に視野内に置く必要がある場合は、スクリプトを使用してカメラの動きを設定する必要があります。(つまり、カメラとボールの間の相対距離は変更されません)
FollowMoveスクリプトを作成し、同時に変換コンポーネントを適用します。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
スクリプトをメインカメラに割り当てます。変換コンポーネントは共有に設定されているため、外部から割り当てて、ボールを割り当てます。
ここに画像の説明を挿入します

public class FollowMove : MonoBehaviour {
    
    

    public Transform SphereTransform;
    //设置一个距离的三维变量,用于保存摄像机于小球之间的距离。
    private Vector3 distance;
	// Use this for initialization
	void Start () {
    
    
        //由于当前脚本添加到主摄像机上,所以transform.position表示主摄像机的位置
        //由于我们给SphereTransform赋值为小球,所以SphereTransform.position为小球的位置
        distance = transform.position - SphereTransform.position;
	}
	
	// Update is called once per frame
	void Update () {
    
    
        //主摄像机的位置为每次小球移动的位置+之间的距离
        transform.position = SphereTransform.position + distance;
	}
}

おすすめ

転載: blog.csdn.net/qq_42708024/article/details/106577601