rigidbody.AddForce() で使用出来るフォースのタイプは以下。
値 | 意味 |
---|---|
Force | その質量を使用して、rigidbodyへの継続的な力を追加します。 |
Acceleration | その質量を無視して、rigidbodyへの継続的な加速を追加します。 |
Impulse | その質量を使用して、rigidbodyに瞬時に速度変化を追加します。 |
VelocityChange | その質量を無視して、rigidbodyに瞬時に速度変化を追加します。 |
主なプログラムはこちら。
var dir: Vector3 = Vector3.right; if (GUILayout.Button("Force")) { bigCube.rigidbody.AddForce(dir.normalized * 200.0, ForceMode.Force); smallCube.rigidbody.AddForce(dir.normalized * 200.0, ForceMode.Force); } if (GUILayout.Button("Acceleration")) { bigCube.rigidbody.AddForce(dir.normalized * 200.0, ForceMode.Acceleration); smallCube.rigidbody.AddForce(dir.normalized * 200.0, ForceMode.Acceleration); } if (GUILayout.Button("Impulse")) { bigCube.rigidbody.AddForce(dir.normalized * 10.0, ForceMode.Impulse); smallCube.rigidbody.AddForce(dir.normalized * 10.0, ForceMode.Impulse); } if (GUILayout.Button("VelocityChange")) { bigCube.rigidbody.AddForce(dir.normalized * 10.0, ForceMode.VelocityChange); smallCube.rigidbody.AddForce(dir.normalized * 10.0, ForceMode.VelocityChange); }
瞬発的に力が加わるImpulseやVelocityChangeに比べ、ForceやAccelerationはより大きな力で連続的に力を加えないとオブジェクトが動かない。
実際に動作させた動画はこちら大きいCubeのmassは3、小さいCubeのmassは1に設定。
プログラム全体はこちら。
#pragma strict var bigCube: GameObject; var bigCubeStartPos: Vector3; var bigCubeStartRot: Quaternion; var smallCube: GameObject; var smallCubeStartPos: Vector3; var smallCubeStartRot: Quaternion; function Start () { bigCubeStartPos = bigCube.transform.position; smallCubeStartPos = smallCube.transform.position; bigCubeStartRot = bigCube.transform.rotation; smallCubeStartRot = smallCube.transform.rotation; bigCube.rigidbody.Sleep(); smallCube.rigidbody.Sleep(); } function OnGUI () { if (GUILayout.Button("Reset")) { bigCube.rigidbody.Sleep(); smallCube.rigidbody.Sleep(); bigCube.transform.position = bigCubeStartPos; smallCube.transform.position = smallCubeStartPos; bigCube.transform.rotation = bigCubeStartRot; smallCube.transform.rotation = smallCubeStartRot; } var dir: Vector3 = Vector3.right; if (GUILayout.Button("Force")) { bigCube.rigidbody.AddForce(dir.normalized * 200.0, ForceMode.Force); smallCube.rigidbody.AddForce(dir.normalized * 200.0, ForceMode.Force); } if (GUILayout.Button("Acceleration")) { bigCube.rigidbody.AddForce(dir.normalized * 200.0, ForceMode.Acceleration); smallCube.rigidbody.AddForce(dir.normalized * 200.0, ForceMode.Acceleration); } if (GUILayout.Button("Impulse")) { bigCube.rigidbody.AddForce(dir.normalized * 10.0, ForceMode.Impulse); smallCube.rigidbody.AddForce(dir.normalized * 10.0, ForceMode.Impulse); } if (GUILayout.Button("VelocityChange")) { bigCube.rigidbody.AddForce(dir.normalized * 10.0, ForceMode.VelocityChange); smallCube.rigidbody.AddForce(dir.normalized * 10.0, ForceMode.VelocityChange); } }