Unityでバウンドしたときに回転させる方法

投稿者: | 2019-11-22


バウンドしたときに方向キーに従ってCubeを回転させてみます。

Cubeに新しいスクリプトをアタッチします。

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

public class cubeScript : MonoBehaviour
{

    public float torque;
    Rigidbody rb;

    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    
    void OnCollisionEnter(Collision collision)
    {
        float turn = Input.GetAxis("Horizontal"); // 左右キー入力
        rb.AddTorque(Vector3.up * torque * turn);
    }

}

参考:https://docs.unity3d.com/ja/current/ScriptReference/Rigidbody.AddTorque.html
OnCollisionEnter()を使って、衝突時にAddTorque()でCubeを回転させているだけです。

float turn = Input.GetAxis("Horizontal");

で左右方向のキー入力を受けています。
キーボードなら、「D」もしくは「→」キーで 1、「A」もしくは「←」キーで -1、何も入力しなければ 0が、turnに入ります。
これをAddTorque()の中で使っています。

AddTorque(Vector3.up * torque * turn)

Vector3.upは常にワールドの真上を指しています。AddTorqueでは、設定した方向に向かって、オブジェクト全体が反時計回りに回るように回転の力が加わります。
なので、左キーを押しているときはその逆に回り、何も入力していないと回転しません。

キーの押し具合で中間の値にできるようです。

Torqueが大きいほど勢いよく回ります。Torqueの値はCubeのインスペクタ上で入力します。

衝突させるためのコライダーと、落下させるためのリジッドボディもCubeに付けられています。

また、バウンドさせるために、コライダーのMaterialにフィジックマテリアルがアタッチされています。

床にもコライダーが付いていて、フィジックマテリアルがアタッチされています。


今回はキー入力を受けて見ましたが、必要ないですし、ランダムに回転させたり、衝突した床などのオブジェクトの情報を使うこともできます。

コメントを残す

メールアドレスが公開されることはありません。