[英]Unity 2d Movement script issue
所以我在 Unity 中制作了一个 2d 平台游戏(对于 c# 和 Unity 来说仍然是新的),我正在尝试为一个简单的正方形制作一个移动脚本,正方形会随机停止移动,我会有跳起来再次开始移动,只是为了它再次发生。
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed;
public float jumpHeight;
void Start()
{
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
GetComponent<Rigidbody2D>().velocity = new Vector2(GetComponent<Rigidbody2D>().velocity.x, jumpHeight);
}
if (Input.GetKey(KeyCode.D))
{
GetComponent<Rigidbody2D>().velocity = new Vector2(moveSpeed, 0);
}
if (Input.GetKey(KeyCode.A))
{
GetComponent<Rigidbody2D>().velocity = new Vector2(-moveSpeed, 0);
}
}
}
如果您已向我们提供了正在使用的实际代码,则@Bejasc的注释中可能给出了正确的答案。 在清洁度,最佳实践和某些功能方面,您并不需要以下提示来改进代码:
new Vector2
的y参数) 结果代码:
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed;
public float jumpHeight;
Rigidbody2D rb;
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rb.velocity = new Vector2(rb.velocity.x, jumpHeight);
}
if (Input.GetKey(KeyCode.D))
{
rb.velocity = new Vector2(moveSpeed, rb.velocity.y);
}
if (Input.GetKey(KeyCode.A))
{
rb.velocity = new Vector2(-moveSpeed, rb.velocity.y);
}
}
}
对于这个简单的运动脚本,您还可以通过执行以下操作来简化运动代码:
(前提是您在Unitys输入设置(编辑->项目设置->输入)中使用标准输入设置)
如果按下A
, left on a gamepad joystick
left arrow
或left on a gamepad joystick
则Input.GetAxis(“ Horizontal”)将为-1
如果按下D
, right on a gamepad joystick
right arrow
或right on a gamepad joystick
则Input.GetAxis(“ Horizontal”)将为1
。 这是“水平”的默认设置,我想您可以猜到“垂直”的作用。
void Update() {
float moveDir = Input.GetAxis("Horizontal") * moveSpeed;
rb.velocity = new Vector2(moveDir, rb.velocity.y);
// Your jump code:
if (Input.GetKeyDown(KeyCode.Space))
{
rb.velocity = new Vector2(rb.velocity.x, jumpHeight);
}
}
让我知道您是否有疑问或是否有帮助。
我要使它起作用的唯一方法是在时间管理器中将固定的时间步更改为0.0166。 似乎物理引擎和更新与结果不同步,结结巴巴。
我为二维运动制作了一个基本脚本。 随意做笔记或复制和粘贴。
void Update()
{
// check for the a key to be pressed
if (Input.GetKey(KeyCode.A))
{
// add velocity to the player
rb.velocity += (Vector2.left * (speed * Time.deltaTime));
}
// check for the d key to be pressed
if (Input.GetKey(KeyCode.D))
{
// add velocity to the player
rb.velocity += (Vector2.right * (speed * Time.deltaTime));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.