设置 相机跟随 主角及视角 滑动

 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class CameraFllow : MonoBehaviour {
 5 
 6     private Transform player;
 7     public float speed = 3;
 8 
 9     void Start()
10     {
11         //向服务器实时更新数据的时候 将Player信息也更新
12         player = GameDataUtil.playerModel.transform;
13     }
14 
15     void Update()
16     {
17         //由 摄像机 和 玩家固定距离偏量 构建插值
18         Vector3 targetPos = player.position + new Vector3(0.28f,20.56f,60f);
19         //移动
20         transform.position = Vector3.Lerp(transform.position , targetPos , speed * Time.deltaTime);
21         //角度的移动 lookRotation 是按向量变换时的长度 来变的 ,相减 是由相机位置指向玩家
22         Quaternion targetRotation = Quaternion.LookRotation(player.position - transform.position);
23           // Slerp是根据 变换过程中角度的变化 插值的
24         transform.rotation = Quaternion.Slerp(transform.rotation , targetRotation , speed * Time.deltaTime);
25     }
26 }

 

 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class FollowPlayer : MonoBehaviour {
 5 
 6     private Transform player;
 7     private Vector3 offsetPosition;//位置偏移
 8     private bool isRotating = false;
 9 
10 
11     public float distance = 0;
12     public float scrollSpeed = 10;
13     public float rotateSpeed = 2;
14 
15     // Use this for initialization
16     void Start () {
17         player = GameObject.FindGameObjectWithTag(Tags.player).transform;
18         transform.LookAt(player.position);
19         offsetPosition = transform.position - player.position;
20     }
21     
22     // Update is called once per frame
23     void Update () {
24         transform.position = offsetPosition + player.position;
25         //处理视野的旋转
26         RotateView();
27         //处理视野的拉近和拉远效果
28         ScrollView();
29     }
30 
31     void ScrollView() {
32         //print(Input.GetAxis("Mouse ScrollWheel"));//向后 返回负值 (拉近视野) 向前滑动 返回正值(拉远视野)
33         distance = offsetPosition.magnitude;
34         distance += Input.GetAxis("Mouse ScrollWheel")*scrollSpeed;
35         distance = Mathf.Clamp(distance, 2, 18);
36         offsetPosition = offsetPosition.normalized * distance;
37     }
38 
39     void RotateView() {
40         //Input.GetAxis("Mouse X");//得到鼠标在水平方向的滑动
41         //Input.GetAxis("Mouse Y");//得到鼠标在垂直方向的滑动
42         if (Input.GetMouseButtonDown(1)) {
43             isRotating = true;
44         }
45         if (Input.GetMouseButtonUp(1)) {
46             isRotating = false;
47         }
48 
49         if (isRotating) {
50             transform.RotateAround(player.position,player.up, rotateSpeed * Input.GetAxis("Mouse X"));
51 
52             Vector3 originalPos = transform.position;
53             Quaternion originalRotation = transform.rotation;
54 
55             transform.RotateAround(player.position,transform.right, -rotateSpeed * Input.GetAxis("Mouse Y"));//影响的属性有两个 一个是position 一个是rotation
56             float x = transform.eulerAngles.x;
57             if (x < 10 || x > 80) {//当超出范围之后,我们将属性归位原来的,就是让旋转无效 
58                 transform.position = originalPos;
59                 transform.rotation = originalRotation;
60             }
61 
62         }
63 
64         offsetPosition = transform.position - player.position;
65     }
66 }

 

posted @ 2015-08-19 14:24  bambom  阅读(612)  评论(0编辑  收藏  举报