gpt4 book ai didi

C# Unity - 确定哪个方法正在影响游戏对象

转载 作者:太空宇宙 更新时间:2023-11-03 23:03:54 25 4
gpt4 key购买 nike

我这里有这段代码:

public void Move(Transform from, Transform to, float overTime)
{
StartCoroutine(_Move(from, to, overTime));
}
IEnumerator _Move(Transform from, Transform to, float overTime)
{
Vector2 original = from.position;
float timer = 0.0f;
while (timer < overTime)
{
float step = Vector2.Distance(original, to.position) * (Time.deltaTime / overTime);
from.position = Vector2.MoveTowards(from.position, to.position, step);
timer += Time.deltaTime;
yield return null;
}
}

这很简单。它所做的只是随着时间的推移将 GameObject 移动到目的地。我打算将它用于 UI 动画目的。但是,当我想改变它的用途时,事情就变得有趣了。例如,我将鼠标悬停在一个开始移动的按钮上。当它仍在移动时,我可能会再次将鼠标悬停在它上面,在这种情况下我希望它重新启动,因此它会停止影响完全相同按钮的功能并重新启动另一个按钮。我只是不知道如何确定同一函数的哪个调用会影响我的给定组件。或者我应该将此脚本添加到每个对象以便它只影响那个对象吗?

最佳答案

这里有很多我会做不同的事情。一方面,如果您的 Ui 对象已经受到协程的影响,您不希望另一个协程也开始作用于它,只是新的协程。为避免这种情况,声明一个协程变量:

IEnumerator myCoRoutine

当你第一次将鼠标悬停在上面时,像这样启动协程:

myCoRoutine = _Move(from, to, overTime);
Start Coroutine(_Move());

但是,您想检查协程是否尚未运行,如果是则停止它,然后启动一个新协程,对吗?所以,这样做:

if(myCoRoutine !=null) StopCoroutine(mtCoRoutine);
myCoRoutine = _Move(from, to, overTime);
Start Coroutine(_Move());

您可能希望使用 OnPointerEnter 启动协程

关于C# Unity - 确定哪个方法正在影响游戏对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42043352/

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