You need to enable JavaScript to run this app.

Ana içeriğe geç

Unity3D Karakterimizi Nasıl Hareket Ettiririz Sorusunun Yanıtı Burada

Anket Başlığı: Faydalı oldu mu?

Bu ankette oy kullanma yetkiniz yok.
Evet teşekkürler. 0 (0%)
Eh işte kısmen. 0 (0%)
Hayır anlamadım. 0 (0%)
* Siz bu anket için oy kullanmışsınız. Katılımcı sayısı:: 0 (0%)

Unity3D Karakterimizi Nasıl Hareket Ettiririz Sorusunun Yanıtı Burada

Yönetici
Unity3D Karakterimizi Nasıl Hareket Ettiririz Sorusunun Yanıtı Burada
Merhabalar arkadaşlar.
Çoğu yerde sorular üzerine Unity3D'de nasıl Birinci Kişi Bakış Açısı(FPS) oyunlarında karakter hareketini nasıl kolayca yapacağımızı anlatacağım.

İşin içerisinde yalnızca karakter konumları değil aynı zamanda mouse hareket olaylarımız da var tabiki. Sabit bir yöne gidilmeyecek.
Bu yüzden toplamda 2 adet script ile bu işin içinden kolayca çıkacağız.

[Resim: 7pB3mK.png]
[Resim: r9EcRT.png]

Resimlerde gördüğünüz üzere KameraKontrol ve KarakterHareket adında 2 adet script oluşturdum. 1 adet Plane nesnesine Zemin adını verdim ve Layer'ini Zemin olarak ayarladım. First Person Player adında boş bir oyun nesnesi yaratıp içersinie MainCamera'mızı sürükledim. Ardından bir adet 3D Silindir objesini içerisine attım.
First Person Player adlı game objesinin componentine Character Controller ve Harakter Hareket scriptimi ekledim. Değerlerini resimde görmüş olduğunuz şekilde ayarlayabilirsiniz. Scriptin içeriğini aşağıda belirteceğim zaten.

[Resim: n3xD7A.png]

Bu resimde ise Main Camera objemize Kamera Kontrol adlı scriptimi sürükleyip Oyuncu adlı kısıma First Person Player adlı game objemizi sürüklüyoruz. Bu scriptimizin içeriğini de aşağıda vereceğim.

[Resim: UNMOs0.png]

Zemin Kontrolcu adında boş bir game objecti karakterimin içerisine sürükleyip pozisyonunu resimde gördüğünüz gibi silindir objemizin alt kısmına doğru yerleştirdim ki zemine ilk değecek olan objemiz bu. Yani karakterimizin zemine değip değmediğini kontrol etmemize yarayacak. Bu sayede zıplama işlemini de gerçekleştireceğiz.

[Resim: ZpNlZ3.png]

Karakter Hareket scriptimizde ise Kontrolcu kısmına hemen üst tarafında bulunan CharacterController componentini sürüklüyoruz ardından Zemin Kontrol kısmına karakterimizin içerisinde bulunan Zemin Kontrolcu game objesini sürüklüyoruz. Ve zemin maskesini Zemin olarak seçiyoruz.
Gelelim scriptlerimin içersindeki kod bloklarına;

Kamera Kontrol Scripti içerisine;

Kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class KameraKontrol : MonoBehaviour
{
    public float mouseHassasiyet = 100f;
    public Transform oyuncu;
    float xRotasyonu = 0f;
    private void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
    }
    private void Update()
    {
        float mouseX = Input.GetAxis("Mouse X") * mouseHassasiyet * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * mouseHassasiyet * Time.deltaTime;

        xRotasyonu -= mouseY;
        xRotasyonu = Mathf.Clamp(xRotasyonu, -60f, 60f);
        transform.localRotation = Quaternion.Euler(xRotasyonu, 0f, 0f);
        oyuncu.Rotate(Vector3.up * mouseX);

    }
}

Karakter Hareket Scriptimizin içerisine;

Kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class KarakerHareket : MonoBehaviour
{
    public CharacterController kontrolcu;
    public float hiz = 12f;
    public float yercekimi = -9.81f;
    public float ziplamaYuksekligi=3f;
    Vector3 surat;

    public Transform zeminKontrol;
    public float zeminMesafesi = 0.4f;
    public LayerMask zeminMaskesi;

    bool zemindeMi;
    void Update()
    {
        KarakterHareketEt();
    }

    void KarakterHareketEt()
    {
        // DeltaY = 1/2g x t*t
      
        zemindeMi = Physics.CheckSphere(zeminKontrol.position, zeminMesafesi, zeminMaskesi); //Karakterin alt kısmında ufak bir küre oluşturacak.
        //Eğer oluşan küre zemine değerse zemindeMi değişkeni true olacak değmediği zamanlar ise false kalacak.

        if(zemindeMi && surat.y < 0)
        {
            surat.y = -2f;
        }
        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");

        Vector3 hareket = transform.right*x+transform.forward*z;

        kontrolcu.Move(hareket*hiz*Time.deltaTime);

        if(Input.GetKeyDown(KeyCode.Space) && zemindeMi)
        {
            //v = Karakök içinde (h* -2*g)
            surat.y = Mathf.Sqrt(ziplamaYuksekligi * -2f * yercekimi);
        }
        surat.y += yercekimi * Time.deltaTime;
        kontrolcu.Move(surat*Time.deltaTime);
    }
}
Ve tabi ki son olarak bir açıklama daha yapmam gerekiyor. Eğer burada bulunan kod bloklarını eklemiş olmanıza rağmen hala karakter hareketini sağlayamıyor iseniz;

Edit > Project Setting > Input Manager kısmında bulunan input değerleriniz doğru biçimde olması gerekiyor.

[Resim: CROPNO.png]

Yapamadığınız, takıldığınız herhangi bir durum olur ise bir problemle karşılaşırsanız eğer iletişim kurabilir veya yorum olarak danışabilirsiniz. Gerekli yardımı elimden geldiğince sizlere sağlayacağım.

İçerik sağlayıcı paylaşım sitesi olarak hizmet veren Kodluk sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.K'nın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Sitemiz hakkında yapılacak tüm hukuksal şikayetleri bağlantısından bize ulaşıldıktan en geç 3 (üç) gün içerisinde ilgili kanunlar ve yönetmenlikler çerçevesinde tarafımızca incelenerek, gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.