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