我有一个游戏,角色只能水平和垂直移动,不能斜向移动。
我已经尝试用以下代码来实现这一点,它应该检查播放器是否按下/上或左/右:
if (Input.GetKey("down"))
{
moveHor = false;
moveVer = true;
if(moveVer == true)
{
transform.Translate(Vector3.down * Time.deltaTime * speed);
}
}
if (Input.GetKey("up"))
{
moveHor = false;
moveVer = true;
if (moveVer == true)
{
transform.Translate(Vector3.up * Time.deltaTime * speed);
}
}
if (Input.GetKey("right"))
{
moveVer = false;
moveHor = true;
if(moveHor == true)
{
transform.Translate(Vector3.right * Time.deltaTime * speed);
}
}
if (Input.GetKey("left"))
{
moveVer = false;
moveHor = true;
if (moveHor == true)
{
transform.Translate(Vector3.left * Time.deltaTime * speed);
}
}
此代码在Update()方法中运行。
问题是,它不工作,我不知道为什么。
我希望有人知道该怎么做。
3条答案
按热度按时间6tr1vspr1#
尝试使用else-if在每个更新周期中只向一个方向转换。我还从代码中删除了嵌套的if语句,这些语句是多余的和不需要的。
ki1q1bka2#
在这种情况下,你可以读取所有的键,并让它们相互归零。这意味着当两个键被按下时(eidogg. left和right),角色将停止水平移动。
我们还考虑了处理的顺序,所以我们没有执行不必要的计算。我们通过尽可能晚地执行Vector 2/3计算来做到这一点,因为这些结构体通常有2或3个部分。
剩下的就是:
2hh7jdfx3#
您可以通过使用和配置2D轴而不是按钮来简化很多事情