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

标签 c# function unity3d function-call

我这里有这段代码:

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/

相关文章:

c# - CaSTLe Windsor注入(inject)特定组件

c# - usercontrol 中的所有控件都为 null

javascript - 使用 Javascript 原型(prototype)继承将数据存储在数组中

php - 从函数返回 "error"的最佳实践

android - 我如何编写我的游戏以适用于 Android 设备的各种分辨率? (与团结)

c# - 正在尝试将 .png 文件上传到 Web 目录

c# - LINQ to XML 中没有结果

c# - 为什么 OrderBy 总是返回零到顶部?

php - 在函数 PHP 中实例化类是不好的做法吗

c# - 在 Unity Animator 中使用 "Any State"的问题