纳金网

标题: 精简好用的u3d摄像机控制脚本 [打印本页]

作者: 狂风大尉    时间: 2014-10-28 03:17
标题: 精简好用的u3d摄像机控制脚本
  1.     private Transform player;
  2.     public float scrollSpeed = 6.0f;
  3.     public float roundSpeed = 4.2f;
  4.     public float _vMinLimit = 15f; //y min limit
  5.     public float _vMaxLimit = 55f; //y max limit

  6.     public float zoomMin = 3f;  //zoom min
  7.     public float zoomMax = 8f; //zoom max

  8.     float hh;
  9.     float vv;
  10.     float distance;
  11.      
  12.     // Update is called once per frame
  13.     void Update () {
  14.         if (!player) {
  15.             getPlayer();        
  16.         }
  17.         calPos (aroundView (), scrollView ());

  18.          
  19.     }
  20.     float scrollView(){
  21.         float wheel = Input.GetAxis ("Mouse ScrollWheel");
  22.         float dis = Vector3.Distance (transform.position, player.position);
  23.         dis -= wheel * scrollSpeed;
  24.          
  25.         distance = Mathf.Clamp (distance,zoomMin,zoomMax);
  26.         return distance;

  27.     }
  28.     Quaternion aroundView(){
  29.         float h = Input.GetAxis ("Mouse X");
  30.         float v = Input.GetAxis ("Mouse Y");
  31.         Quaternion rt = Quaternion.Euler(transform.eulerAngles);

  32.         bool rightMouseDown = Input.GetMouseButton (1);
  33.         if (rightMouseDown) {

  34.             hh += h * roundSpeed; // horizontal
  35.             vv -= v;//vertical
  36.             vv = Mathf.Clamp(vv,_vMinLimit,_vMaxLimit);
  37.             rt = Quaternion.Euler(vv,hh,0f);
  38.         }
  39.         return rt;
  40.     }
  41.     //core code
  42.     void calPos(Quaternion angle,float distance){

  43.         Vector3 pos = angle*new Vector3 (0f,0f,-distance) + player.position;//core code
  44.          
  45.         transform.position = pos;
  46.         transform.rotation = angle;//or use the next method
  47. //        transform.LookAt (player.position);
  48.     }

  49.     void getPlayer(){
  50.          
  51.         player = GameObject.FindGameObjectWithTag (TagsEnum.Player.ToString ()).transform;
  52.          hh = transform.eulerAngles.y;
  53.         vv = transform.eulerAngles.x;
  54.         distance = zoomMax;
  55.     }
复制代码

作者: hyui    时间: 2014-10-28 03:56
good to learn !
作者: 我不再年轻    时间: 2014-10-30 17:21
谢谢楼主分享
作者: huhumark    时间: 2014-10-31 12:43
感谢分享




欢迎光临 纳金网 (http://rs.narkii.com/club/) Powered by Discuz! X2.5