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# Unity玩家移动不工作_C#_Unity3d - Fatal编程技术网

C# Unity玩家移动不工作

C# Unity玩家移动不工作,c#,unity3d,C#,Unity3d,我有一个脚本来移动我的角色(玩家) 脚本应该是良好的,它没有任何错误,虽然当我按下播放我试图使用箭头,它不工作,我不知道为什么 这是代码。谢谢你能给我的任何帮助 using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMovement : MonoBehaviour { Direction currentDir; Vector2 input; bool

我有一个脚本来移动我的角色(玩家) 脚本应该是良好的,它没有任何错误,虽然当我按下播放我试图使用箭头,它不工作,我不知道为什么

这是代码。谢谢你能给我的任何帮助

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{

Direction currentDir;
Vector2 input;
bool isMoving = false;
Vector3 startPos;
Vector3 endPos;
float t;

public float walkSpeed = 3f;

// Update is called once per frame
void Update()
{

    if (isMoving)
    {
        input = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
        if (Mathf.Abs(input.x) > input.y)
            input.y = 0;
        else
            input.x = 0;

        if (input != Vector2.zero)
        {
            StartCoroutine(Move(transform));
        }
    }

}

public IEnumerator Move(Transform entity)
{

    isMoving = true;
    startPos = entity.position;
    t = 0;

    endPos = new Vector3(startPos.x + System.Math.Sign(input.x), startPos.y +
        System.Math.Sign(input.y), startPos.z);

    while (t < 1f)
    {
        t += Time.deltaTime * walkSpeed;
        entity.position = Vector3.Lerp(startPos, endPos, t);
        yield return null;
    }

    isMoving = false;
    yield return 0;

}


enum Direction
{
    North,
    East,
    South,
    West
}
    }
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类玩家运动:单一行为
{
方向电流方向;
矢量2输入;
bool isMoving=false;
Vector3 startPos;
向量3末端位置;
浮动t;
公共浮子行走速度=3f;
//每帧调用一次更新
无效更新()
{
如果(正在移动)
{
输入=新矢量2(input.GetAxis(“水平”),input.GetAxis(“垂直”);
if(Mathf.Abs(input.x)>input.y)
输入y=0;
其他的
输入x=0;
如果(输入!=Vector2.zero)
{
开始例行程序(移动(变换));
}
}
}
公共IEnumerator移动(转换实体)
{
isMoving=真;
startPos=实体.position;
t=0;
endPos=newvector3(startPos.x+System.Math.Sign(input.x),startPos.y+
System.Math.Sign(input.y),startPos.z);
而(t<1f)
{
t+=时间增量*行走速度;
entity.position=Vector3.Lerp(startPos,endPos,t);
收益返回空;
}
isMoving=假;
收益率为0;
}
枚举方向
{
北,
东方,,
南方
西部
}
}
更改

void Update()
{
    if (isMoving)
    {

否则,在每次更新时检查isMoving变量,如果为false,则不执行任何操作。iMoving唯一可以实现的地方是您的移动协同程序,但它只能从更新启动,因为iMoving是假的,所以更新不起任何作用

变化

void Update()
{
    if (isMoving)
    {


否则,在每次更新时检查isMoving变量,如果为false,则不执行任何操作。iMoving唯一可以实现的地方是您的移动协同程序,但它只能从更新启动,因为iMoving是假的,所以更新不起任何作用

这是非常错误的。在更新功能中重复启动
Move
coroutine。。。。。你在尝试像FPS游戏一样移动?我在尝试让它像2D游戏一样移动。为了便于讨论,让我们像口袋妖怪一样说:)好的,我明白了。如果是这样的话,这可能没问题。如何确定停止移动/目标位置?我想你应该解释一下球员什么时候开始移动?也许当鼠标被点击的时候?我对Unity是相当陌生的,所以我不知道我是否能够详细解释一切。基本上,我在网上遵循了一个例子。在这个例子中,解释者能够用箭头移动它,因为我听到了咔哒声。。。。所以,我不知道他做了什么,因为他没有分配任何特定的键。还是我遗漏了什么,应该有用?老实说,我真的很困惑。试着使用而不是Input.GetAxis(“水平”),并且作为对您的建议,通过尝试自己的代码和每次遇到问题时访问dochumantation来学习unity。在我看来,从教程中复制代码是没有帮助的,这是非常错误的。在更新功能中重复启动
Move
coroutine。。。。。你在尝试像FPS游戏一样移动?我在尝试让它像2D游戏一样移动。为了便于讨论,让我们像口袋妖怪一样说:)好的,我明白了。如果是这样的话,这可能没问题。如何确定停止移动/目标位置?我想你应该解释一下球员什么时候开始移动?也许当鼠标被点击的时候?我对Unity是相当陌生的,所以我不知道我是否能够详细解释一切。基本上,我在网上遵循了一个例子。在这个例子中,解释者能够用箭头移动它,因为我听到了咔哒声。。。。所以,我不知道他做了什么,因为他没有分配任何特定的键。还是我遗漏了什么,应该有用?老实说,我真的很困惑。试着使用而不是Input.GetAxis(“水平”),并且作为对您的建议,通过尝试自己的代码和每次遇到问题时访问dochumantation来学习unity。在我看来,从教程中复制代码是没有帮助的,这实际上是有意义的。我只面临一个问题:如果我按下箭头移动它,它就会消失。哦,有什么想法吗?谢谢,这确实是有道理的。我只面临一个问题:如果我按下箭头移动它,它就会消失。你有什么想法吗?