在游戏开发等领域中,物理系统的运用至关重要。今天我们来探讨一下如何给物体添加重力以及相关参数设置。
很多游戏都依赖物理系统,像吃鸡游戏里扔出的手雷、平底锅,还有人物跳跃、车辆行驶等都涉及重力。当我们想要给物体添加重力时,需要为物体添加一个组件。以创建一个球体为例,首先创建一个平面并置于默认的 000 位置上,再创建一个球体放在平面上方。
默认情况下,球体在运行游戏时不会下落。只要给它添加一个名为 “刚体(英文叫 body)” 的组件,球体就会下落。下面是一些主要参数:
- 质量:代表物体的质量。
- 阻力:下落时遇到的空气阻力,从 0 开始,数值越大阻力越大。
- 使用重力:若不勾选,物体在空中不动,但仍受部分物理影响,比如被推动时还是会运动;若勾选运动学,物体则真正不受物理系统影响,如用立方体撞它也撞不动。
- 差值:默认无差值即可,也可选择依靠上一帧或下一帧数值计算差值。
- 碰撞检测
- 离散的:最节省性能,但对于高速物体碰撞可能检测不到,类似子弹穿过地面可能检测不到碰撞。
- 连续动态:适用于高速物体碰撞检测,但更消耗性能。
- 连续检测:性能消耗介于离散和连续动态之间,仍可能有检测不到碰撞的穿透现象。
- 冻结:可以冻结物体某轴向的位置或旋转,比如冻结 x 轴位置,物体就只能在其他轴向运动;全部冻结则物体无论怎样被碰撞都不会动,但可能产生旋转。
以下是用 C# 实现给物体添加重力及相关参数设置的示例代码:
using UnityEngine;
public class GravityExample : MonoBehaviour
{
// 创建平面和球体的方法
void CreatePlaneAndSphere()
{
// 创建平面
GameObject plane = GameObject.CreatePrimitive(PrimitiveType.Plane);
plane.transform.position = Vector3.zero;
// 创建球体
GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
sphere.transform.position = new Vector3(0, 2, 0);
}
// 添加刚体组件及设置参数的方法
void AddRigidbodyAndSetParameters(GameObject obj)
{
// 添加刚体组件
Rigidbody rb = obj.AddComponent<Rigidbody>();
// 设置质量为 10(示例值)
rb.mass = 10;
// 设置阻力为 0(无阻力)
rb.drag = 0;
}
void Start()
{
CreatePlaneAndSphere();
GameObject sphere = GameObject.Find("Sphere");
AddRigidbodyAndSetParameters(sphere);
}
}
这段代码创建了一个平面和一个球体,并为球体添加了刚体组件,同时设置了质量和阻力等参数。请注意,这只是一个简单的示例,实际应用中可能需要根据具体需求进行调整。
1188

被折叠的 条评论
为什么被折叠?



