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。在我看来,从教程中复制代码是没有帮助的,这实际上是有意义的。我只面临一个问题:如果我按下箭头移动它,它就会消失。哦,有什么想法吗?谢谢,这确实是有道理的。我只面临一个问题:如果我按下箭头移动它,它就会消失。你有什么想法吗?