U3D游戏开发中,PC端游戏往往可以实现摄像头移动,比如缩进以及以玩家为轴左右旋转。我们可以通过以下代码实现,我将与大家一同分享:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowPlayer : MonoBehaviour
{
private Transform player;
//位置偏移
private Vector3 offsetPosition;
public float distance = 0;
public float scrollSpeed = 8;
private bool IsRotating = false;
public float rotateSpeed = 2;
// Start is called before the first frame update
void Start()
{
player = GameObject.FindGameObjectWithTag(Tags.player).transform;
transform.LookAt(player.position);
offsetPosition = transform.position - player.position;
}
// Update is called once per frame
void Update()
{
transform.position = offsetPosition + player.position;
//处理视野的旋转
RotateView();
//处理视野的拉近拉远效果
ScrollVlew();
}
void ScrollVlew()
{
//向后滑动,拉近视野(返回负值)
//向前滑动,拉远视野(返回正值)
if (UICamera.isOverUI == false)
{
distance = offsetPosition.magnitude;
//但是我觉得向前滑动拉近,向后滑动拉远所以就修改了一下代码
distance -= Input.GetAxis("Mouse ScrollWheel") * scrollSpeed;
distance = Mathf.Clamp(distance, 2, 19);
offsetPosition = offsetPosition.normalized * distance;
}
}
void RotateView()
{
//得到鼠标在水平方向的滑动
Input.GetAxis("Mouse X");
//得到鼠标在竖直方向的滑动
Input.GetAxis("Mouse Y");
if (Input.GetMouseButtonDown(1))
{
IsRotating = true;
}
if (Input.GetMouseButtonUp(1))
{
IsRotating = false;
}
if (IsRotating)
{
transform.RotateAround(player.position, player.up, rotateSpeed * Input.GetAxis("Mouse X"));
Vector3 originalPos = transform.position;
Quaternion originalRotation = transform.rotation;
transform.RotateAround(player.position, transform.right, -rotateSpeed * Input.GetAxis("Mouse Y"));
float x = transform.eulerAngles.x;
if (x < 10 || x > 80)
{
//超出范围后,旋转将无效
transform.position = originalPos;
transform.rotation = originalRotation;
}
x = Mathf.Clamp(x, 10, 80);
transform.eulerAngles = new Vector3(x, transform.eulerAngles.y, transform.eulerAngles.z);
}
offsetPosition = transform.position - player.position;
}
}
使用以上代码可以解决摄像机的问题,很多项目中都可以直接使用。如果对你有帮助就点赞收藏吧!我还有很多系列的代码,几乎都是完整代码可运行的一些代码逻辑,我后续会更新更多的内容,包括2D系列,热更新系列等等,需要的可以关注我噢!为了提供更好的学习环境未开启收费模式,希望大家共同学习,做更好的游戏!(游戏人最后的挣扎)