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]
<p> 
</p><pre name="code" class="java" style="background-color: rgb(255, 255, 255); "><pre name="code" class="java">var rotatepos:Transform;//rotatepos是該物體的一個子物體,放到物體的中心地方就行。 
var horizontalSpeed : float ; 
var verticalSpeed : float ; 
var flag:boolean; 
 
var olddis:float=0; 
var newdis:float=0; 
var child:Transform; 
 
 
function Start(){ 
 
  horizontalSpeed=0; 
 
  verticalSpeed=0; 
 
  flag=true; 
 

 
 
 
function Update () { 
 if(flag){ 
  transform.RotateAround(rotatepos.position,Vector3.up,1); 
 } 
 //物體的旋轉 www.aiwalls.com  
 if(Input.touchCount==1){ 
   
  if(Input.GetTouch(0).phase==TouchPhase.Moved){ 
   flag=false; 
   var h : float=Input.GetAxis("Mouse X");//又正左負 
   var v : float =Input.GetAxis("Mouse Y");//上正下負 
 
    
 
 if(Mathf.Abs(h)>=Mathf.Abs(v)){  
   if(h<0){ 
     horizontalSpeed=6; 
     transform.RotateAround(rotatepos.position,Vector3.up,horizontalSpeed); 
   } 
   if(h>0){ 
     horizontalSpeed=6; 
     transform.RotateAround(rotatepos.position,-Vector3.up,horizontalSpeed); 
   } 
 
  } 
   
 
  else{ 
   if(v<0){ 
     verticalSpeed=6; 
     transform.RotateAround(rotatepos.position,-Vector3.right,verticalSpeed); 
   } 
   if(v>0){ 
     verticalSpeed=6; 
     transform.RotateAround(rotatepos.position,Vector3.right,verticalSpeed); 
   } 
  } 
 
   
 
 } 

 
  
 
  
  //物體的縮放 
 if(Input.touchCount>1){ 
 
    flag=false; 
   if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved){ 
 
    
    var pos1=Input.GetTouch(0).position; 
    var pos2=Input.GetTouch(1).position;    
    newdis=Vector2.Distance(pos1,pos2); 
    if(olddis!=null){  
      if(newdis<olddis) {          
        Camera.main.camera.orthographicSize+=2;    
      } 
      if(newdis>olddis) { 
        Camera.main.camera.orthographicSize-=2;  
      }      
    } 
    olddis=newdis;   
 
   }     
 }   
    
    
   //按返回鍵退出程序 
   if(Input.GetKey(KeyCode.Escape)){ 
      Application.Quit(); 
   } 

摘自 dlnuchunge的專欄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。