トップ 一覧 検索 ヘルプ RSS ログイン

unity_move_gameobjectの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!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まで持ってきます。
{{ref_image unity_attach_component_01.png}}
これで、指定のGameObjectにスクリプトを割り当てることができます。
{{ref_image unity_attach_component_02.png}}

以上で、メインメニューの「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を取得|unity_script_get_gameobject]]」の要領で、
 GameObject obj1 = GameObject.Find("xxxx");
 GameObject obj1 = GameObject.Find("xxxx");  // xxxx のGameObjectを取得.
 Vector3 v = obj1.transform.localPosition;
 v.x += 0.1f;
 obj1.transform.localPosition = v;
とすると、特定のGameObjectを動かすことができます。