所以我在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);
}
}
}
答案 0 :(得分: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输入设置中使用标准输入设置(编辑 - &gt;项目设置 - &gt;输入))
如果-1
,A
或left arrow
被按下,则输入.GetAxis(&#34;水平&#34;)将为left on a gamepad joystick
,如果1
D
,right arrow
或right on a gamepad joystick
已被按下。这是&#34;水平&#34;的默认设置。我想你可以猜到&#34;垂直&#34;确实。
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);
}
}
如果您有任何疑问或是否有帮助,请告诉我。
答案 1 :(得分:0)
我实现此功能的唯一方法是在时间管理器中将固定时间步长更改为0.0166。似乎物理引擎和更新与结果不同步。