码迷,mamicode.com
首页 > 编程语言 > 详细

Unity3d--控制摄像机的视野范围

时间:2016-06-15 14:29:01      阅读:345      评论:0      收藏:0      [点我收藏+]

标签:

  1 using UnityEngine;
  2 using System.Collections;
  3 /*
  4  * 控制摄像机的视野范围
  5 */
  6 public class CameFieldCS : MonoBehaviour {
  7 
  8     private Transform player;
  9     private Vector3 offsetPosition;
 10     private float distance;
 11     private float scrollSpeed = 10; //鼠标滚轮速度
 12     private bool isRotating; //开启摄像机旋转
 13     private float rotateSpeed = 2; //摄像机旋转速度
 14 
 15     private float speed = 10;
 16     private float endZ = -8;
 17 
 18     private Camera came;
 19     // Use this for initialization
 20 
 21     void Awake(){
 22         player = GameObject.FindGameObjectWithTag ("Player").transform;
 23         came = this.GetComponent<Camera> ();
 24     }
 25 
 26     void Start () {
 27         //摄像机朝向player
 28         transform.LookAt (player.position);
 29         //获取摄像机与player的位置偏移
 30         offsetPosition = transform.position - player.position;
 31     }
 32 
 33     // Update is called once per frame
 34     void Update () {
 35         //摄像机跟随player与player保持相对位置偏移 
 36         transform.position = offsetPosition + player.position;
 37 
 38         //摄像机视野范围控制
 39         ScrollView ();
 40 
 41         //摄像机的旋转
 42         RotateView ();
 43     }
 44 
 45     void ScrollView(){
 46         //放大视野
 47         if (Input.GetAxis("Mouse ScrollWheel") < 0) {
 48             if(came.fieldOfView <= 70) {
 49                 came.fieldOfView += 5;
 50             }
 51         }
 52 
 53         //缩小视野
 54         if (Input.GetAxis("Mouse ScrollWheel") > 0) {
 55             if(came.fieldOfView >= 30) {
 56                 came.fieldOfView -= 5;
 57             }
 58         }
 59     }
 60 
 61     void RotateView(){
 62         //获取鼠标在水平方向的滑动
 63         Debug.Log(Input.GetAxis ("Mouse X"));
 64         //获取鼠标在垂直方向的滑动
 65         Debug.Log(Input.GetAxis("Mouse Y"));
 66 
 67         //按下鼠标右键开启旋转摄像机
 68         if (Input.GetMouseButtonDown(1)) {
 69             isRotating = true;
 70         }
 71 
 72         //抬起鼠标右键关闭旋转摄像机
 73         if (Input.GetMouseButtonUp(1)) {
 74             isRotating = false;
 75         }
 76 
 77         if (isRotating) {
 78 
 79             //获取摄像机初始位置
 80             Vector3 pos = transform.position;
 81             //获取摄像机初始角度
 82             Quaternion rot = transform.rotation;
 83 
 84             //摄像机围绕player的位置延player的Y轴旋转,旋转的速度为鼠标水平滑动的速度
 85             transform.RotateAround(player.position,player.up,Input.GetAxis("Mouse X") * rotateSpeed);
 86 
 87             //摄像机围绕player的位置延自身的X轴旋转,旋转的速度为鼠标垂直滑动的速度
 88             transform.RotateAround (player.position, transform.right, Input.GetAxis ("Mouse Y") * rotateSpeed);
 89 
 90             //获取摄像机x轴向的欧拉角
 91             float x = transform.eulerAngles.x;
 92 
 93             //如果摄像机的x轴旋转角度超出范围,恢复初始位置和角度
 94             if (x<10 || x>80) {
 95                 transform.position = pos;
 96                 transform.rotation = rot;
 97             }
 98         }
 99 
100         //更新摄像机与player的位置偏移
101         offsetPosition = transform.position - player.position;
102     }
103 }

Unity3d--控制摄像机的视野范围

标签:

原文地址:http://www.cnblogs.com/yuge790615/p/5587198.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!