【发布时间】:2018-11-14 18:08:18
【问题描述】:
所以基本上我试图让玩家移动系统类似于 RPG Maker 中的一个具有 8 个方向的移动系统。不知何故,我成功了,但只是部分成功。当我试图突然改变前任的方向时。从上到左,角色口吃,不想在不先释放所有键的情况下移动。
重力比例被禁用或更像设置为0,身体类型是动态的。
这是一个代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveChar : MonoBehaviour {
Rigidbody2D rigid;
public float Speed;
// Use this for initialization
void Start () {
rigid = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update () {
// float horiz = Input.GetAxis("Horizontal");
// float vert = Input.GetAxis("Vertical");
if(Input.GetKeyDown(KeyCode.W)) //________________________________________MOVING UP
{
rigid.velocity = new Vector2(rigid.velocity.x, 1 * Speed);
}
else if(Input.GetKeyUp(KeyCode.W))
{
rigid.velocity = new Vector2(0, 0);
}
if (Input.GetKeyDown(KeyCode.S)) //_______________________________________MOVING DOWN
{
rigid.velocity = new Vector2(rigid.velocity.x, -1 * Speed);
}
else if (Input.GetKeyUp(KeyCode.S))
{
rigid.velocity = new Vector2(0, 0);
}
if (Input.GetKeyDown(KeyCode.A)) //_______________________________________MOVING LEFT
{
rigid.velocity = new Vector2(-1 * Speed, rigid.velocity.y);
}
else if (Input.GetKeyUp(KeyCode.A))
{
rigid.velocity = new Vector2(0, 0);
}
if (Input.GetKeyDown(KeyCode.D)) //_______________________________________MOVING RIGHT
{
rigid.velocity = new Vector2(1 * Speed, rigid.velocity.y);
}
else if (Input.GetKeyUp(KeyCode.D))
{
rigid.velocity = new Vector2(0, 0);
}
}
【问题讨论】:
-
您需要在每次抬起键时停止将速度设置为零。在这种情况下,您只想修改向量的一个分量,并且您还需要考虑键的状态以朝相反的方向移动。另外,您不使用
Input.GetAxis有什么原因吗?它做了很多你在这里尝试做的事情。 -
正如 Ruzihm 所说,我首先要尝试的不是设置
(0,0),而是仅更改x或y在另一种情况下您更改的相应的如果。 -
没有理由不使用 Axis,我根本不知道要使用它。我之前尝试过使用它,但我无法将它实现为负值(即使我尝试在它前面加上'-',由于某些原因它也不起作用)。当我不将值设置为0时,抬起键后为0,角色将按照设定的方向飞行,我不知道有什么其他方法可以阻止它。
-
@lubeszz 我编辑了我的答案,如果必须的话,包括如何使用
Input.GetKeyUp/GetKeyDown。