[Unity] MovePosition, position, RotateAround 円運動させる

GameObjectを円運動させたいケースがあります。円運動としては、数学的に sin, cos の三角関数を使うか、あるいは角度として0 -> 360°の変化から実現する方法があります。
 
circle3_01

Unity 2018.1




円運動

 
円柱、Cylinder の周りを球体、Sphere が回転運動をするように作成してみますので、それぞれオブジェクトを作ります。
 
circle_01
 

 

Rigidbody.MovePosition

 
MovePosition(Vector3 position) を使ってオブジェクトを移動させます。その移動位置と時間Time.timeで変化させて sin, cos を使い円運動をさせます。

 
Circle1.cs

 
スクリプトをSphereにドラッグ&ドロップ
 
circle_02
 
SphereのComponentのRigidbodyを設定します
 
circle_03
 
SphereのinspectorにScriptとRigidbodyが追加されました。
 
circle_04
 
Rigidbody の interpolation (補間)設定するとよりスムーズな描画となります。
Use Gravityのチェックは外しておきます。
 
ScriptのRbodyはSphereをドラッグして設定します。
 
これでGameでrunさせると球体が円柱を回りだします。
 

 

Transform.position

 
ワールド空間の Transform の位置を設定します。
位置を時間で変化させsin,cosで円運動させるところはMovePositionと同じです。
 
Circle2.cs

 
このスクリプトをSphereに入れます。
 
circle_05
 
前のCircle1のスクリプトのチェックを外して実行させると円運動が始まります。

 

Transform.RotateAround

 
ワールド座標の point を中心とした軸( axis )で angle 度回転させます。つまりCylinderを軸に回転させるわけです。
 
Circle3.cs

 
このスクリプトをSphereに入れて、今までの2つのスクリプトのチェックを外し、軸とするCylinderをGameObject gObject(G Objet) に設定すればSphereをCylinderの周りを回るようにできます。
 
circle_06
 
 
References:
Unity – Scripting API: Rigidbody.MovePosition
Unity – Scripting API: Transform.position – Unity – Manual
Unity – Scripting API: Transform.RotateAround