Unity基础 物理系统 刚体组件下的移动.碰撞.触发检测

       当在Unity中创建游戏或应用程序时,重力系统是一个非常重要的组成部分。它可以模拟物体受到地球引力的影响,并产生逼真的物理效果。在Unity中,我们可以使用刚体组件和重力向量来控制重力系统。

       首先,在Unity中创建一个物体,并将其设为刚体。可以通过在场景中选择物体并在Inspector面板中勾选"Is Kinematic"选项来确保物体不受其他力的影响。

首先我们先了解一下重力组件Rigidbody 

质量(Mass):对象的质量

阻力(Drag):模拟运动时受到的阻力

角阻力(AngularDrag):模拟旋转时受到的阻力

使用重力(UseGravity):是否使用重力

IsKinematic:是否是启用动力学,如果取消勾选物体就不会有重力下落了

插值(Interpolate):物体运动位置的插值器 

碰撞检测(CollisionDetection):可以增加碰撞检测频率

Constraints:控制刚体运动的约束


 

碰撞检测条件

1.两个物体必须都包含碰撞体组件

2.至少有一个物体包含刚体组件

碰撞检测的方法

OnCollisionEnter( Collision collisionInfo )  当两个对象开始碰撞的时候触发一次
OnCollisionExit( Collision collisionInfo )     当两个对象碰撞结束的时候触发一次
OnCollisionStay( Collision collisionInfo )    当两个对象持续碰撞的一直触发

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.两个物体必须都包含碰撞体组件,并且其中一个对象是勾选了是触发器

2.至少有一个物体包含刚体组件

触发检测的方法

OnTriggerEnter( Collider other )    当两个对象开始碰撞的时候触发一次
OnTriggerExit( Collider other )       当两个对象碰撞结束的时候触发一次
OnTriggerStay( Collider other )      当两个对象持续碰撞的一直触发

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中使用刚体组件移动和跳跃:

using UnityEngine;

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

    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);
        }
    }

} 

 

你可能感兴趣的:(unity,unity,游戏引擎)