我有一個半圓形的遊戲對象,我通過在空的遊戲對象(SCircle)中放置兩個弧並旋轉15°(左弧)和-15°(右弧),如下所示。如何在使用協程將一個子對象旋轉到一定角度時旋轉一個父對象
SCircle
具有Orientation
枚舉與兩個值Left
(旋轉SCircle至45°)和Right
(旋轉SCircle
至-45°)所看到下面在圖像中。
我用下面的協程,以方位之間移動SCircle
。
IEnumerator RotateLeftOrRight(Vector3 byAngles, float inTime)
{
Quaternion fromAngle = gameObject.transform.rotation ;
Quaternion toAngle = Quaternion.Euler (transform.eulerAngles);
if (circOrientation == Orientation.Left) {
toAngle = Quaternion.Euler (gameObject.transform.eulerAngles - byAngles);
circOrientation = Orientation.Right;
}
else if (circOrientation == Orientation.Right) {
toAngle = Quaternion.Euler (gameObject.transform.eulerAngles + byAngles);
circOrientation = Orientation.Left;
}
for(float t = 0f ; t <= 1f ; t += Time.deltaTime/inTime)
{
gameObject.transform.rotation = Quaternion.Lerp(fromAngle, toAngle, t) ;
yield return null ;
}
gameObject.transform.rotation = Quaternion.Lerp(fromAngle, toAngle, 1);
}
我也使用非常相似的協程30°從比方說,取向Left
移動個人弧(在相反方向上),如在協程和圖像下方觀察:
IEnumerator RotateArc(GameObject arcGO, Vector3 byAngles, float inTime)
{
Quaternion fromAngle = arcGO.transform.rotation ;
Quaternion toAngle = Quaternion.Euler (arcGO.transform.eulerAngles);
if (rightArc.arcOrientation == Arc.Orientation.Down) {
toAngle = Quaternion.Euler (arcGO.transform.eulerAngles + byAngles);
rightArc.arcOrientation = Arc.Orientation.Up;
}
else if (rightArc.arcOrientation == Arc.Orientation.Down) {
toAngle = Quaternion.Euler (arcGO.transform.eulerAngles - byAngles);
rightArc.arcOrientation = Arc.Orientation.Up;
}
for(float t = 0f ; t <= 1f ; t += Time.deltaTime/inTime)
{
arcGO.transform.rotation = Quaternion.Lerp(fromAngle, toAngle, t) ;
yield return null ;
}
arcGO.transform.rotation = Quaternion.Lerp(fromAngle, toAngle, 1);
}
由於SCircle
協程是通過鼠標點擊激活的,我有個別圓弧協程運行的情況,並且在它完成之前父協程是也跑。在這種情況下,弧線從Left
最終移動到A,這不是我需要的行爲。當從Left
移動時,我希望它們的行爲在B處結束。同樣,從B開始,當協調程序在弧進程正在運行的同時運行時,方向將返回到Left
。
請注意,藍色箭頭表示左側弧的移動,紅色表示右側弧,黑色表示SCircle
- 父對象的移動。
可以肯定的是,您想要同時移動這兩個弧線但方向不同,並且您還希望移動在同一時間結束?如果是,哪個對象是另一個對象的父對象? – Programmer
@Programmer SCircle是父對象,由包含左右弧的空對象創建。我不希望運動同時結束,因爲子圓弧的旋轉協程在父SCcclecle的旋轉協程之前開始。因此,子弧旋轉應該在父項之前結束。只有當兩個協同程序同時運行時纔會有一個時間點。一般來說,每個協程都應該是時候了。 – Bane
請向我們展示將弧線旋轉30度的代碼。你是否設置了弧線而不是局部旋轉? – lockstock