unity3d简单的相机跟随及视野旋转缩放

完整脚本CamaraController.cs,直接挂载到Camera上就可以运行了

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraController : MonoBehaviour {
    public Transform trans;
    private Vector3 offset;
    private float distance;
    public float scrollSpeed=5.0f;
    public float MinDistance = 10.0f;
    public float MaxDistance = 40.0f;
    private bool isRotating;
    public float rotateSpeed=5.0f;
    // Use this for initialization
    void Start () {
         offset = transform.position - trans.position;
    }

    // Update is called once per frame
    void Update () {
        transform.position = offset + trans.position;
        RotateView();
        ScrollView();
    }
    private void ScrollView()
      {
          distance = offset.magnitude;
          //向前滑动拉近 向后滑动拉远
          distance -= Input.GetAxis("Mouse ScrollWheel") * scrollSpeed;
          distance = Mathf.Clamp(distance, MinDistance, MaxDistance);
          offset = offset.normalized* distance;
    }
     private void RotateView()
      {
          //鼠标右键按下可以旋转视野
          if (Input.GetMouseButtonDown(1))
              isRotating = true;
          if (Input.GetMouseButtonUp(1))
             isRotating = false;

          if (isRotating)
         {
             Vector3 originalPosition = transform.position;
             Quaternion originalRotation = transform.rotation;
             transform.RotateAround(trans.position, trans.up, rotateSpeed* Input.GetAxis("Mouse X"));
             transform.RotateAround(trans.position, transform.right, -rotateSpeed* Input.GetAxis("Mouse Y"));
             float x = transform.eulerAngles.x;
             //旋转的范围为10度到80度
             if (x< 10 || x> 80)
             {
                 transform.position = originalPosition;
                 transform.rotation = originalRotation;
             }

         }

         offset = transform.position - trans.position;
     }
}

相机跟随主角移动

一种简单的方法是把Camera直接拖到Player下面作为Player的子物体,另一种方法是取得Camera与Player的偏移向量,并据此设置Camera位置,便能实现简单的相机跟随了。

public class CameraController : MonoBehaviour {

        public Transform player;//定义为public可以直接在面板里设置主角
        private Vector3 offset;

    // Use this for initialization
    void Start () {
        offset = transform.position - player.position;//取得初始偏移量
        transform.LookAt(player.position);
    }

    // Update is called once per frame
    void Update () {
        transform.position = offset + player.position;

    }

视野的缩放

鼠标滚轮向前拉近视野,向后视野变远。原理是设置一个变量distance为偏移向量的模,鼠标滚轮滑动改变distance的值,然后根据distance设置Camera的位置,其中scrollSpeed为定义的一个float变量用于调整缩放的速度

private float distance;
public float scrollSpeed;
public float MinDistance;
public float MaxDistance;

private void ScrollView()
    {
        distance = offset.magnitude;
        //向前滑动拉近 向后滑动拉远
        distance -= Input.GetAxis("Mouse ScrollWheel") * scrollSpeed;
        distance = Mathf.Clamp(distance, MinDistance, MaxDistance);
        offset = offset.normalized * distance;
    }

//然后在Update里面调用ScrollView方法

视野旋转

采用transform.RotateAround方法,让Camera根据Player的位置旋转

private bool isRotating;
public float rotateSpeed;

private void RotateView()
    {
        //鼠标右键按下可以旋转视野
        if (Input.GetMouseButtonDown(1))
            isRotating = true;
        if (Input.GetMouseButtonUp(1))
            isRotating = false;

        if (isRotating)
        {
            Vector3 originalPosition = transform.position;
            Quaternion originalRotation = transform.rotation;
            transform.RotateAround(player.position, player.up, rotateSpeed * Input.GetAxis("Mouse X"));
            transform.RotateAround(player.position, transform.right, -rotateSpeed * Input.GetAxis("Mouse Y"));
            float x = transform.eulerAngles.x;
            //旋转的范围为10度到80度
            if (x < 10 || x > 80)
            {
                transform.position = originalPosition;
                transform.rotation = originalRotation;
            }

        }

        offset = transform.position - player.position;
    }
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值