因此,我正在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输入设置(编辑->项目设置->输入)中使用标准输入设置)
Input.GetAxis(“水平”)将是-1
如果A
,left arrow
或left on a gamepad joystick
按下和1
如果D
,right arrow
或者right on a gamepad joystick
被按下。这是“水平”的默认设置,我想您可以猜到“垂直”的作用。
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);
}
}
让我知道您是否有疑问或是否有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句