關鍵功能:
- 攝影機跟隨船體移動
- 船體在水面上晃動
- 搖桿控制方向
攝影機跟隨對象的原理:
每一幀的開始的時候,都先去把這個攝影機移動到和對象相同的位置,然後收集跟隨對象旋轉的角度,然後將攝影家挪到對象的後面,在想上挪動一段距離,這個時候,攝影機就到了對象後面靠上,並一直跟着對象。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraFollow : MonoBehaviour
{
// 這個是我們跟隨的對象
public new GameObject gameObject;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if(gameObject == null)
{
return;
}
// 將攝影機的位置挪到我們跟隨對象的位置
this.transform.position = gameObject.transform.position;
// 然後我們將攝影機此時的位置取出來,便於我們操作
Vector3 CameraPosition = this.transform.position;
// 取出來四元數,這個四元數是由我們跟隨的物體在繞着Y軸旋轉的角度對應的歐拉角
Quaternion rotation = Quaternion.Euler(0,gameObject.transform.eulerAngles.y,0);
// 然後我們將攝影機向後移動四個單位,然後在乘以這個四元數,此時就是向後平移和旋轉的操作都進行之後的結果,這個結果代表移動之後的攝影機的座標。
CameraPosition += rotation * Vector3.back * 4;
// 攝影機向上移動一個單位
CameraPosition.y += Vector3.up.z;
// 將我們更改之後的座標給攝影機,讓攝影機直接複製過去
this.transform.position = CameraPosition;
// 讓我們的攝影機看着我們跟隨的物體
this.transform.LookAt(gameObject.transform);
}
}
Github:https://github.com/YuDang1024/UnityGames/tree/master/MovingBoat