gpt4 book ai didi

c# - Unity 2d 运动脚本问题

转载 作者:太空宇宙 更新时间:2023-11-03 15:00:29 25 4
gpt4 key购买 nike

所以我在 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 的评论可能会给出正确答案。以下是一些您没有要求的提示,可在清洁度、最佳实践和某些功能方面改进您的代码:

  1. 不要在每次要读取值时都使用 GetComponent<>()。创建游戏对象时将其保存在变量中! (检查下面代码中的 Start() 方法)
  2. 如果玩家正在移动,则将 Y 速度设置为 0,如果你想同时跳跃和移动,这将不起作用,如果你跳跃(将 Y 速度设置为 jumpHeight)然后移动(设置 Y 速度到 0)你的角色将漂浮在半空中,因为我们每帧都将 Y 速度设置为 0。改为将其设置为当前的 Y 速度! (移动时检查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);
}
}
}

对于这个简单的移动脚本,您还可以通过以下方式大量简化移动代码:

(假设您在 Unity 输入设置中使用标准输入设置(编辑 -> 项目设置 -> 输入))

Input.GetAxis("Horizo​​ntal") 将是 -1 如果 Aleft arrow or left on a gamepad joystick 被按下并且 1 如果 D向右箭头游戏 handle 操纵杆上的右侧 被按下。这是“Horizo​​ntal”的默认设置,我想你可以猜到“Vertical”的作用。

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);
}
}

如果您有任何疑问或这是否有帮助,请告诉我。

关于c# - Unity 2d 运动脚本问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46436893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com