我尝试在Unity 2D中按Space按钮时进行方块跳跃。我有以下代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Movement : MonoBehaviour
{
public float moveSpeed;
public float jumpSpeed;
float moveX;
Vector2 pos;
// Update is called once per frame
void Update()
{
MoveHorizontally();
Jump();
}
void MoveHorizontally(){
moveX = Input.GetAxis("Horizontal") * Time.deltaTime;
pos.x = moveX * moveSpeed;
transform.position = new Vector2(transform.position.x + pos.x,transform.position.y + pos.y);
}
void Jump(){
if (Input.GetKeyDown("space")){
GetComponent<Rigidbody2D>().AddForce(new Vector2(0,jumpSpeed * Time.deltaTime), ForceMode2D.Impulse);
Debug.Log("Jumped!");
}
}
}
当我按空格键时,“跳了!”消息出现,但我的方块没有跳。有什么想法吗?
谢谢你,谢谢你
我试过使用Input.GetKey函数。它可以工作,但是如果我一直按空格键,这个函数就会让我的方块一直向上。
2条答案
按热度按时间1bqhqjot1#
当你调用
AddForce()
方法时,你不必乘以“Time.deltaTime”。您可以执行以下操作:
首先缓存
Start()
方法中的“Rigidbody2D”组件,因为如果在每一帧都调用它,将影响游戏性能。第二,您应该调用
FixedUpdate()
方法,而不是Update()
方法,这是处理物理时推荐的方法第三,在
Jump()
方法中,正如我在上面所说的,不应该将跳跃力乘以Time.deltaTime
,而是执行以下操作:您可以根据需要调整
jumpForce
。另外,Vector2.up
是Vector2(0, 1)
的简写您可以在此处阅读更多有关Vector2的信息Vector2.up Unity's Documentation
vwkv1x7d2#
你需要给jumpforce赋值,当然也要给moveforce赋值。如果你不想重复跳跃,就给你的bool赋值,检查你是否在地面上。我用我的”private bool = isGrounded”。试试下面的代码。它使你的跳跃成为一个接触地面的函数。
这是我跳跃代码
当你跳的时候,它使你的布尔变量为假,当你接触地面的时候,它使你的布尔变量为真。确保“地面”必须和你的地面的标签完全一样。