Unity 3D ile Karakter Hareket ve Zıplama Kodları | Unity 3d Dersleri
Herkese selamlar. Bu içerikte sizlere Unity 3d ile bir karakteri ya da her hangi bir nesneyi nasıl hareket ettirebileceğinizden bahsedeceğim. Öncelikle bu uygulama temel düzeyde bir anlatımı kapsadığı için karakterimiz bir kapsülden ve platformumuzda küplerden oluşmaktadır. Aşağıdaki görseldeki gibi basit örnek bir platform ve karakter oluşturabilirsiniz. Karakterinize Rigidbody Component’ini(bileşenini) eklemeyi unutmayınız.
Platform ve karakterinizi oluşturduktan sonra aşağıdaki verdiğim kodları “oyuncu” adlı bir C# script dosyası oluşturarak oluşturduğunuz kapsüle ekleyin. (üzerine sürükleyip bırakın ya da Add Component kısmından script oluşturun.)
Daha sonra platform için kullanılan küplerin her birine de “platform” etiketi vermeyi unutmayın.
Ayrıca karakteri (kapsülü) hareket ettirirken Rigidbody Component’inden dolayı güç uygulanacağı için herhangi bir çarpışmadan dolayı sağa ve sola düşmemesi için aşağıdaki görseldeki ayarları yapınız. RigidBody Component > Constraints > Freeze Rotation > X,Y,Z üç ekseni de dondurunuz. Bu sayede sağa sola düşmeyecektir.
ÖRNEK KODLAR
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class oyuncuHareket : MonoBehaviour
{
//DEĞİŞKENLER
public GameObject oyuncu;
Rigidbody rb;
public float Hiz = 5.0f;
public float ziplamaGucu= 10.0f;
bool yerdeMi; //kontrolcu Değişken
void Start()
{
//Rigidbody Bileşenini tanımlama ve Değişkene Atama
rb = oyuncu.GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
//W-A-S-D ya Yön tuşlarına basılırsa yatay adlı değişkene eksene göre değer verir.
float yatay = Input.GetAxis("Horizontal") * Time.deltaTime * Hiz;
oyuncu.transform.Translate(new Vector3(yatay, 0, 0)); // Y eksenini değiştir.
if(Input.GetKeyDown(KeyCode.Space)) //Eğer Boşluk tuşuna basılırsa.
{
if (yerdeMi) //yerDemi değişkeni True ise içerisini gerçekleştir.
{
rb.AddForce(new Vector3(0, ziplamaGucu, 0), ForceMode.Impulse);
}
}
}
private void OnCollisionStay(Collision collision) //Eğer sürekli platforma değiyorsa
{
if(collision.gameObject.tag == "platform") //eğer platform etiketli nesneye değerse
{
yerdeMi = true; //yerDemi değişkeninin değerini true(doğru) yap.
}
}
private void OnCollisionExit(Collision collision) // Eğer platforma değme işlemi bittiyse.
{
if (collision.gameObject.tag == "platform") //platform etiketli nesnelere değmiyorsa
{
yerdeMi = false; //yerdeMi değişkeninin değerini false(yanlış) yap.
}
}
}