Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用协同程序(或任何其他方法)在单击时在屏幕上滑动精灵?_C#_Unity3d_2d_Game Development - Fatal编程技术网

C# 如何使用协同程序(或任何其他方法)在单击时在屏幕上滑动精灵?

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

我正在Unity中开发一个2D游戏,我遇到了一个问题。我试图在用户单击时将精灵从点a移动到点B。我有一个矢量3作为起点和目标

我能够在位置上获得所需的变化,但仅在一帧内。我想让精灵真正滑过去,但我一直无法做到。我尝试使用协同程序,但没有成功

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!");
    }
}