GameObjectを動かす
GameObjectをスクリプトで動かすには、まず対象となるGameObjectを配置します。
別途スクリプトをAssetとして作成して、GameObjectにコンポーネントとして加えます。
カメラや光源、サウンドなどもGameObjectとして割り当てられるため、これらはすべて同じ手順で動かすことが可能です。
手順
GameObjectの作成
メインメニューの「GameObject」-「Create Other」-「Cube」を選択。
シーン上にボックスの形状が配置されます。
C# Scriptの作成
ProjectツリーのAssetsを右クリックし、ポップアップメニューより「create」-「c# Script」を選択。
生成されたScriptの名称を「BoxScript」とします。
そして、アイコンをダブルクリックしてMonoで以下のように記述。
using UnityEngine; using System.Collections; public class BoxScript : MonoBehaviour { private Vector3 m_pos; // Use this for initialization void Start () { m_pos = transform.localPosition; // 形状位置を保持 } // Update is called once per frame void Update () { transform.localPosition = m_pos; // 形状位置を更新 m_pos.x += 0.05f; } }
スクリプトをGameObjectに割り当て
Assets内のスクリプトのアイコンをドラッグして、シーンのGameObjectまで持ってきます。
これで、指定のGameObjectにスクリプトを割り当てることができます。
以上で、メインメニューの「Edit」-「Play」を選択すると、GameObjectが+X方向に1フレーム更新ごとに0.05fだけ移動する動きをします。
スクリプト内での移動処理
GameObjectは、Position(位置)/Rotation(回転)/Scale(スケール)の要素を持ちます。
これを変更することで、移動や回転制御を行うことができます。
移動 (Position)
Vector3 m_pos = transform.localPosition; m_pos.x += 0.05f; transform.localPosition = m_pos; // 移動を更新
この場合は、+X方向に0.05f移動。
回転 (Rotation)
回転は「Quaternion」型であるので、以下は便宜上オイラーのVector3型で保持。
なお、オイラーにした場合のXYZ要素は角度の単位(0-360)になる。
Vector3 m_rotation = transform.localRotation.eulerAngles; m_rotation.y = (m_rotation.y + 2.0f) % 360.0f; transform.localRotation = Quaternion.Euler(m_rotation); // 回転を更新
この場合は、Y軸中心に2.0度回転。
スケール (Scale)
Vector3 m_scale = transform.localScale; m_scale.x += 0.1f; transform.localScale = m_scale;
この場合は、X軸方向に+0.1分拡大。
スクリプト内で特定のGameObjectを動かす
「シーン内のGameObject/Componentを取得」の要領で、
GameObject obj1 = GameObject.Find("xxxx"); // xxxx のGameObjectを取得. Vector3 v = obj1.transform.localPosition; v.x += 0.1f; obj1.transform.localPosition = v;
とすると、特定のGameObjectを動かすことができます。