前回記事、円状に動かす1 では、円運動したものの、ロボットの向きが一定方向でした。
進行方向へ顔を向けて円運動するように、スクリプトを書いていきましょう。
関連記事:
キャラクターを円状に動かす方法1
ターゲットの周囲を円形に移動する
カメラを旋回しながら自動追従させる
円を描くように移動する
円を描くように動きながら前方発射
オブジェクトを中心にする
軸を中心に回転させるため、Transform.RotateAround を使います。
Cubeオブジェクトを用意しましょう。
これを中心点として扱います。
RotateMove.csを作成し、ロボットに追加しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class RotateMove : MonoBehaviour { //中心 [SerializeField] GameObject target; float angle = 50; void Update () { //RotateAround(中心の場所,軸,回転角度) transform.RotateAround (target.transform.position, Vector3.up, angle * Time.deltaTime); } } |
ロボットを選択し、インスペクターを確認。
ターゲットの項目が表示されますので、中心点であるCubeを入れます。
実行してみましょう。
RotateAroundには、中心点、軸、回転角、を順番に入れます。
軸は Vector3.upということで、Yを軸として回転。
回転角度はこの場合、50°ずつ回転して動きます。
Time.deltaTimeを掛けることで、スムーズに動いています。
もしTime.deltaTimeが無ければ…。
50°回転し続けるとは、こういうことになるんですね。
特定の座標を中心にする
オブジェクトではなく、座標による中心点の指定もできます。
Cubeを削除して、ロボットを(X:0 Y:0 Z:0)に配置しましょう。
中心点を、(X:5 Y:0 Z:0)にしてみます。
RotateMove.csをこのように書き変えました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class RotateMove : MonoBehaviour { private Vector3 target = new Vector3(5.0f, 0.0f, 0.0f); float angle = 50; void Update () { //RotateAround(中心の場所,軸,回転角度) transform.RotateAround (target, Vector3.up, angle * Time.deltaTime); } } |
実行してみましょう。
オブジェクトが無くても、円状の動きができています。
関連記事:
キャラクターを円状に動かす方法1
ターゲットの周囲を円形に移動する
カメラを旋回しながら自動追従させる
円を描くように移動する
円を描くように動きながら前方発射