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

} 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Unity物理系统常用的方法包括: 1. 创建碰撞体:使用Colliders组件来添加碰撞体,如BoxCollider、SphereCollider和CapsuleCollider等。碰撞体负责检测对象之间的碰撞触发事件。 2. 添加刚体:使用Rigidbody组件来给物体添加刚体属性。刚体可以模拟物体的质量、重力、速度、受力等物理属性,并与其他物体进行交互。 3. 碰撞检测:利用OnCollisionEnter、OnCollisionExit和OnCollisionStay等方法来检测对象之间的碰撞。可以在碰撞发生时触发相应的事件或执行特定的操作。 4. 触发器:使用Trigger来进行触发器的判定,使用OnTriggerEnter、OnTriggerExit和OnTriggerStay等方法来触发相应的事件。 5. 物理材质:通过给对象添加PhysicMaterial来模拟物体的摩擦力和弹性等特性。可以调整材质的属性来改变物体之间的碰撞效果。 6. 接触点信息:使用Collision和Collider组件来获取碰撞点的信息,如碰撞点的坐标、法线方向、碰撞力等。 7. 约束和关节:可以使用关节和约束来模拟物体之间的连接和限制。常见的约束和关节包括HingeJoint、FixedJoint和SpringJoint等。 8. 物理效果:可以模拟物体的运动效果,如重力、摩擦力、空气阻力等。可以使用AddForce、AddTorque等方法来给物体施加力或扭矩。 9. 物理射线:使用Physics.Raycast和Physics.RaycastAll等方法来进行射线检测。可以检测射线与物体之间是否发生碰撞,并获取碰撞点的信息。 10. 物理特效:使用Particle System组件来添加粒子效果,如火花、烟雾、水花等。可以通过设置粒子的速度、大小和颜色等属性来模拟物理现象。 以上是Unity物理系统常用的方法,可以用来实现物体之间的碰撞、运动、连接等物理效果。 ### 回答2: Unity物理系统常用方法包括: 1. 添加碰撞器(Collider):在物体上添加碰撞组件,可以使物体参与碰撞检测物理模拟。 2. 添加刚体(Rigidbody):在具有碰撞器的物体上添加刚体组件,使物体具有物理属性,如重力、施力和受力的效果。 3. 碰撞检测:使用碰撞器进行碰撞检测,可以通过判断是否发生碰撞来进行相关处理,比如触发事件、改变游戏状态等。 4. 物理模拟:通过刚体组件物理材质(Physic Material)来模拟物体的物理行为,如弹力、摩擦力、空气阻力等。 5. 使用力(Force):通过添加力的方式来施加物体的作用力,可实现物体的移动、旋转等效果。 6. 刚体运动控制:通过改变刚体的速度、角速度或应用力矢量来控制物体的运动,以实现自定义的物理模拟效果。 7. 碰撞事件:当物体发生碰撞时,可以通过碰撞事件(OnCollisionEnter、OnCollisionStay、OnCollisionExit)来触发特定的逻辑或动作。 8. 触发器(Trigger)和触发事件:触发器是一种特殊的碰撞器,不会产生物理效果,但可以检测两个物体之间的触发事件(OnTriggerEnter、OnTriggerStay、OnTriggerExit)。 9. 射线投射:通过创建射线(Ray)对象并进行投射,可以检测物体是否被射线所穿过,常用于射线检测碰撞或点击选择物体。 10. 物理层和层掩码:通过设置物理层和层掩码,可以对不同物体进行过滤,控制碰撞触发事件的发生。 以上是Unity物理系统常用的一些方法,在游戏开发中,熟练掌握这些方法可以实现丰富多样的物理效果和交互体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HoFunGames

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值