Unity3D的相机跟随、视野缩放以及旋转

1、实现相机跟随主角运动

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

  这里我们选取第二种方法,首先给Camera添加一个脚本,取名为FollowPlayer,脚本很简单不做说明了 

 1 public class FollowPlayer : MonoBehaviour {
 2 
 3         private Transform player;
 4         private Vector3 offsetPosition;
 5 
 6     // Use this for initialization
 7     void Start () {
 8         player = GameObject.FindGameObjectWithTag(“Player”).transform;
 9         offsetPosition = transform.position - player.position;
10         transform.LookAt(player.position);
11     }
12     
13     // Update is called once per frame
14     void Update () {
15         transform.position = offsetPosition + player.position;
16 
17     }


2、视野的缩放

  鼠标滚轮向前拉近视野,向后视野变远。原理是设置一个变量distance为偏移向量的模,鼠标滚轮滑动改变distance的值,然后根据distance设置Camera的位置

  其中scrollSpeed为定义的一个float变量用于调整缩放的速度


 1 private float distance;
 2 
 3 private void ScrollView()
 4     {
 5         distance = offsetPosition.magnitude;
 6         //向前滑动拉近 向后滑动拉远
 7         distance -= Input.GetAxis("Mouse ScrollWheel") * scrollSpeed;
 8         distance = Mathf.Clamp(distance, MinDistance, MaxDistance);
 9         offsetPosition = offsetPosition.normalized * distance;
10     }
11 
12 //然后在Update里面调用ScrollView方法

3、视野旋转

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

  


 1 private void RotateView()
 2     {
 3         //鼠标右键按下可以旋转视野
 4         if (Input.GetMouseButtonDown(1))
 5             isRotating = true;
 6         if (Input.GetMouseButtonUp(1))
 7             isRotating = false;
 8 
 9         if (isRotating)
10         {
11             Vector3 originalPosition = transform.position;
12             Quaternion originalRotation = transform.rotation;
13             transform.RotateAround(player.position, player.up, rotateSpeed * Input.GetAxis("Mouse X"));
14             transform.RotateAround(player.position, transform.right, -rotateSpeed * Input.GetAxis("Mouse Y"));
15             float x = transform.eulerAngles.x;
16             //旋转的范围为10度到80度
17             if (x < 10 || x > 80)
18             {
19                 transform.position = originalPosition;
20                 transform.rotation = originalRotation;
21             }
22             
23         }
24 
25         offsetPosition = transform.position - player.position;
26     }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值