Saat ini saya sedang mengerjakan gerakan karakter saya di Unity3D . Saya berhasil membuatnya bergerak relatif ke kursor mouse. Saya menetapkan batas kemiringan 45 °, yang tidak memungkinkan karakter berjalan naik gunung dengan derajat yang lebih tinggi. Tapi dia masih bisa melompati mereka.
Bagaimana saya bisa membuatnya meluncur ke bawah lagi ketika dia melompat di tempat dengan kemiringan yang terlalu tinggi?
Terima kasih sebelumnya.
edit: Cuplikan kode gerakan dasar saya. menggunakan UnityEngine; menggunakan System.Collections;
public class BasicMovement : MonoBehaviour {
private float speed;
private float jumpSpeed;
private float gravity;
private float slopeLimit;
private Vector3 moveDirection = Vector3.zero;
void Start()
{
PlayerSettings settings = GetComponent<PlayerSettings>();
speed = settings.GetSpeed();
jumpSpeed = settings.GetJumpSpeed();
gravity = settings.GetGravity();
slopeLimit = settings.GetSlopeLimit();
}
void Update() {
CharacterController controller = GetComponent<CharacterController>();
controller.slopeLimit = slopeLimit;
if (controller.isGrounded) {
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
if (Input.GetButton("Jump")) {
moveDirection.y = jumpSpeed;
}
}
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
}
}
Jawaban:
Pengereman saat tanah dihantam adalah salah, Anda cukup menghentikan gerakan vertikal, tetapi itu hanya bagaimana tanah menghantam saat tanah itu rata.
Yang harus Anda lakukan adalah memproyeksikan
moveDirection
pada permukaan yang terkena, yang akan memberi Anda yang barumoveDirection
. Jika pustaka Anda memiliki fungsi untuk memproyeksikan vektor pada bidang atau permukaan, itulah yang harus Anda gunakan. Jika tidak, Anda harus mengurangimoveDirection
proyeksi pada permukaan normal darimoveDirection
dirinya sendiri.sumber
cukup periksa sebelum melompat jika karakter berdiri di tanah, maksud saya jika dia tidak berada di lereng miring. dan serahkan yang lainnya ke mesin fisika.
berdasarkan kode yang Anda berikan, saya bisa melihat di mana masalahnya:
menurut referensi skrip Unity ,
CharacterController.isGrounded
hanya kembali jika karakter menyentuh tanah. tidak memeriksa slopelimit. setelah sedikit mencari, FPSWalkerEnhanced tampaknya menjadi sesuatu yang memecahkan masalah Anda.sumber