Unity 2019.4.4f1
Windows10 Pro 64BIT
HierarchyにPlane、Cube、空のGameObjectの3つを用意する。
位置関係とか色などは下のように適当に調整する。
Rotationという名の下のようなScriptを用意してGameObjectにアタッチする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Rotation : MonoBehaviour { // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { float speed = 2.0f; GameObject target = GameObject.Find("Cube"); Transform myTransform = target.transform; Vector3 pos = myTransform.position; pos.x = Mathf.Sin(Time.time * speed) * 4f; pos.y = Mathf.Cos(Time.time * speed) * 2f; myTransform.position = pos; } } |
posを用意するまでの書き方は未だに良く分からないし慣れない。
あとは円周上の座標の三角関数表示で、角度に見立てた時間からCubeの位置を計算して値を代入すればいいだけ。
円の半径に当たる4f、2fを変えてあるので楕円軌道を描く。
全手順(スクリプトはコピペ)の動画
追記
Cube自身も回転させた。
値の与え方のコードがちょっと変わった。
どっちがいいのか良く分からない。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Rotation : MonoBehaviour { float rotv = 0; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { float speed = 2.0f; GameObject target = GameObject.Find("Cube"); //Transform myTransform = target.transform; //Vector3 pos = myTransform.position; //pos.x = Mathf.Sin(Time.time * speed) * 4f; //pos.y = Mathf.Cos(Time.time * speed) * 2f; //myTransform.position = pos; target.transform.position = new Vector3(Mathf.Sin(Time.time * speed) * 4f, Mathf.Cos(Time.time * speed) * 2f, 0); rotv = rotv + 0.5f; if (rotv > 359) rotv = 0; target.transform.rotation = Quaternion.Euler(rotv, 0, rotv); } } |
Tweet