为了账号安全,请及时绑定邮箱和手机立即绑定

Unity 防止点击 1s

Unity 防止点击 1s

C#
繁华开满天机 2023-07-09 09:43:51
我有一个 Unity Slidepuzzle 游戏(4x4),我检查开放区域要移动到哪里。我尝试使用 MoveTowards 制作幻灯片动画,效果很好,但现在我遇到的问题是,当我单击开放空间旁边的两块(快速)时,两者都会移入其中,因为该块不完全在那里,因此光线无法移动打任何东西。PS:它可以在没有动画的情况下工作,但我只是不希望这些碎片只是传送。我想要一个平滑的幻灯片。我尝试用布尔值解决它,这样当我单击它时,移动设置为 true,当动画完成时再次设置为 false,但这不起作用。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。
查看完整描述

1 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

你说你用布尔值尝试过,但没有成功。我认为如果做得正确,它应该有效。

在 MovePuzzle() 的第一行中写入:

if (moved)
{
    return;
}

然后,在 while 块之后(因此在其外部),写入:

moved = false;

那么您可能应该将其重命名为 isMoving 。


查看完整回答
反对 回复 2023-07-09
  • 1 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信