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),你们试试效果很不一样的。如果你想加入天空盒而且不想随着物体缩放,看到天空背景也移动的话,那就选第二种。我加了天空盒,所以用第二种了,呵呵~~~

  1. var rotatepos:Transform;//rotatepos是该物体的一个子物体,放到物体的中心地方就行。   
  2. var horizontalSpeed : float ;  
  3. var verticalSpeed : float ;  
  4. var flag:boolean;  
  5.   
  6. var olddis:float=0;  
  7. var newdis:float=0;  
  8. var child:Transform;  
  9.   
  10.   
  11. function Start(){  
  12.   
  13.   horizontalSpeed=0;  
  14.   
  15.   verticalSpeed=0;  
  16.   
  17.   flag=true;  
  18.   
  19. }  
  20.   
  21.   
  22.   
  23. function Update () {  
  24.  if(flag){  
  25.   transform.RotateAround(rotatepos.position,Vector3.up,1);  
  26.  }  
  27.  //物体的旋转   
  28.  if(Input.touchCount==1){  
  29.     
  30.   if(Input.GetTouch(0).phase==TouchPhase.Moved){  
  31.    flag=false;  
  32.    var h : float=Input.GetAxis("Mouse X");//又正左负   
  33.    var v : float =Input.GetAxis("Mouse Y");//上正下负   
  34.   
  35.      
  36.   
  37.  if(Mathf.Abs(h)>=Mathf.Abs(v)){   
  38.    if(h<0){  
  39.      horizontalSpeed=6;  
  40.      transform.RotateAround(rotatepos.position,Vector3.up,horizontalSpeed);  
  41.    }  
  42.    if(h>0){  
  43.      horizontalSpeed=6;  
  44.      transform.RotateAround(rotatepos.position,-Vector3.up,horizontalSpeed);  
  45.    }  
  46.   
  47.   }  
  48.     
  49.   
  50.   else{  
  51.    if(v<0){  
  52.      verticalSpeed=6;  
  53.      transform.RotateAround(rotatepos.position,-Vector3.right,verticalSpeed);  
  54.    }  
  55.    if(v>0){  
  56.      verticalSpeed=6;  
  57.      transform.RotateAround(rotatepos.position,Vector3.right,verticalSpeed);  
  58.    }  
  59.   }  
  60.   
  61.     
  62.   
  63.  }  
  64. }  
  65.   
  66.    
  67.   
  68.    
  69.   //物体的缩放   
  70.  if(Input.touchCount>1){  
  71.   
  72.     flag=false;  
  73.    if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved){  
  74.   
  75.      
  76.     var pos1=Input.GetTouch(0).position;  
  77.     var pos2=Input.GetTouch(1).position;     
  78.     newdis=Vector2.Distance(pos1,pos2);  
  79.     if(olddis!=null){   
  80.       if(newdis<olddis) {           
  81.         Camera.main.camera.orthographicSize+=2;     
  82.       }  
  83.       if(newdis>olddis) {  
  84.         Camera.main.camera.orthographicSize-=2;   
  85.       }       
  86.     }  
  87.     olddis=newdis;    
  88.   
  89.    }      
  90.  }    
  91.      
  92.      
  93.    //按返回键退出程序   
  94.    if(Input.GetKey(KeyCode.Escape)){  
  95.       Application.Quit();  
  96.    }  
  97. }  

相关内容