c# - Unity防止点击1s

标签 c#

我有一个 Unity Slidepuzzle-game(4x4),我检查空地要移动到哪里。我尝试使用 MoveTowards 制作幻灯片动画并且有效但现在我遇到了问题,当我单击开放空间旁边的两个部分(快速)时,两个部分都会移动到其中,因为该部分没有完全存在所以光线不能打任何东西。 P.S:它在没有动画的情况下也能工作,但我只是不想让这些碎片直接传送。我想要一个平滑的幻灯片。

我试着用一个 bool 值来解决它,这样当我点击它时移动设置为真,当动画结束时再次设置为假,但那没有用。

void MovePuzzle()
    {
        float duration = 0.5f;

        if(go_left)
        {
            Vector3 endPos1 = new Vector3(transform.position.x - move_amount.x, transform.position.y, transform.position.z);
            StartCoroutine(MoveTowards(endPos1, duration));
            go_left = false;
            moved = true;
        }
        if (go_right)
        {
            Vector3 endPos2 = new Vector3(transform.position.x + move_amount.x, transform.position.y, transform.position.z);
            StartCoroutine(MoveTowards(endPos2, duration));
            go_right = false;
            moved = true;
        }
        if (go_up)
        {
            Vector3 endPos3 = new Vector3(transform.position.x, transform.position.y + move_amount.y, transform.position.z);
            StartCoroutine(MoveTowards(endPos3, duration));
            go_up = false;
            moved = true;
        }
        if (go_down)
        {
            Vector3 endPos4 = new Vector3(transform.position.x, transform.position.y - move_amount.y, transform.position.z);
            StartCoroutine(MoveTowards(endPos4, duration)); 
            go_down = false;
            moved = true;
        }
    }

    IEnumerator MoveTowards(Vector3 toPosition, float duration)
    {
        float counter = 0;

        while (counter < duration)
        {
            counter += Time.deltaTime;
            Vector3 currentPos = transform.position;

            float time = Vector3.Distance(currentPos, toPosition) / (duration - counter) * Time.deltaTime;

            transform.position = Vector3.MoveTowards(currentPos, toPosition, time);

            Debug.Log(counter + " / " + duration);
            yield return null;
        }
    }

在幻灯片动画完成之前是否有限制点击的方法? 我是 Unity 的新手,所以不要期望从我这里学到很多知识 :D。

最佳答案

你说你用 bool 值试过了,但没有成功。我认为如果操作正确,它应该可以工作。

在MovePuzzle()的第一行,写:

if (moved)
{
    return;
}

然后,在 while block 之后(在它的外面),写:

moved = false;

然后您可能应该将其重命名为 isMoving。

关于c# - Unity防止点击1s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57132008/

相关文章:

c# - 有什么方法可以优化这个 LINQ to Entities 查询吗?

c# - 异步/等待 : Unexpected behaviour of ConfigureAwait

c# - FitNesse 中的异常处理

c# - 如何在页面最底部注册ClientScript

c# - 如何实现可取消事件?

c# - 更改 DropDownlist 时没有为一个或多个必需参数指定值

c# - 如何在 C# 中合并和更新列表的节点

C# .Net 3.5 使用 LINQ 替换文件扩展名的代码

c# - 如何在 C# 中调用 Sharepoint Taxonomy

c# - 格式错误的 JSONP 响应