纳金网

标题: Revolution 的 代码日志 [打印本页]

作者: 狂风大尉    时间: 2014-6-28 01:48
标题: Revolution 的 代码日志

控制摄像机代码

  1. #pragma strict
  2. var firsttarget : Transform;
  3. var enemytarget : Transform;
  4. var target : Transform;  //摄像机需要围绕的目标的坐标
  5. var distance=15.0;                 // 摄像机距离该目标的起始距离
  6. var targetcomfirm = 0;
  7. var xSpeed = 250;            //X轴 旋转速度
  8. var ySpeed = 100;         //Y轴旋转速度

  9. var yMinLimit = -20; //Y轴最小限制
  10. var yMaxLimit = 80;        //Y轴最大限制

  11. var x = 0.0;  //初始值
  12. var y= 0.0;

  13. //摄像机移动
  14. var xMove= 0.0;
  15. var yMove= 0.0;
  16. var distanceMove=20;

  17. //战略按钮
  18. var viewImage :Texture;
  19. var viewStyle :GUIStyle;

  20. private var oldPosition1 : Vector2; //记录触摸点上次位置
  21. private var oldPosition2 : Vector2;

  22. private var oldPosition3 : Vector2; //记录触摸点上次位置
  23. private var oldPosition4 : Vector2;

  24. var hits : RaycastHit[];
  25. var ray : Ray;

  26. var IdentityCheat: Identity;

  27. //LayerMask mask = 1 << 8;
  28. var smoothSwitch : int;

  29. function Start () {
  30.      var angles = transform.eulerAngles; //一种以欧拉角度量的旋转。transform.eulerAngles(x,y,z);表示绕x,y,z分别旋转的度数。

  31.      x= angles.y;   
  32.      y= angles.x;
  33.      transform.rotation = Quaternion.Euler(90, 0, 0);

  34. }

  35. function Update () {
  36.         
  37.                 if(target){
  38.                 //检测单点触摸
  39.                 if(Input.touchCount == 1){   
  40.         
  41.                     if(Input.GetTouch(0).phase==TouchPhase.Moved){ //检测手指在划过屏幕
  42.                                 x += Input.GetAxis("Mouse X") * xSpeed * 0.02; //通过轴输入来控制
  43.                                 y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;
  44.                         }
  45.                         else {
  46.                                         // 触屏产生射线控制物体
  47.                                  ray = Camera.main.ScreenPointToRay (Input.GetTouch(0).position);
  48.                                  hits = Physics.RaycastAll (ray, 100);
  49.                                  firsttarget=hits[0].transform;
  50.                                  IdentityCheat=firsttarget.GetComponent(Identity);
  51.                                  if(IdentityCheat.player==1){
  52.                                           target=firsttarget;
  53.                                           smoothSwitch=1;
  54.                                           var cintrolSystem=target.GetComponent(SpaceShip);
  55.                                           cintrolSystem.controlActive();
  56.                                  }
  57.                                  else if(IdentityCheat.tag=="enemy"){
  58.                                          enemytarget=firsttarget;
  59.                                          targetcomfirm=1;
  60.                                          
  61.                                          
  62.                                  }
  63.                                  
  64.                                 
  65.         
  66.                         }
  67.                 }
  68.                 //检测双点触摸
  69.                 else if(Input.touchCount >1){                                                
  70.                         if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved){
  71.                          var tempPosition1 = Input.GetTouch(0).position;  //计算出当前两点触摸点的位置
  72.                          var tempPosition2 = Input.GetTouch(1).position;
  73.                          if(isEnlarge(oldPosition1,oldPosition2,tempPosition1,tempPosition2)){//函数返回真为放大,返回假为缩小
  74.                                    
  75.                                            if(distance>3)//放大系数超过3以后不允许继续放大
  76.                                            distance -=0.2;
  77.                                  
  78.                                    }
  79.                          else{
  80.                                     if(distance<100) //缩小系数超过50后不允许继续缩小
  81.                                     distance += 0.2;
  82.                        
  83.                                    }
  84.                                    //备份上一次触摸点的位置,用于对比
  85.                                  oldPosition1=tempPosition1;
  86.                     oldPosition2=tempPosition2;
  87.                         
  88.                         
  89.                    }
  90.             }
  91.           }
  92.           //视角移动
  93.           else{
  94.                   if(Input.touchCount == 1){   
  95.         
  96.                     if(Input.GetTouch(0).phase==TouchPhase.Moved){ //检测手指在划过屏幕
  97.                                 xMove -= Input.GetAxis("Mouse X") *0.2; //通过轴输入来控制
  98.                                 yMove -= Input.GetAxis("Mouse Y") *0.2;
  99.                         }
  100.                         else {
  101.                                         // 触屏产生射线控制物体
  102.                                  ray = Camera.main.ScreenPointToRay (Input.GetTouch(0).position);
  103.                                  hits = Physics.RaycastAll (ray, 100);
  104.                                  firsttarget=hits[0].transform;
  105.                                  IdentityCheat=firsttarget.GetComponent(Identity);
  106.                                  if(IdentityCheat.player==1){
  107.                                           target=firsttarget;
  108.                                           smoothSwitch=1;
  109.                                           cintrolSystem=target.GetComponent(SpaceShip);
  110.                                           cintrolSystem.controlActive();
  111.                                  }
  112.                                 
  113.         
  114.                         }
  115.                 }
  116.                 /*else if(Input.touchCount >1){                                                
  117.                         if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved){
  118.                          var tempPosition3 = Input.GetTouch(0).position;  //计算出当前两点触摸点的位置
  119.                          var tempPosition4 = Input.GetTouch(1).position;
  120.                          if(isEnlarge(oldPosition3,oldPosition4,tempPosition3,tempPosition4)){//函数返回真为放大,返回假为缩小
  121.                                    
  122.                                            if(distanceMove>3)//放大系数超过3以后不允许继续放大
  123.                                            distanceMove -=0.2;
  124.                                  
  125.                                    }
  126.                          else{
  127.                                      //缩小系数超过50后不允许继续缩小
  128.                                     distanceMove += 0.2;
  129.                        
  130.                                    }
  131.                                    //备份上一次触摸点的位置,用于对比
  132.                                  oldPosition3=tempPosition3;
  133.                     oldPosition4=tempPosition4;
  134.                         
  135.                         
  136.                    }
  137.             } */
  138.          
  139.          
  140.          
  141.           }
  142.          
  143.           if(distanceMove<3)
  144.           distanceMove=3;


  145. }
  146.          
  147.         


  148. function isEnlarge(oP1 : Vector2,oP2 : Vector2,nP1 : Vector2,nP2 : Vector2) : boolean{
  149.                 //计算两个触摸点的距离,进行对比, 第一个距离比第二个距离大则是缩小,反之为放大
  150.                 var leng1 =Mathf.Sqrt((oP1.x-oP2.x)*(oP1.x-oP2.x)+(oP1.y-oP2.y)*(oP1.y-oP2.y));
  151.             var leng2 =Mathf.Sqrt((nP1.x-nP2.x)*(nP1.x-nP2.x)+(nP1.y-nP2.y)*(nP1.y-nP2.y));
  152.              if(leng1<leng2){
  153.                       return true;
  154.              }
  155.              else
  156.              {
  157.                      return false;
  158.              }
  159.             
  160. }
  161. function LateUpdate () {
  162.          
  163.             //target为我们绑定的箱子变量,缩放旋转的参照物
  164.             if (target) {      
  165.          
  166.                 //重置摄像机的位置,始终以目标为中心
  167.                 y = ClampAngle(y, yMinLimit, yMaxLimit);
  168.                 var rotation = Quaternion.Euler(y, x, 0); //绕x ,y轴 旋转相应的角度
  169.                 var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
  170.                          //var position= rotation * Vector3(0.0, 0.0, -distance) +Vector3(Mathf.Lerp(oldCameraPosition.x,target.position.x, Time.time * 1),target.position.y,target.position.z);
  171.                
  172.                // transform.rotation =  Quaternion.Slerp(transform.rotation, rotation,Time.deltaTime * 2);//调整摄像机位置 角度渐变
  173.                 transform.rotation = rotation;
  174.                 if(smoothSwitch){
  175.                 transform.position = Vector3.Lerp(transform.position,position, Time.deltaTime * 2);
  176.                 smoothSwitch=0;
  177.                
  178.                 }
  179.                 else
  180.                 transform.position=position;
  181.             
  182.                
  183.                
  184.             }
  185.             //无目标 屏幕移动
  186.             else{
  187.                     var Moveposition = rotation * Vector3(xMove, distanceMove, yMove) ;
  188.                     transform.position = Vector3.Lerp(transform.position,Moveposition, Time.time);
  189.             
  190.             }
  191.             
  192.             
  193.            
  194.             
  195.             
  196. }


  197. static function ClampAngle (angle : float, min : float, max : float) {
  198.         //规正角度
  199.     if (angle < -360)
  200.                 angle += 360;
  201.         if (angle > 360)
  202.                 angle -= 360;
  203.             return Mathf.Clamp (angle, min, max);
  204. }

  205. function OnGUI(){
  206.         
  207.         if(GUI.Button(Rect(Screen.width*0.9,Screen.height*0.8,100,100),viewImage,viewStyle))
  208.         {
  209.                
  210.                 var newposition = target.transform.position+Vector3(0,30,0);
  211.                 //camera.orthographic = true;

  212.                 transform.rotation = Quaternion.Euler(90, 0, 0);
  213.                
  214.                 xMove=transform.position.x;
  215.                 distanceMove=30 ;
  216.                 yMove=transform.position.z;
  217.                 target=null;
  218.                
  219.                
  220.         }
  221.         
  222. }
复制代码

作者: hyui    时间: 2014-6-28 02:23
Good to know !




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