Unity の基本物理システムの剛体コンポーネントでの動き、衝突、トリガーの検出

       重力システムは、Unity でゲームやアプリケーションを作成する場合に非常に重要なコンポーネントです。地球の重力の影響を受けるオブジェクトをシミュレートし、現実的な物理効果を生成できます。Unity では、Rigidbody コンポーネントと Gravity Vector を使用して重力システムを制御できます。

       まずはUnityでオブジェクトを作成し、剛体化します。シーン内でオブジェクトを選択し、インスペクターパネルで「Is Kinematic」オプションにチェックを入れることで、オブジェクトが他の力の影響を受けないようにできます。

まず、重力コンポーネント Rigidbody を見てみましょう。 

質量: 物体の質量

抵抗 (ドラッグ) : シミュレーションの実行中に発生した抵抗

角度ドラッグ (AngularDrag) : 回転をシミュレートするときに受ける抵抗

Use Gravity (UseGravity) : 重力を使用するかどうか

IsKinematic : ダイナミクスが有効かどうかに関係なく、オブジェクトがチェックされていない場合、重力落下は発生しません。

Interpolate : オブジェクトの動作位置の補間器 

衝突検出 (CollisionDetection):衝突検出の頻度を増やすことができます。

コンストレイント: 剛体の動きを制御するコンストレイント


 

衝突検知条件

1. 両方のオブジェクトに衝突ボディ コンポーネントが含まれている必要があります

2. 少なくとも 1 つのオブジェクトに剛体コンポーネントが含まれている

衝突検知方式

OnCollisionEnter( CollisioncollisionInfo ) 2 つのオブジェクトが衝突を開始したときに 1 回トリガー
OnCollisionExit( CollisioncollisionInfo ) 2 つのオブジェクトが衝突したときに 1 回トリガー end
OnCollisionStay( CollisioncollisionInfo ) 2 つのオブジェクトが衝突し続けたときにトリガー

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

public class RigCollisionTest : MonoBehaviour
{

    void OnCollisionEnter(Collision other)
    {
        Debug.Log("碰撞开始");
    }

    void OnCollisionStay(Collision other)
    {
        Debug.Log("持续碰撞");
    }

    void OnCollisionExit(Collision other)
    {
        Debug.Log("碰撞结束");
    }
}

 

トリガー検出条件

1. 両方のオブジェクトに衝突ボディ コンポーネントが含まれている必要があり、オブジェクトの 1 つがトリガーとしてチェックされます。

2. 少なくとも 1 つのオブジェクトに剛体コンポーネントが含まれている

検出をトリガーする方法

OnTriggerEnter( Collider other ) 2 つのオブジェクトの衝突が始まるときに 1 回
トリガー OnTriggerExit( Collider other ) 2 つのオブジェクトの衝突が終了するときに 1 回トリガー
OnTriggerStay( Collider other ) 2 つのオブジェクトが衝突し続けるときに 1 回トリガー

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

public class TriggerTest : MonoBehaviour
{

    void OnTriggerEnter(Collider other)
    {
        Debug.Log("触发开始");
    }

    void OnTriggerStay(Collider other)
    {
        Debug.Log("持续触发");
    }

    void OnTriggerExit(Collider other)
    {
        Debug.Log("触发结束");
    }
} 

 

 Unity で Rigidbody コンポーネントを使用して移動およびジャンプする方法を示す簡単なコード例を次に示します。

using UnityEngine;

public class GravityDemo : MonoBehaviour
{
     Rigidbody m_Rigidbody;
    //移动速度
    public float m_Speed = 20f;
    //跳跃力
    public float jumpforce = 200;
    void Start()
    {
        m_Rigidbody = GetComponent<Rigidbody>();
    }

    void Update()
    {

        float hor = Input.GetAxis("Horizontal");
        float ver = Input.GetAxis("Vertical");
        Vector3 m_Input = new Vector3(hor, 0, ver) * Time.deltaTime * m_Speed;
        //移动
        m_Rigidbody.MovePosition(transform.position + m_Input);

        if (Input.GetKeyDown(KeyCode.E))
        {
            //跳跃
            m_Rigidbody.AddForce(transform.up * jumpforce);
        }
    }

} 

 

おすすめ

転載: blog.csdn.net/qq_36592993/article/details/131513786