unity3D物体的旋转和缩放

昨天我去看电影了,《泰坦尼克号》,看完我心里有种说不出来的味道~~~~。

呵呵~~~几天没写博客了,这几天学了两天3Dmax,因为网上下载的都是bip和模型,就是没动画,所以我就想把这两个合到一起,学了两天就懂了一点点,哎~~~~  做了一个简单的展示3D模型的demo,就是旋转和缩放啦,效果做的不是很满意啦,我今天又改了一下,然后和大家分享一下,好了,进入主题吧。

一.旋转: 
         旋转有很多种函数,我都试了一下,最后我选择了RotateAround函数;
     Input.GetAxis("Mouse X")又正左负,Input.GetAxis("Mouse Y")上正下负,这两个函数你可以感受一下,他的大小会随着你的手势(或者鼠标)方向和速度改变的。
     用这两个函数就能做出手势控制物体的旋转了,重点:你自己要体验一下Input.GetAxis("Mouse X/Y")的用法,然后就是注意一下旋转方向;
二.缩放:
    缩放手势是用两个手指来模拟的,当两手之间的距离越来越大,那就是放大,反之缩小;
    放大的方法有两种:
       1.物体用localScale来放大物体。不知道为什么我用这种放大得不到我想要的效果;
       2.拉近摄像机,这里面可就有一点学问了,我记得我在看OpenGL的时候,上面用铁轨来比喻一个视觉效果,实际当中铁轨是平行的不相交,但是我们视觉上的效果就是铁轨间的距离越来越近,最后相交了。unity3D默认的是相交的效果(camera-->Projection-->perspective),当然也有不想交的效果了(camera-->
Projection-->orthographic),你们试试效果很不一样的。如果你想加入天空盒而且不想随着物体缩放,看到天空背景也移动的话,那就选第二种。我加了天空盒,所以用第二种了,呵呵~~~

