Unity控制摄像机跟随人物,可调节远近及调节视角

4 篇文章 0 订阅
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FollowPlayer : MonoBehaviour
{
    private Transform player;
    private Vector3 offsetPosition;//位置偏移
    private bool isRotaing = false;

    public float distance = 0;
    public float sceollSpeed = 10;
    public float rotaSpeed = 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();
        //视野拉升
        ScrollView();
        
    }

    void ScrollView()
    {
       // print(Input.GetAxis("Mouse ScrollWheel"));  //向后返回负值,向前返回正值

        distance = offsetPosition.magnitude;
        distance += Input.GetAxis("Mouse ScrollWheel")*sceollSpeed;
        distance = Mathf.Clamp(distance, 2, 18);//视野拉升的距离限制2-18
        offsetPosition = offsetPosition.normalized * distance; 

    }
    void RotateView()
    {
        Input.GetAxis("Mouse X"); //得到鼠标在水平方向的滑动
        Input.GetAxis("Mouse Y"); //得到鼠标在垂直方向的滑动
        if (Input.GetMouseButtonDown(1))
        {
            isRotaing = true;
        }
        if (Input.GetMouseButtonUp(1))
        {
            isRotaing = false;
        }
        if (isRotaing)
        {
            transform.RotateAround(player.position, player.up, rotaSpeed * Input.GetAxis("Mouse X"));

            Vector3 originalPos = transform.position;
            Quaternion originaalRotation = transform.rotation;

            transform.RotateAround(player.position, transform.right,  -rotaSpeed * Input.GetAxis("Mouse Y"));//影响的属性有两个一个是positio你,一个是rotation
            float x = transform.eulerAngles.x;

            if (x<10||x>80)//当超出范围后,属性归为原来的属性,使旋转无效
            {
                transform.position = originalPos;
                transform.rotation = originaalRotation;
            }
            x = Mathf.Clamp(x, 10, 80);
            transform.eulerAngles = new Vector3(x, transform.eulerAngles.y, transform.eulerAngles.z);
        }
        offsetPosition = transform.position-player.position;//更新
    }
}
 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值