Unity wasd için yazılan kodlar hata veriyor

Mmmcanbalta

Decapat
Katılım
18 Aralık 2018
Mesajlar
8
Merhaba. Unity de başlangıç seviyesinde bir oyun yapıyorum. 2D bir oyun ve bunun için yön tuşları ile hareket etme kodu yazdım. Kaydedip kod dosyasını karaktere sürükleyince "the script don't inherit a native class that can manage a script." hatasını alıyorum. Nasıl düzeltebilirim? Kullandığım sürüm "2020.2.2F1".

Yazdığım kod şu:

Float horizontal = ınput. Getaxis("horizontal");
Float vertical = ınput. Getaxis("vertical");

Vector3 forward = transform. Forward * vertical * Speed * Ti'me. Deltatime;
Vector3 right = transform. Right * horizontal * Speed * Ti'me. Deltatime;

Cc. Move(forward + right);
 
Son düzenleyen: Moderatör:
[CODE title="kod"]float horizontal = Input. GetAxis("Horizontal");

float vertical = Input. GetAxis("Vertical");

Vector3 forward = transform. Forward * vertical * Speed * Time. deltaTime;

Vector3 right = transform. Right * horizontal * Speed * Time. deltaTime;[/CODE]

Kodları düzeltmiş halim yukarıdaki. Eğer halen olmadıysa aşağıdaki kodu da deneyebilirsin.

[CODE title="kod"]float speedX= canMove ? (isRunning ? runningSpeed : walkingSpeed) * Input.GetAxis("Vertical") : 0;[/CODE]

Bunu kullan.
 
Son düzenleme:
Time yerine neden Ti'me yazdınız ?

DeltaTime kullanıp Update'e koymak yerine time kısmını çıkarıp FixedUpdate içinde kullanabilirsiniz.

C#:
private void Move_With_Keyboard()
    {
        if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A))
        {
            Player.transform.Translate(-speed, 0, 0);
        }
        else if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D))
        {
            Player.transform.Translate(speed, 0, 0);
        }
    }
 
Yine olmadı.Acaba atadığım karakterde sorun olabilir mi?
Time yerine neden Ti'me yazdınız ?

DeltaTime kullanıp Update'e koymak yerine time kısmını çıkarıp FixedUpdate içinde kullanabilirsiniz.

C#:
private void Move_With_Keyboard()
    {
        if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A))
        {
            Player.transform.Translate(-speed, 0, 0);
        }
        else if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D))
        {
            Player.transform.Translate(speed, 0, 0);
        }
    }
Olmuyor,kodları doğru yazıyorum ama olmuyor.Başka bir problem var gibi.Yine de teşekkürler...
 
Hareket kodunuzu değişkenleriyle buradan yayınlayın biz bakalım. Bu kontrolcüyü 3 tane oyunda kullandım şimdiye kadar hiçbir sorun çıkarmadı bana.

Büyük ihtimal hatanız hız belirlememek ya da Oyuncu Objesini script'e ataçlamamak.
 
Hareket kodunuzu değişkenleriyle buradan yayınlayın biz bakalım. Bu kontrolcüyü 3 tane oyunda kullandım şimdiye kadar hiçbir sorun çıkarmadı bana.

Büyük ihtimal hatanız hız belirlememek ya da Oyuncu Objesini script'e ataçlamamak.
Bu söylediğinizi nasıl yapabilirim?Biraz fazla acemiyim.Kusura bakmayın.Yani hareket kodu ve değişkenleri ne demek ve bunu nereden bulabilirim?Biraz daha anlayacağım bir dilden anlatırsanız,teşekkürler.
 
Tuşlara direk ata. Aşağıdaki kodu kullan.

[CODE title="code"]


if(Input.GetKeyDown(KeyCode.A)){
//Buraya "A" tuşuna basılınca olacak komutları gir.
}

if(Input.GetKeyUp(KeyCode.A)){
//Buraya bir şey yazmana gerek yok.
}[/CODE]
 
Son düzenleme:
1612856594907.png


Script'i onu kullanacak olan GameObject'e ataçladıktan sonra(Sürükle bırak yöntemiyle ya da Add Component kısmından script adı seçerek) ilgili scriptte Player objesini kullanabilmek için public referans bırakıp transform ya da addFroce fonksiyonlarıyla hareket katabilirsiniz.

1612856758745.png


public sıfatı verdiğiniz objelere Unity üzerinden ulaşıp sürükle bırak yordamıyla manipülasyon gerçekleştirebilirken protected ya da private sıfatı olan nesnelere bu eylemi gerçekleştiremezsiniz.
 

Geri
Yukarı