先直接看示範影片吧~~
我讓Camera環繞著Unity Chan移動
基本上就是靠著三角函數的算法去達成的
此範例我是從上面俯瞰,所以使用X和Z軸來講解
由直角坐標(笛卡爾座標)可知四個象限其座標的正負值如下
- 三角函數sin在一二象限為正、三四為負
- 三角函數cos在一四象限為正、二三為負
以上兩個三角函數,剛好能滿足一~四象限的正負需求
至於兩個三角函數數值誰給x、誰給z都沒差,只是順時針逆時針的差別而已(千萬不能兩個座標軸都使用相同的三角函數,否則就變成單純的斜向來回移動)
新增一個專案,然後引入Unity Chan(或者想拿其他物件代替也可以,反正只是為了明顯看相機有在環狀移動),接著新增一個C# script
將unitychan和Main Camera移動到自己喜歡的位置和角度
接著開始編寫程式碼~
using UnityEngine;
public class CameraCircularMovement : MonoBehaviour
{
[SerializeField]private GameObject target;//Camera要面向的物件
[SerializeField]private float speed;//相機環繞移動的速度
private Vector3 cameraPosition;//相機要移動的位置
private float number;
private float radius;//移動的半徑
private void Start ()
{
//由於我這個範例是x和z軸的移動,而y軸不會改變,所以要先設定好y軸的初始位置
cameraPosition.y = transform.position.y;
transform.position = cameraPosition;
//計算當前攝影機和目標物件的半徑
radius = Vector3.Distance(target.transform.position, transform.position);
}
private void Update ()
{
//使用Time.deltaTime,使得移動時更加平滑
//將速度進行一定比例縮放,方便控制速度(縮放多少都隨意,自己覺得數值修改方便就好)
number += Time.deltaTime * speed * 0.1f;
//計算並設定新的x和y軸位置
//負數是順時針旋轉,正數是逆時針旋轉
cameraPosition.x = radius * Mathf.Cos(-number);
cameraPosition.z = radius * Mathf.Sin(-number);
transform.position = cameraPosition;
//使相機永遠面對著目標物件
transform.LookAt(target.transform.position);
}
}
然後將此腳本放到Main Camera上並設定目標和速度,按下執行後即可看到相機在環狀移動,同時面對著目標
留言列表