追蹤
Dream.Demon-夢惡魔
關於部落格
  • 42275

    累積人氣

  • 0

    今日人氣

    4

    追蹤人氣

Unity程式碼之飛機翻滾

所以都是去Help找指令或是問人
了解基本指令是幹麻的之後....
就開始玩樂高組裝了....

預期效果:
按"上"超過一秒後再0.3秒以內按"下"
飛機會向下翻滾
(反之亦然
普通案上按下則只有傾斜


以下為我流的飛機翻滾程式碼和邏輯翻譯

 

  if(Input.GetKeyDown("up") )
  {
  UpTime  = Time.time;
  }
  if(Input.GetKeyUp("up") )
  {
  delay  = Time.time;
  if(Time.time >= UpTime + 1 && !Input.GetKey("down"))
  DownTurn = true;
  }
  
  
  if(Input.GetKeyDown("down") ) 
  {
  DownTime  = Time.time;
  }
  if(Input.GetKeyUp("down") )
  {
  delay  = Time.time;
  if(Time.time >= DownTime + 1 && !Input.GetKey("up"))
  UpTurn = true;
  }
  
  if(Input.GetKey("up") )
  UpRota = true;
 else
  UpRota = false;

 if(Input.GetKey("down") )
  DownRota = true;
 else
  DownRota = false;
  
 if(UpRota && DownRota)
 {
 UpRota = false;
 DownRota = false;
 }
  
  
  
  
 if(UpRota && !UpTurn)
 {
  if(yRotation > 45)
   return;
  yRotation += 5;
  if(yRotation < -45)
  yRotation += 10;

 }

  if(UpRota && UpTurn)
 {
  if(yRotation > 720)
  yRotation -= 360; 
  yRotation += 15;
  TurnTrue = true;

 }

 if(DownRota && !DownTurn)
 {

  if(yRotation < -45)
   return;
  yRotation -= 5;
  if(yRotation > 45)
  yRotation -= 10;
 }
 
 if(DownRota && DownTurn)
 {
  if(yRotation < -720)
  yRotation += 360;  
  yRotation -= 15;
  TurnTrue = true;
 }
 

 
 if(!UpRota && !DownRota)
 {
  if (yRotation > 0 ) 
   yRotation -= 5;
  if (yRotation < 0 )
   yRotation += 5;
  if (TurnTrue)
  {
  if (yRotation > 0 ) 
   yRotation -= 10;
  if (yRotation < 0 )
   yRotation += 10;
  }
  
  if (yRotation < 10 && yRotation > -10)
   TurnTrue = false;
  if (Time.time >= delay +0.3)
   {
    UpTurn = false;
    DownTurn = false;
   }
 }
 
  transform.eulerAngles = Vector3(0, 0, yRotation);



偵測按下UP的瞬間
UP計時器則開始計時(UpTime=Time.time

 

偵測Up放開的瞬間
延遲計時器開始計時(delay = Time.time
判斷Up計時器是否超過一秒 且 此時沒壓著down(此時兩個鍵都案)(案up超過一秒
有的話
則開啟"向下翻滾"(DownTurn
*需向下壓超過1秒才能開啟向上翻滾

/////////down同上///////////

當壓著up的時候
開啟"向上轉動"(UpRoat
否則關閉"向上轉動"(UpRoat

/////////down同上///////////


如果向上轉動和向下轉動都開啟
則關掉兩者

////////////////////////////

如果向上轉動開啟(UpRoat) 且 向上翻滾關閉(!UpTurn)
則開始對應動作:
超過45度則無動作
沒超過45度則開始旋轉(一直+5度
如果小於-45度(代表上一輪有翻滾
則旋轉速度再+10

如果向上轉動開啟(UpRoat) 且 向上翻滾開啟(UpTurn)
則開始對應翻滾動作:
如果轉超過1圈(>720度
則減一圈(-360度
旋轉+15度
開啟"是否旋轉過"判斷(TurnTrue

/////////down同上///////////


如果向上轉動和向下轉動都關閉
(沒按案件或是同時按上和下)

角度大於0就一直-5
角度小於0就一直+5
(轉為正面

如果"是否旋轉過"判斷正確
則旋轉角度額外+10
(加速導正

如果角度回歸到10~-10之間
則關閉"是否旋轉過"判斷

延遲計時器計時後經過0.2秒
則關閉向上翻滾.向下翻滾
*壓超過一秒後放開後再0.2秒之內如果案反方向.則會翻滾




===============================
這樣的寫法有個Bug
那就是如果按"上"一秒
按"下"
會向下旋轉
但是如果下個動作是放開"下"之後重新按"下"
那就GG啦wwwwww


打完這篇的時候我有想到新的寫法了....
而且比較簡單+沒Bug(目前沒發現

嗯...
這篇打了都打了....
就留著吧(喂!

相簿設定
標籤設定
相簿狀態