最近、カメラを制御する必要があるプロジェクトでよく使用するので、インターネットで方法を調べた後、自分のニーズに基づいてこのような関数を作成しました。プログラマーのお役に立てば幸いです
(このスクリプトはカメラに配置されます)
カメラスクリプトの機能:
1. キーボードの WASD キーを使用して、カメラの前後左右の動きを制御します。
2. キーボードの F キーを使用して、回転モードを切り替えます。
1 つ目は自由回転で、カメラ自体を中心に回転します。
2 番目のタイプは固定回転で、ターゲット オブジェクトの周りを回転します。
コード表示:
public class CameraController : MonoBehaviour
{
private bool _isF;
// [Header("所控制的摄像机")][SerializeField] private GameObject _camera; //可有可无
[Header("旋转中心目标物体")] [SerializeField] private GameObject _target;
[Header("拖动灵敏度")] [SerializeField] private float _sensitivity = 2.0f;
[Header("移动速度")] [SerializeField] private float _speed = 0.1f;
private void Update()
{
W_A_S_D();
//通过键盘的F 控制切换是否锁定目标围绕着旋转
if (Input.GetKeyUp(KeyCode.F))
{
_isF = !_isF;
Debug.Log("isF=" + _isF);
}
if (!_isF)
{
if (Input.GetMouseButton(0))
{
Around();
}
}
else
{
if (Input.GetMouseButton(0))
{
LookAround();
}
}
}
//通过键盘的W、A、S、D控制摄像机移动的方法函数
private void W_A_S_D()
{
if (Input.GetKey(KeyCode.W))
{
transform.Translate(Vector3.forward * _speed);
}
if (Input.GetKey(KeyCode.S))
{
transform.Translate(Vector3.back * _speed);
}
if (Input.GetKey(KeyCode.A))
{
transform.Translate(Vector3.left * _speed);
}
if (Input.GetKey(KeyCode.D))
{
transform.Translate(Vector3.right * _speed);
}
}
//控制摄像机围绕物体旋转的方法函数
private void LookAround()
{
float mouseX = Input.GetAxis("Mouse X") * _sensitivity;
float mouseY = Input.GetAxis("Mouse Y") * _sensitivity;
transform.RotateAround(_target.transform.position, Vector3.up, mouseX);
transform.RotateAround(_target.transform.position, transform.right, -mouseY);
transform.LookAt(_target.transform);
}
//控制摄像机自由旋转的方法函数
private void Around()
{
float rotateX = 0;
float rotateY = 0;
rotateX = transform.localEulerAngles.x - Input.GetAxis("Mouse Y") * _sensitivity;
rotateY = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * _sensitivity;
transform.localEulerAngles = new Vector3(rotateX, rotateY, 0);
}
}