unity3d - 是否可以在同一场景中为 2 个对象设置不同的重力?
问题描述
如果 Physics.gravity 适用于场景中的所有刚体是否有另一种方法来设置 Ground1 和 Ground2 的不同重力?
解决方案
是的!
默认情况下,重力由场景中的每个刚体处理,但您可以通过执行禁用默认重力Rigidbody.useGravity = false;
这意味着您可以停用默认重力,然后以您想要的方式向对象施加力(模拟重力):
RigidBody.AddForce(Vector.down, ForceMode.Acceleration);
请记住,您可以简单地乘以Physics.gravity
您想要的数字,甚至可以改变方向,例如:
[RequireComponent(typeof(Rigidbody))]
public class GravityDirectionChanger : MonoBehaviour
{
public enum GravityDirection
{
Up, Down, Forward, Backward, None
}
public static Dictionary<GravityDirection, Vector3> gravityDirectionDict = new Dictionary<GravityDirection, Vector3>
{
{ GravityDirection.Up, Vector3.up },
{ GravityDirection.Down, Vector3.down },
{ GravityDirection.Forward, Vector3.forward },
{ GravityDirection.Backward, Vector3.forward * -1 },
{ GravityDirection.None, Vector3.zero }
};
[SerializeField] private GravityDirection gravityDirection = GravityDirection.None;
private void FixedUpdate()
{
this.GetComponent<Rigidbody>().AddForce(gravityDirectionDict[gravityDirection], ForceMode.Acceleration);
}
}
推荐阅读
- c++ - 在结构数组上使用 c++ std::copy
- apache-kafka - Kafka connect Jdbc 源连接器数据存储为编码字符串
- xslt - 如何从重复的父标签中选择子标签的最后一个值(如果存在)?
- python - 如何获取默认麦克风的全名?
- javascript - ajax 在 Laravel 中不起作用,显示找不到页面
- xml - Groovy 在 SoapUI 响应中从 XML 获取节点值
- java - Java Array 中的 add 和 element 的时间复杂度是多少?
- javascript - 如何解决 Jest Test Code mockRestore 不起作用的问题
- c# - 使用 asp.net c# 代码增加 WebBrowser 的高度然后出现错误:参数无效
- react-native - 为什么 expo sdk 34 的应用程序大小比之前的 sdks 大?