Unityでオブジェクトをスクリプトから動かす方法を解説していきます。動かすだけでなく一定の場所を行ききさせたり時間が経つと止まるようにする方法など色々なパターンを紹介していくので良ければ読んでいっていください。
目次
準備
解説では画像のオブジェクトを使って行きます。
新しいスクリプトを作り、名前を「Transform」とします。
オブジェクトを移動させる
スクリプトに以下のコードをコピー&ペーストします。
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に数値を入れるとその方向に移動するようになります。
数値の大きさによって移動速度が変化しますし、数値をマイナスにすれば逆方向に移動するようになります。
オブジェクトを往復させる
動画のようにオブジェクトを行ったり来たりさせます。
以下のスクリプトをコピー&ペーストすれば大丈夫です。
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秒後にオブジェクトを停止させることができます。
オブジェクトを回転させる
オブジェクトを回転させる方法を書いて行きます。以下のコードをコピー&ペーストしてください。
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;」というコードを入れると移動と同じように時間が経つと逆方向に移動させることも出来ます。
オブジェクトの回転を止める
回転しているオブジェクトが一定の操作をすると回転が止まり、元々の角度に戻るようにします。
コードの「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のキーを入力することで回転が止まり、元々の角度に戻るようになります。
うまく時間指定などをすれば動画のようにタイトル文字を登場させるアニメーションなども作れます。
オブジェクトの大きさを変える
大きさを変更するコードを書いて行きます。以下のコードをコピー&ペーストします。
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;
コメントを残す