C# 如何使用协同程序(或任何其他方法)在单击时在屏幕上滑动精灵?
我正在Unity中开发一个2D游戏,我遇到了一个问题。我试图在用户单击时将精灵从点a移动到点B。我有一个矢量3作为起点和目标 我能够在位置上获得所需的变化,但仅在一帧内。我想让精灵真正滑过去,但我一直无法做到。我尝试使用协同程序,但没有成功C# 如何使用协同程序(或任何其他方法)在单击时在屏幕上滑动精灵?,c#,unity3d,2d,game-development,C#,Unity3d,2d,Game Development,我正在Unity中开发一个2D游戏,我遇到了一个问题。我试图在用户单击时将精灵从点a移动到点B。我有一个矢量3作为起点和目标 我能够在位置上获得所需的变化,但仅在一帧内。我想让精灵真正滑过去,但我一直无法做到。我尝试使用协同程序,但没有成功 IEnumerator CubeSlider(Vector3 start, Vector3 target) { while(start.x != target.x) { start.x += 0
IEnumerator CubeSlider(Vector3 start, Vector3 target)
{
while(start.x != target.x)
{
start.x += 0.1f;
yield return null;
}
}
我只考虑x,因为y轴上没有运动。我还尝试使用:
start=Vector3.移向(此处的参数)
但没有成功
我在脚本的“onMouseDown()”函数中启动并调用了这个协同程序,如下所示:
StartCoroutine(CubeSlider(square1.transform.position, p3));
我希望当用户点击时,精灵会从起点平稳地移动到目标。我没有收到任何编译器错误,它根本没有移动。您的第一种方法不正确。您只是将另一个浮点值添加到该浮点值。相反,您需要使用Vector2或Vector3。你可以使用你的方法,这不会有任何错误,但不会影响你的游戏对象。如果你想像那样移动一个对象,你需要在循环中使用Vector2或Vector3。此外,您还需要一个helper方法,因为这两个向量之间的值永远不会完全相等。下面是第一种方法的一个示例
start.position += new Vector3(2f, 0f, 0f) * Time.deltaTime;
因为我看到您正在向协同程序传递参数,所以如果您想要移动没有附加此脚本的游戏对象,请传递其转换组件。当然,因为这是一个示例,所以我将所有内容都放在一个脚本中。下面是一个例子
如果您感兴趣,您可能还想看看我关于这个主题的其他答案。也许它不会移动,因为您从未将开始应用于转换?@BugFinder抱歉,我是新手,将开始应用于转换是什么意思?您从转换位置复制了一份值,但你从未将它们应用到对象上
public class Example : MonoBehaviour
{
public Vector3 myTarget;
public Transform myStart;
void Start()
{
StartCoroutine(CubeSlider(myStart, myTarget));
}
IEnumerator CubeSlider(Transform start, Vector3 target)
{
while (start.position.x != target.x)
{
start.position = Vector3.MoveTowards(start.position, target, 2f * Time.deltaTime);
yield return null;
}
Debug.Log("I reached my target. Done!");
}
}