我有一个半圆形的游戏对象,我通过在空的游戏对象(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