Bagaimana cara membuat karakter saya meluncur ke bawah lereng bersudut tinggi?

9

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);
    }
}
keinabel
sumber
Perlu informasi lebih lanjut: apakah Anda menggunakan fisika? Apakah lereng ini menggunakan sistem medan atau yang lain? Komponen atau komponen apa yang mengendalikan karakter Anda? Apakah ini game 2D atau 3D?
Kylotan
Apakah maksud Anda geser ketika pemain mencoba untuk melompat, atau ketika dia menyelesaikan lompatan dan mengenai lereng?
tyjkenn
@tyjkenn Maksudku saat dia menyelesaikan lompatan. Seperti di Super Mario 64. Ketika dia mendarat di tanah, dan tanah ini terlalu tinggi, dia harus meluncur ke titik di mana sudutnya sama dengan slopeLimit.
keinabel
@Kylotan yah, saya cukup pemula di Unity. Jadi, saya mencoba memberikan jawaban sebaik yang saya bisa. Saya membuat karakter dengan pengontrol karakter - tidak ada tubuh yang kaku. Saya membuatnya bergerak ketika tombol ditekan dan saya membuatnya berjalan relatif ke kursor. Saya membuat medan dan menggunakan tombol (ya ampun, ini terdengar bodoh) untuk membuat beberapa gunung. Ini akan menjadi game 3D dengan penampilan dan gaya kamera seperti WarCraft III.
keinabel

Jawaban:

1

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 moveDirectionpada permukaan yang terkena, yang akan memberi Anda yang baru moveDirection. Jika pustaka Anda memiliki fungsi untuk memproyeksikan vektor pada bidang atau permukaan, itulah yang harus Anda gunakan. Jika tidak, Anda harus mengurangi moveDirectionproyeksi pada permukaan normal dari moveDirectiondirinya sendiri.

aaaaaaaaaaaa
sumber
ada permainan yang menggunakan perilaku yang sama, misalnya. skyrim, gunakan metode yang persis sama untuk pengereman. masalahnya adalah karakter dapat melompat bahkan jika tidak di tanah bendera.
Ali1S232
0

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.isGroundedhanya kembali jika karakter menyentuh tanah. tidak memeriksa slopelimit. setelah sedikit mencari, FPSWalkerEnhanced tampaknya menjadi sesuatu yang memecahkan masalah Anda.

Ali1S232
sumber
Yah, saya memang memeriksa apakah karakternya membumi sebelum setiap gerakan.
keinabel
@keinabel maka dia seharusnya tidak bisa melompat. satu-satunya cara dia bisa naik ke atas lereng dengan menggunakan lompatan adalah jika dia bisa melompat bahkan jika dia tidak di tanah yang kokoh. Maksud saya, sama seperti Anda memeriksa apakah dia tidak bisa menaiki lereng. jika dia tidak bisa berjalan setidaknya satu arah karena kemiringan dia tidak akan bisa melompat sama sekali.
Ali1S232
apakah itu akan membantu, jika saya menambahkan 'kode gerakan' ke posting saya?
keinabel
Saya kira bisa langsung menunjukkan masalah.
Ali1S232