gpt4 book ai didi

c# - 找到旋转的差异,作为随时间统一的平均值 c#

转载 作者:行者123 更新时间:2023-11-30 23:26:10 25 4
gpt4 key购买 nike

我有一个玩家可以旋转的船轮。我目前记录角度变化,它被添加到一个总角度。然后我可以计算出船轮转动了多少次。这一切都很好。

void Update()
{
//Record Amount of Wheel Turns
currentAngle = wheelRectTransform.transform.rotation.eulerAngles.z;
angleChange = Mathf.DeltaAngle(currentAngle, previousAngle);

if ((Mathf.Abs(angle + angleChange) / 360) <= wheelTurnsUntilRudderAtMaxAngle)
{
angle += angleChange;
}

totalWheelTurns = angle / 360;
shipStats.RudderAngle = totalWheelTurns / wheelTurnsUntilRudderAtMaxAngle;

previousAngle = currentAngle;
}

不过,我也想记录一下平均角度随时间的变化。然后我就可以准确地知道轮子是向左还是向右旋转。

我试过这样简单的事情

if (angleChange < 0)
{
// Going Left
}
else if (angleChange > 0)
{
// Going Right
} else
{
// Not moving
}

然而在实践中,如果玩家旋转轮子的速度非常非常慢,则偶尔帧上的角度差为 0 并记录为“不移动”。

我相信解决方案是找到短时间内的平均角度变化,因此我尝试将角度随时间 Lerp 到 0。

newAngleDifference = Mathf.Lerp(angleChange, 0, Time.deltaTime * 0.2f);

这没有用,它给我的反馈与我只是使用“angleChange”一样,无论如何都可以为 0。

谢谢!

吉姆

最佳答案

您不需要平均任何东西来检测车轮的方向。只需使用旧变量和新变量即可找到车轮的行驶方向。

 void Start()
{
StartCoroutine(wheelDIRCalculator(_wheelTransform));
}


bool continueWheelCalculation = false;

IEnumerator wheelDIRCalculator(Transform wheelTransform)
{
yield return null;

continueWheelCalculation = true;

float oldZAngle = 0;
float newZAngle = 0;
bool isIdle = false;

oldZAngle = Mathf.Abs(wheelTransform.rotation.eulerAngles.z);


while (continueWheelCalculation)
{

//Get new rotation
newZAngle = Mathf.Abs(wheelTransform.rotation.eulerAngles.z);

if (oldZAngle < newZAngle)
{
isIdle = false;
oldZAngle = newZAngle;
Debug.Log("Left");

//Do something

}
else if (oldZAngle > newZAngle)
{
isIdle = false;
oldZAngle = newZAngle;
Debug.Log("Right");

//Do something

}
else if (!isIdle)
{
isIdle = true;
oldZAngle = newZAngle;
Debug.Log("Idle");

//Do something

}


yield return null;
}
}

void stopWheelDIRCalculator()
{
continueWheelCalculation = false;
}

关于c# - 找到旋转的差异,作为随时间统一的平均值 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36964915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com