トップ 差分 一覧 ソース 検索 ヘルプ 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まで持ってきます。

これで、指定の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を動かすことができます。