2012-02-16 54 views
2

這是什麼,我試圖做一個簡單的代碼:旋轉在Unity3D

var angle = 1.57; 
if (this.transform.rotation.y > angle){ 
    this.transform.rotation.y--; 
} else if (this.transform.rotation.y < angle){ 
    this.transform.rotation.y++; 
} 

我已經習慣了在AS3的代碼,如果我這樣做在閃光,它完美的作品,但在Unity3D它沒有,我很難弄清楚爲什麼,或者我怎麼能得到這個效果。

任何人都可以幫助我嗎?謝謝!

編輯:

我的對象是一個剛體車2個膠囊對撞機駕駛的「顛簸」地板,並在某些時候,他剛剛失去了方向精準,我認爲它是因爲它是heirarchical輪換制度。

(感謝琦爲transform.eulerAngles尖端)

+2

你知道嗎,團結都有自己專用的[堆棧交易所網站(HTTP://答案。 unity3d.com/index.html])?你可能在那裏有更多的專門的答案。 – rotoglup 2012-02-16 22:22:14

+2

技術上來說,answers.unity3d.com不是一個Stack Exchange會員。它由Qato和開源克隆提供。但是,是的,Unity有專門的社區支持網站。 – Leniency 2012-02-16 22:32:55

+0

我同意這是一個非常好的和非常寶貴的資源,我不時在那裏發帖,但我不喜歡他們的聲譽系統:一個被接受的答案值得0分。也許有點幼稚,但每天花15分鐘回答一點點就像我正在開發的遊戲:-) – Kay 2012-02-16 23:43:33

回答

11

transform.rotation檢索Quaternion。改爲嘗試transform.rotation.eulerAngles.y

+0

實際上我做了,但是對象是一輛帶有2個膠囊撞擊器的剛體車,在一個「顛簸」的地板上行駛,並且在某些時候他只是失去了方向精度,我認爲它是因爲它是輪胎轉動系統...我是將這些信息添加到問題中,以便人們可以更好地看到它。 – William 2012-02-17 17:24:42

+1

您是否嘗試過transform.localRotation? – Erdemus 2012-05-03 11:25:21

0

您需要創建一個新的四元數對象

transform.rotation = Quaternion.Euler(transform.rotation.x,transform.rotation.y ++,變換.rotation.z);

您也可以使用transform.Rotate函數。

0

上面的建議使用transform.Rotate()可能是你需要做的實際使它旋轉,但transform.Rotate()的變量是速度/速度而不是方向,所以變換如果您想旋轉角度,Rotate()將不得不使用多個軸。例如:

class Unity // Example is in C# 
{ 
    void Update() 
    { 
     gameObject.transform.Rotate(0, 1, 0); 
    } 
} 

這將在1

的速度繞其y軸的對象讓我知道如果這能幫助 - 如果它阻礙了我不同的解釋。

1

到目前爲止我看到兩個問題。首先是Unity的層次輪換。根據您想達到你應該處理要麼

transform.localEulerAngles 
or 
transform.eulerAngles 

第二件事是,你不能修改歐拉角這樣,作爲載體都按值傳遞的是什麼:

transform.localEulerAngles.y--; 

你要做這樣說:

Vector3 rotation = transform.localEulerAngles; 
rotation.y--; 
transform.localEulerAngles = rotation; 
0

你應該嘗試Time.deltaTime

multiplyng您的旋轉因子

希望幫助

和平

0

這裏是我的腳本遊戲物體旋轉觸摸

// 
// RotateController.cs 
// 
// Created by Ramdhan Choudhary on 12/05/13. 
// 

using UnityEngine; 
using System; 

public class RotateController 
{ 

     private float RotationSpeed = 9.5f; 
     private const float mFingerDistanceEpsilon = 1.0f; 
     public float MinDist = 2.0f; 
     public float MaxDist = 50.0f; 
     private Transform mMoveObject = null; 
     private bool isEnabledMoving = false; 


     //************** Rotation Controller Constructor **************// 
     public RotateController (Transform goMove) 
     { 
       isEnabledMoving = true; 
       mMoveObject = goMove; 
       if (mMoveObject == null) { 
         Debug.LogWarning ("Error! Cannot find object!"); 
         return; 
       } 
     } 

     //************** Handle Object Rotation **************// 
     public void Update() 
     { 
       if (!isEnabledMoving && mMoveObject != null) { 
         return; 
       } 

       Vector3 camDir = Camera.main.transform.forward; 
       Vector3 camLeft = Vector3.Cross (camDir, Vector3.down); 

       // rotate 
       if (Input.touchCount == 1) { 
         mMoveObject.Rotate (camLeft, Input.touches [0].deltaPosition.y * RotationSpeed * Time.deltaTime, Space.World); 
         mMoveObject.Rotate (Vector3.down, Input.touches [0].deltaPosition.x * RotationSpeed * Time.deltaTime, Space.Self); 
       } 


     } 
}