Xin chào Tôi đang làm một game platformer đơn giản rất đơn giản cho các thiết bị Android. Tôi đang sử dụng hệ thống sự kiện của Unity cho phong trào người chơi. Vấn đề là khi tôi chạm vào nút lần đầu tiên có một độ trễ (nấc) sau đó mọi thứ đều ổn. Tôi đã mô tả trò chơi của mình có một sự tăng đột biến trong phương pháp Cập nhật sự kiện.
đây là mã đơn giản hóa
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent (typeof(Rigidbody2D)) ]
[RequireComponent (typeof(BoxCollider2D)) ]
public class PlayerController : MonoBehaviour {
public float movementSpeed = 5f;
public float jumpForce = 5f;
public float distanceToGround = 0.2f;
public LayerMask staticCollider;
public playerState state;
private Rigidbody2D rBody;
public Transform leftmost;
public Transform rightmost;
Collider2D[] platforms = new Collider2D[2];
public int hrInput = 0;
// Use this for initialization
void Start ( ) {
rBody = GetComponent<Rigidbody2D> ();
}
//FixedUpdate is framerate independent, and therefore completely unrelated to your framerate
void FixedUpdate ()
{
state.grounded = isGrounded ();
if (hrInput > 0) {
MOVE_RIGHT ();
}
else if (hrInput < 0) {
MOVE_LEFT ();
} else {
STOP_MOVE ();
}
}
public bool isGrounded(){
print ("ground");
if (Physics2D.OverlapAreaNonAlloc (leftmost.position, rightmost.position, platforms, staticCollider) > 0) {
return true;
} else
return false;
}
public void setHrInput (int h ) {
// print (h);
hrInput = h;
}
public void JUMP(){
if(state.grounded){
state.onAir = true;
// rBody.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
rBody.velocity = Vector2.up * jumpForce;
}
}
public void MOVE_LEFT(){
rBody.velocity = new Vector2 (-1 * movementSpeed * Time.deltaTime, rBody.velocity.y);
}
public void MOVE_RIGHT(){
rBody.velocity = new Vector2(1 * movementSpeed*Time.deltaTime, rBody.velocity.y);
}
public void STOP_MOVE(){
rBody.velocity = new Vector2(0,rBody.velocity.y);
}
} // end
Đây là hình ảnh hồ sơ.
Xin hãy giúp tôi khắc phục vấn đề này.