[Unity]オブジェクトをスクリプトで動かす方法(位置・回転・大きさ毎に解説)

Unityでオブジェクトをスクリプトから動かす方法を解説していきます。動かすだけでなく一定の場所を行ききさせたり時間が経つと止まるようにする方法など色々なパターンを紹介していくので良ければ読んでいっていください。


目次

     オブジェクトを移動させる

     オブジェクトを往復させる

     オブジェクトを回転させる

     オブジェクトの回転を止める

     オブジェクトの大きさを変える


準備

解説では画像のオブジェクトを使って行きます。

新しいスクリプトを作り、名前を「Transform」とします。

TOPに戻る

オブジェクトを移動させる

スクリプトに以下のコードをコピー&ペーストします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Transform : MonoBehaviour
{
    public float x;
    public float y;
    public float z;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        Vector3 p = new Vector3(x, y, z);
        transform.Translate(p);
    }
}

スクリプトが完成したら移動させるオブジェクトに付けましょう。

スクリプトを付けるとオブジェクトの項目にスクリプトが表示され、そこにあるX,Y,Zに数値を入れるとその方向に移動するようになります。

数値の大きさによって移動速度が変化しますし、数値をマイナスにすれば逆方向に移動するようになります。

TOPに戻る

オブジェクトを往復させる

動画のようにオブジェクトを行ったり来たりさせます。

以下のスクリプトをコピー&ペーストすれば大丈夫です。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Transform : MonoBehaviour
{
    public float x;
    public float y;
    public float z;
    // Start is called before the first frame update
    void Start()
    {
        Invoke("change",0);
    }

    // Update is called once per frame
    void Update()
    {
        Vector3 p = new Vector3(x, y, z);

        transform.Translate(p);
    }

    void change()
    {
        x = x * -1;
        y = y * -1;
        z = z * -1;
        Invoke("change", 2f);
    }
}

このコードにより2秒毎にオブジェクトが行ききします。

行ききする時間はコード29行目の「2f」の数値を変えることで変更できます。

26行目から28行目の「void change()」にはX,Y,Zの移動方向を反転させるコードが書いてあります。もしYやZの反転をやめたい場合はここのコードを消せばOKです。また、ここの「x*-1」の部分を消して「0」にすれば2秒後にオブジェクトを停止させることができます。

TOPに戻る

オブジェクトを回転させる

オブジェクトを回転させる方法を書いて行きます。以下のコードをコピー&ペーストしてください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Transform : MonoBehaviour
{
    //位置
    public float px;
    public float py;
    public float pz;

    //回転
    public float rx;
    public float ry;
    public float rz;
    // Start is called before the first frame update
    void Start()
    {
        Invoke("change",0);
    }

    // Update is called once per frame
    void Update()
    {
        //位置
        Vector3 p = new Vector3(px, py, pz);

        transform.Translate(p);
        //回転
        Vector3 r = new Vector3(rx, ry, rz);

        transform.Rotate(r);
    }

    void change()
    {
        px = px * -1;
        py = py * -1;
        pz = pz * -1;
        Invoke("change", 2f);
    }
}

するとオブジェクトのスクリプト欄にRx,Ry,Rzの項目が出来ています。ここに数値を入力することでその方向に回転させることができます。

「void change()」に「rx = rx * -1;」というコードを入れると移動と同じように時間が経つと逆方向に移動させることも出来ます。

TOPに戻る

オブジェクトの回転を止める

回転しているオブジェクトが一定の操作をすると回転が止まり、元々の角度に戻るようにします。

コードの「Vector3 r = new Vector3(rx,ry.rz):」と「transform.Rotate(r);」の間に以下の4行目から10行目のコードを入れてください。

//回転
        Vector3 r = new Vector3(rx, ry, rz);

            if (Input.GetKey(KeyCode.A))
            {
            rx = 0;
            ry = 0;
            rz = 0;
                transform.rotation = Quaternion.Euler(0, 0, 0);
            }

        transform.Rotate(r);

このコードで回転している途中でキーボードのAのキーを入力することで回転が止まり、元々の角度に戻るようになります。

うまく時間指定などをすれば動画のようにタイトル文字を登場させるアニメーションなども作れます。

TOPに戻る

オブジェクトの大きさを変える

大きさを変更するコードを書いて行きます。以下のコードをコピー&ペーストします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Transform : MonoBehaviour
{
    //位置
    public float px;
    public float py;
    public float pz;

    //回転
    public float rx;
    public float ry;
    public float rz;

    //大きさ
    public float sx;
    public float sy;
    public float sz;

    // Start is called before the first frame update
    void Start()
    {
        Invoke("change",0);
    }

    // Update is called once per frame
    void Update()
    {
        //位置
        Vector3 p = new Vector3(px, py, pz);

        transform.Translate(p);
        //回転
        Vector3 r = new Vector3(rx, ry, rz);

        transform.Rotate(r);
        //大きさ
        Vector3 s = new Vector3(sx,sy,sz);

        transform.localScale = s;
    }

    void change()
    {
        px = px * -1;
        py = py * -1;
        pz = pz * -1;
        Invoke("change", 2f);
    }
}

すると新しくsx,sy,szの項目が出来るので数値を入れると大きさを変化することができます。ただ、この場合大きさは移動や回転と違い、だんだん大きくなっていくといった動きはしません。

もしだんだん大きくしていくようにする場合はコードの「Vector3 s = new Vector3(sx,sy,sz);」と「transform.locale = s;」の間に以下の3つのコードを入れてください。

コードの「0.1f」の数値によって大きくなるスピードを変化させることができます。

//大きさ
        Vector3 s = new Vector3(sx,sy,sz);

        sx += 0.1f;
        sy += 0.1f;
        sz += 0.1f;

        transform.localScale = s;

TOPに戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です