标签:
While fiddling with the player handing for Chalo Chalo, it became important for me to get a better grasp on the differences between the four force modes in Unity3D.
If you have objects that use Unity‘s physics system, via a rigidbody component, you can add forces to them to get them to move. Forces can be added using one of four different ‘modes‘. The names of these modes aren‘t very enlightening and I don‘t think the Unity3D documentation is very clear about their differences. For my own reference, and in case it helps others, this is what I‘ve figured out.
rigidbody.AddForce((Vector3.forward * 10),ForceMode.Force); rigidbody.AddForce((Vector3.forward * 10)/rigidbody.mass,ForceMode.Acceleration);
rigidbody.AddForce((Vector3.forward * 10),ForceMode.Impulse); rigidbody.AddForce((Vector3.forward * 10)/rigidbody.mass,ForceMode.VelocityChange);
I made a little test to verify this. The script demonstrates how the ForceModes work by canceling out their differences through modifying the values passed to the AddForce call.
Here‘s the C# script that was attached to each of the cubes. In the inspector, the forceMode property of each was set to use one of the four modes.
using UnityEngine; using System.Collections; public class force_force : MonoBehaviour { public ForceMode forceMode; void FixedUpdate() { AddForce(); } void AddForce(){ float massModifier=1f; float timeModifier=1f; // Modify things to make all give same result as ForceMode.Force if (forceMode==ForceMode.VelocityChange || forceMode==ForceMode.Acceleration){ massModifier=rigidbody.mass; } if (forceMode==ForceMode.Impulse || forceMode==ForceMode.VelocityChange){ timeModifier=Time.fixedDeltaTime; } rigidbody.AddForce(((Vector3.forward * 10) * timeModifier)/massModifier,forceMode); } }
理解Unity3d的ForceMode | Understanding ForceMode in Unity3D
标签:
原文地址:http://www.cnblogs.com/yaohj/p/4890618.html