Unity script düzgün çalışmıyor

shambles06

Femtopat
Katılım
15 Temmuz 2023
Mesajlar
8
Daha fazla  
Cinsiyet
Erkek
Dün Unity'e merak sarıp oyun yapmayı denedim, biraz araştırma yaptıktan sonra karakterime yürümesini koşmasını ve durmasını sağlayan bir script ekledim, scripti video izleyerek kendim yazdım. Gameplay kısmına geçtiğimde yürüme koşma animasyonları sorunsuz çalışıyor fakat karakter ilerlemiyor, olduğu yerde yürüyor sadece, karakterime Rigidbody'i ekledim. Animasyon kısmını resim olarak aktardım.
Script kodları;

C#:
Public class ybotkontrol: Monobehaviour.

{

 Animator ybotanim;

 Float maxspeed;

 Float axisz;

 Camera maincam;

 Void Start()

 {

 Ybotanim = GetComponent<Animator>();

 Maincam = camera. Main;

 }



 // Update is called once per frame.

 Void Update()

 {

 İf (ınput. Getkey(keycode. W))

 {



 Maxspeed = 0.3F;

 Axisz = maxspeed * ınput. Getaxis("vertical");



 İf (ınput. Getkey(keycode. Leftshift) && ınput. Getkey(keycode. W))

 {

 Maxspeed = 1F;

 Axisz = maxspeed * ınput. Getaxis("vertical");

 }



 }

 Else.

 {

 Maxspeed = 0F;

 Axisz = maxspeed * ınput. Getaxis("vertical");



 }

 İf (ınput. Getkeydown(keycode. A))

 {

 Ybotanim. Setbool("solayuru", true);

 }

 İf (ınput. Getkeyup(keycode. A))

 {

 Ybotanim. Setbool("solayuru", false);

 }

 İf (ınput. Getkeydown(keycode. D))

 {

 Ybotanim. Setbool("sagayuru", true);

 }

 İf (ınput. Getkeyup(keycode. D))

 {

 Ybotanim. Setbool("sagayuru", false);

 }



 Vector3 Vector = New Vector3(0, 0, axisz);



 // Animasyonlar arası tatlı bir geçiş sağlıyor...

 Ybotanim. Setfloat("hiz", Vector3.clampmagnitude(Vector, 1F).magnitude, 1F, time. Deltatime * 3F);

 //Ybotanim. Setfloat("hiz", maxspeed);



 Vector3 kamerayon = maincam. Transform. Transformdirection(Vector);

 //Vector3 kamerayon = maincam. Transform. Forward;

 Kamerayon. Y = 0F;

 Transform. Forward = Vector3.slerp(transform. Forward, kamerayon, time. Deltatime * 10F);



 }

}
 

Dosya Ekleri

  • resim_2024-01-20_235921774.png
    resim_2024-01-20_235921774.png
    9,2 KB · Görüntüleme: 20
Dün Unity'e merak sarıp oyun yapmayı denedim, biraz araştırma yaptıktan sonra karakterime yürümesini koşmasını ve durmasını sağlayan bir script ekledim, scripti video izleyerek kendim yazdım. Gameplay kısmına geçtiğimde yürüme koşma animasyonları sorunsuz çalışıyor fakat karakter ilerlemiyor, olduğu yerde yürüyor sadece, karakterime Rigidbody'i ekledim. Animasyon kısmını resim olarak aktardım.
Script kodları;

C#:
Public class ybotkontrol: Monobehaviour.

{

 Animator ybotanim;

 Float maxspeed;

 Float axisz;

 Camera maincam;

 Void Start()

 {

 Ybotanim = GetComponent<Animator>();

 Maincam = camera. Main;

 }

 // Update is called once per frame.

 Void Update()

 {

 İf (ınput. Getkey(keycode. W))

 {

 Maxspeed = 0.3F;

 Axisz = maxspeed * ınput. Getaxis("vertical");

 İf (ınput. Getkey(keycode. Leftshift) && ınput. Getkey(keycode. W))

 {

 Maxspeed = 1F;

 Axisz = maxspeed * ınput. Getaxis("vertical");

 }

 }

 Else.

 {

 Maxspeed = 0F;

 Axisz = maxspeed * ınput. Getaxis("vertical");

 }

 İf (ınput. Getkeydown(keycode. A))

 {

 Ybotanim. Setbool("solayuru", true);

 }

 İf (ınput. Getkeyup(keycode. A))

 {

 Ybotanim. Setbool("solayuru", false);

 }

 İf (ınput. Getkeydown(keycode. D))

 {

 Ybotanim. Setbool("sagayuru", true);

 }

 İf (ınput. Getkeyup(keycode. D))

 {

 Ybotanim. Setbool("sagayuru", false);

 }

 Vector3 Vector = New Vector3(0, 0, axisz);

 // Animasyonlar arası tatlı bir geçiş sağlıyor...

 Ybotanim. Setfloat("hiz", Vector3.clampmagnitude(Vector, 1F).magnitude, 1F, time. Deltatime * 3F);

 //Ybotanim. Setfloat("hiz", maxspeed);

 Vector3 kamerayon = maincam. Transform. Transformdirection(Vector);

 //Vector3 kamerayon = maincam. Transform. Forward;

 Kamerayon. Y = 0F;

 Transform. Forward = Vector3.slerp(transform. Forward, kamerayon, time. Deltatime * 10F);

 }

}

Doğru yoldasın 😀. Rigidbody üzerinde hareketi kontrol etmek için fixedupdate kullanman lazım hocam. Bir de kodun düzeltilmiş halini vermeden önce unutmayayım, karakterinizde bir rigidbody kullanıyorsanız, fixedupdate içinde fizik işlemlerini yapmalısın bunu YouTube'dan bakabilirsin. Düzeltilmiş kodlar;

Kod:
using UnityEngine;

public class YbotKontrol : MonoBehaviour.
{
 private Animator ybotAnim;
 private float maxSpeed;
 private float axisZ;
 private Camera mainCam;

 void Start()
 {
 ybotAnim = GetComponent<Animator>();
 mainCam = Camera.main;
 }

 void Update()
 {
 if (Input.GetKey(KeyCode.W))
 {
 maxSpeed = 0.3f;
 axisZ = maxSpeed * Input.GetAxis("Vertical");

 if (Input.GetKey(KeyCode.LeftShift) && Input.GetKey(KeyCode.W))
 {
 maxSpeed = 1f;
 axisZ = maxSpeed * Input.GetAxis("Vertical");
 }
 }
 else.
 {
 maxSpeed = 0f;
 axisZ = maxSpeed * Input.GetAxis("Vertical");
 }

 if (Input.GetKeyDown(KeyCode.A))
 {
 ybotAnim.SetBool("solayuru", true);
 }
 if (Input.GetKeyUp(KeyCode.A))
 {
 ybotAnim.SetBool("solayuru", false);
 }

 if (Input.GetKeyDown(KeyCode.D))
 {
 ybotAnim.SetBool("sagayuru", true);
 }
 if (Input.GetKeyUp(KeyCode.D))
 {
 ybotAnim.SetBool("sagayuru", false);
 }

 Vector3 moveVector = new Vector3(0, 0, axisZ);
 ybotAnim.SetFloat("hiz", Vector3.ClampMagnitude(moveVector, 1f).magnitude, 1f, Time.deltaTime * 3f);

 Vector3 cameraDirection = mainCam.transform.TransformDirection(Vector3.forward);
 cameraDirection.y = 0f;
 transform.forward = Vector3.Slerp(transform.forward, cameraDirection, Time.deltaTime * 10f);
 }
}
 

Yeni konular

Geri
Yukarı