Karakterinin yüksek açılı yamaçlardan aşağı kaymasını nasıl sağlarım?


9

Şu anda karakterimin Unity3D'deki hareketi üzerinde çalışıyorum . Fare imlecine nispeten hareket etmesini sağladım. Karakterin daha yüksek derecelerde dağlara çıkmasına izin vermeyen 45 ° 'lik bir eğim sınırı belirledim. Ama yine de onları yukarı atlayabilir.

Çok eğimli yerlerde atladığında onu tekrar aşağı kaydırmayı nasıl başarabilirim?

Şimdiden teşekkürler.

edit: Kod snippet benim temel hareket. UnityEngine kullanarak; System.Collections kullanarak;

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);
    }
}

Daha fazla bilgiye mi ihtiyacınız var: fiziği mi kullanıyorsunuz? Bu eğimler arazi sistemini veya başka bir şeyi kullanıyor mu? Karakterinizi hangi bileşen veya bileşenler kontrol ediyor? Bu bir 2D veya 3D oyun mu?
Kylotan

Yani oyuncu zıplamaya çalıştığında ya da bir zıplamayı tamamlayıp eğime çarptığında slayt mı demek istediniz?
tyjkenn

@tyjkenn Yani atlamayı tamamladığında. Super Mario 64'teki gibi. Yere indiğinde ve bu zemin çok açılı olduğunda, açının eğime eşit olduğu bir noktaya inmelidir.
Mart'ta keinabel

@Kylotan iyi, ben Unity'ye oldukça yeni başladım. Bu yüzden olabildiğince iyi bir cevap vermeye çalışıyorum. Karakter denetleyicisiyle bir karakter yarattım - sert bir gövde yok. Bir tuşa basıldığında onu hareket ettirdim ve imlecin göreceli olarak yürümesini sağladım. Bir arazi yarattım ve bazı dağlar oluşturmak için düğmeyi kullandım (ah, bu aptalca geliyor). Bu WarCraft III gibi görünüm ve kamera tarzı ile bir 3D oyun olacak.
Mart'ta keinabel

Yanıtlar:


1

Zemin vurulduğunda frenlemeniz yanlış, sadece dikey hareketi durdurursunuz, ancak zemin düz olduğunda sadece zemin vuruşu böyle çalışır.

Yapmanız gereken moveDirection, vurulmuş olan yüzeye yansıtmaktır , bu size yeniyi verecektir moveDirection. Kütüphanenizde, bir vektörü düzlemde veya yüzeyde kullanmanız gereken şey olarak yansıtma işlevi varsa Değilse moveDirection, yüzeydeki normal izdüşümünü moveDirectionkendisinden çıkarmalısınız .


aynı davranışı kullanan oyunlar vardır, örneğin. skyrim, frenleme için tamamen aynı yöntemi kullanın. Sorun karakteridir olabilir bir bayrak yere olmasa bile atlamak.
Ali1S232

0

karakterin bir zeminde durup durmadığını atlamadan önce kontrol et, yani yüksek açılı bir eğimde değilse. ve fizik motoruna başka bir şey bırakmayın.

Sağladığınız koda göre sorunun nerede olduğunu görebilirsiniz:

uygun Birlik komut referans , CharacterController.isGroundedkarakter yere temas ediyorsa, yalnızca dönüyor. slopelimit olup olmadığını kontrol etmez. Biraz arama yaptıktan sonra FPSWalkerEnhanced , sorununuzu çözen bir şey gibi görünüyor.


Eh, do karakter her hareketini önce topraklı olup olmadığını kontrol edin.
Mart'ta keinabel

@keinabel o zaman zıplayamamalı. zıplamayı kullanarak yamaçlarda yukarı çıkabilmesinin tek yolu sağlam zeminde olmasa bile zıplayabilmesidir. Yani yamaçlarda yürüyüp yürüyemeyeceğini kontrol ettiğiniz gibi. eğer eğimden dolayı en az bir yönde yürüyemiyorsa hiç zıplayamamalı.
Ali1S232

'hareket kodumu' yazıma eklersem yardımcı olur mu?
Mart'ta keinabel

Sanırım doğrudan soruna işaret edebilir.
Ali1S232
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.