C# I';我想让我的2D统一角色跳跃
正如我所说的,我试图让我的角色在Unity中跳跃,但是当我击中空间时什么都没有发生,Unity没有抛出任何错误C# I';我想让我的2D统一角色跳跃,c#,unity3d,C#,Unity3d,正如我所说的,我试图让我的角色在Unity中跳跃,但是当我击中空间时什么都没有发生,Unity没有抛出任何错误 public class Player : MonoBehaviour { private Rigidbody2D myRigidbody; [SerializeField] public float jumpSpeed; private Animator myAnimator; [SerializeField] private f
public class Player : MonoBehaviour
{
private Rigidbody2D myRigidbody;
[SerializeField]
public float jumpSpeed;
private Animator myAnimator;
[SerializeField]
private float movementSpeed;
private bool facingLeft;
[SerializeField]
private Transform[] groundPoints;
[SerializeField]
private float groundRadius;
[SerializeField]
private LayerMask whatIsGround;
private bool isGrounded;
private bool jump;
[SerializeField]
private float jumpForce;
// Start is called before the first frame update
void Start()
{
facingLeft = true;
myRigidbody = GetComponent<Rigidbody2D>();
myAnimator = GetComponent<Animator>();
}
// Update is called once per frame
void FixedUpdate()
{
float horizontal = Input.GetAxis("Horizontal");
Debug.Log(horizontal);
isGrounded = IsGrounded();
HandleMovement(horizontal);
flip(horizontal);
}
private void HandleMovement(float horizontal)
{
myRigidbody.velocity = new Vector2(horizontal * movementSpeed, myRigidbody.velocity.y);
myAnimator.SetFloat("speed", Mathf.Abs(horizontal));
if (isGrounded && jump)
{
isGrounded = false;
myRigidbody. AddForce(new Vector2(0, jumpForce));
}
}
private void HandleInput()
{
if (Input.GetKeyDown(KeyCode.Space))
{
jump = true;
}
}
private void flip(float horizontal)
{
if (horizontal < 0 && !facingLeft || horizontal > 0 && facingLeft)
{
facingLeft = !facingLeft;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
}
private bool IsGrounded()
{
if (myRigidbody.velocity.y <= 0)
{
foreach (Transform point in groundPoints)
{
Collider2D[] colliders = Physics2D.OverlapCircleAll(point.position, groundRadius, whatIsGround);
for (int i = 0; i < colliders.Length; i++)
{
if (colliders[i].gameObject != gameObject)
{
return true;
}
}
}
}
return false;
}
}
公共类玩家:单行为
{
私人刚体;
[序列化字段]
公众浮标跳跃速度;
私人动画师;
[序列化字段]
私人浮动移动速度;
私人楼宇设施;
[序列化字段]
私有转换[]基点;
[序列化字段]
私人浮动地面半径;
[序列化字段]
私人甲板码头;
私人学校停课;
私人跳远;
[序列化字段]
私人部队;
//在第一帧更新之前调用Start
void Start()
{
facingLeft=真;
myRigidbody=GetComponent();
myAnimator=GetComponent教程,他的是跳跃式的,但我的不是。我认为这可能与我设置基点的方式有关,但我不确定这是代码中的错误还是统一性的错误。你没有在任何地方调用HandleInput
添加到固定更新
void FixedUpdate()
{
float horizontal = Input.GetAxis("Horizontal");
Debug.Log(horizontal);
isGrounded = IsGrounded();
HandleMovement(horizontal);
flip(horizontal);
HandleInput(); // add this so you are sampling input
}
你没有在任何地方打电话给HandleInput
添加到固定更新
void FixedUpdate()
{
float horizontal = Input.GetAxis("Horizontal");
Debug.Log(horizontal);
isGrounded = IsGrounded();
HandleMovement(horizontal);
flip(horizontal);
HandleInput(); // add this so you are sampling input
}
出于某种原因,第一行代码没有出现在代码框中,它应该在那里。脚本是否附加到游戏对象并在序列化字段中填充值??为什么是固定更新而不是常规更新??为什么您认为错误来自于设置的基点?您是如何配置它们的?“为什么是固定更新而不是常规更新?”,这样游戏的速度就不会因你的fps而改变。“为什么你认为错误来自于设置的基点?你是如何配置它们的?”?"主要是因为这是我第一次这样做,我想我可能搞错了,我在这个角色上有三个基点,一个在左下角,一个在右下角,一个在这两个中间。由于某种原因,第一行代码没有出现在代码框中,它应该在那里。是脚本吗?附加到游戏对象和序列化字段中填充的值??为什么固定更新而不是定期更新??为什么您认为错误来自于设置的基点?您如何配置它们?“为什么固定更新而不是定期更新?”,这样游戏的速度就不会因fps而改变。“为什么您认为错误来自于接地点设置?您是如何配置它们的?”?"主要是因为这是我第一次这样做,我想我可能搞错了,我有三个基点上的字符,一个在左下角,一个在右下角,一个在中间的那两个。对不起,最近的答复,我把这个添加到代码,没有什么变化。代码,没有改变。