[java]  view plain copy print ?
  1. <p>  
  2. </p><pre name="code" class="java" style="background-color: rgb(255, 255, 255); "><pre name="code" class="java">var rotatepos:Transform;//rotatepos是该物体的一个子物体,放到物体的中心地方就行。  
  3. var horizontalSpeed : float ;  
  4. var verticalSpeed : float ;  
  5. var flag:boolean;  
  6.   
  7. var olddis:float=0;  
  8. var newdis:float=0;  
  9. var child:Transform;  
  10.   
  11.   
  12. function Start(){  
  13.   
  14.   horizontalSpeed=0;  
  15.   
  16.   verticalSpeed=0;  
  17.   
  18.   flag=true;  
  19.   
  20. }  
  21.   
  22.   
  23.   
  24. function Update () {  
  25.  if(flag){  
  26.   transform.RotateAround(rotatepos.position,Vector3.up,1);  
  27.  }  
  28.  //物体的旋转  
  29.  if(Input.touchCount==1){  
  30.     
  31.   if(Input.GetTouch(0).phase==TouchPhase.Moved){  
  32.    flag=false;  
  33.    var h : float=Input.GetAxis("Mouse X");//又正左负  
  34.    var v : float =Input.GetAxis("Mouse Y");//上正下负  
  35.   
  36.      
  37.   
  38.  if(Mathf.Abs(h)>=Mathf.Abs(v)){   
  39.    if(h<0){  
  40.      horizontalSpeed=6;  
  41.      transform.RotateAround(rotatepos.position,Vector3.up,horizontalSpeed);  
  42.    }  
  43.    if(h>0){  
  44.      horizontalSpeed=6;  
  45.      transform.RotateAround(rotatepos.position,-Vector3.up,horizontalSpeed);  
  46.    }  
  47.   
  48.   }  
  49.     
  50.   
  51.   else{  
  52.    if(v<0){  
  53.      verticalSpeed=6;  
  54.      transform.RotateAround(rotatepos.position,-Vector3.right,verticalSpeed);  
  55.    }  
  56.    if(v>0){  
  57.      verticalSpeed=6;  
  58.      transform.RotateAround(rotatepos.position,Vector3.right,verticalSpeed);  
  59.    }  
  60.   }  
  61.   
  62.     
  63.   
  64.  }  
  65. }  
  66.   
  67.    
  68.   
  69.    
  70.   //物体的缩放  
  71.  if(Input.touchCount>1){  
  72.   
  73.     flag=false;  
  74.    if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved){  
  75.   
  76.      
  77.     var pos1=Input.GetTouch(0).position;  
  78.     var pos2=Input.GetTouch(1).position;     
  79.     newdis=Vector2.Distance(pos1,pos2);  
  80.     if(olddis!=null){   
  81.       if(newdis<olddis) {           
  82.         Camera.main.camera.orthographicSize+=2;     
  83.       }  
  84.       if(newdis>olddis) {  
  85.         Camera.main.camera.orthographicSize-=2;   
  86.       }       
  87.     }  
  88.     olddis=newdis;    
  89.   
  90.    }      
  91.  }    
  92.      
  93.      
  94.    //按返回键退出程序  
  95.    if(Input.GetKey(KeyCode.Escape)){  
  96.       Application.Quit();  
  97.    }  
  98. }  
  99. </pre>  
  100. <p>上面的代码有点局限,不适合所有物体,那么现在我就来改一下吧,让他适合每一种物体哦。</p>  
  101. <p></p>  
  102. <pre name="code" class="java">var horizontalSpeed:float=0;  
  103. var newdis:float=0;  
  104. var olddis:float=0;  
  105. function Update () {  
  106.    if(Input.touchCount==1){   
  107.         if(Input.GetTouch(0).phase==TouchPhase.Moved){  
  108.            var h : float=Input.GetAxis("Mouse X");//又正左负  
  109.               if(h<0){       
  110.                  horizontalSpeed=1.5;  
  111.                  transform.Rotate(transform.up*horizontalSpeed);       
  112.               }    
  113.               if(h>0){  
  114.                    horizontalSpeed=1.5;     
  115.                    transform.Rotate(-transform.up*horizontalSpeed);     
  116.               }  
  117.           }  
  118.      }  
  119.        
  120.    if(Input.touchCount>1){    
  121.        if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved){    
  122.        var pos1=Input.GetTouch(0).position;    
  123.        var pos2=Input.GetTouch(1).position;       
  124.        newdis=Vector2.Distance(pos1,pos2);    
  125.        if(olddis!=null){     
  126.          if(newdis<olddis) {             
  127.             Camera.main.camera.orthographicSize+=0.2;       
  128.           }    
  129.          if(newdis>olddis) {    
  130.             Camera.main.camera.orthographicSize-=0.2;     
  131.           } if( Camera.main.camera.orthographicSize<0){  
  132.              Camera.main.camera.orthographicSize=0;  
  133.          }   
  134.          if( Camera.main.camera.orthographicSize>10){  
  135.              Camera.main.camera.orthographicSize=10;  
  136.          }             
  137.       }    
  138.       olddis=newdis;      
  139.     
  140.       }        
  141.    }      
  142.        
  143.        
  144.    //按返回键退出程序    
  145.    if(Input.GetKey(KeyCode.Escape)){    
  146.       Application.Quit();    
  147.    }    
  148.    
  149. }</pre><br>  
  150. <br>  
  151. <p></p>  
  152. <p><br>  
  153. </p>  
  154. <p><span style="font-size:18px; color:#ff0000">这篇就说到这,下一篇是《让物体有惯性的旋转》~~~~</span></p>  
  155. <pre></pre>  
  156. <pre></pre>  
  157. <pre></pre>  
  158. <pre></pre>  
  159. <pre></pre>  
  160. <pre></pre>  
  161. <pre></pre>  
  162. <pre></pre>  
  163. <pre></pre>  
  164. <pre></pre>  
  165. <pre></pre>  
  166. <pre></pre>  
  167. <pre></pre>  
  168.   
  169. </pre>

你可能感兴趣的:(unity3D物体的旋转和缩放)