Unity ile kule savunma oyunu nasıl yapılır?

Mçınar

Hectopat
Katılım
5 Ağustos 2019
Mesajlar
461
Sahne tasarımını geçici olarak yaptım daha oyun motorunda yeniyim az çok videolardan yürüterek hobi amaçlı bir şeyler yapıyorum ama klonluyor ama sahnede gözükmüyor.
Tankın dogma_noktasından 1, 2, 3, 4, 5, 6 hedeflerine gidip, varıs_noktası kısmına gidiyorum bir arkadaşımız YouTube üzerinden buldum 3 boyutlusunu yapmış bende 2 boyutlusunu yapmaya çabalıyorum. Dogma_noktasından 1, 2, 3, 4, 5, 6 hedeflerine gidip, varıs_noktası ınspector kısmı:

scene.PNG


dogma_noktasi_ınspector.PNG




tank.PNG


Yapan arkadaş 3 boyutlu yptığı için rigidbody kullanmış ben rigidbody2D kullandım ama tankın sahnede durması için collider eklemedim ama tankın hareketi için rigidbody kullanılmış ben rigidbody2d kullandım olmadı eksik bir şeyde olabilir ya da nasıl yapabiliriz??

GetComponent<Rigidbody2D>().velocity = transform.forward * hiz * Time.deltaTime;

Dusman_haretleri script;

C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class dusman_hareketleri : MonoBehaviour
{

    GameObject takip_edilen_kup;


    public GameObject canvas;

    public int takip_edilen_kupun_numarasi;

    float hiz = 500.0f;

    // float toplam_can = 100;
    //float su_anki_can = 100;

    yonetici yonet;



    void Start()
    {
        takip_edilen_kupun_numarasi = 1;
        takip_edilen_kup = GameObject.Find(takip_edilen_kupun_numarasi.ToString());

        yonet = GameObject.Find("yonetici").GetComponent<yonetici>();

        transform.LookAt(takip_edilen_kup.transform);


    }

    private void OnTriggerEnter(Collider collision)
    {
        if (collision.gameObject.tag == "takip_edilen_kup")
        {
            takip_edilen_kupun_numarasi++;
            takip_edilen_kup = GameObject.Find(takip_edilen_kupun_numarasi.ToString());

            transform.LookAt(takip_edilen_kup.transform);
        }

        if (collision.gameObject.name == "varis_noktasi")
        {
            yonet.gecen_dusman();
            Destroy(gameObject);
        }
    }


    void Update()
    {

        GetComponent<Rigidbody2D>().velocity = transform.forward * hiz * Time.deltaTime;

    }


}

yonetici script;
Kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class yonetici : MonoBehaviour
{

    public GameObject tank;

    public Transform dogma_noktasi;

    public int para = 100;


    public TMPro.TextMeshProUGUI para_txt;
    public TMPro.TextMeshProUGUI kalan_sure_txt;
    public TMPro.TextMeshProUGUI gecen_dusman_sayisi_txt;


    int gecen_dusman_sayisi = 0;
    int gecmemesi_gereken_dusman_sayisi = 15;

    int toplam_sure = 0;

    void Start()
    {
        para_txt.text = " $ " + para.ToString();
        gecen_dusman_sayisi_txt.text = gecen_dusman_sayisi.ToString() + " / " + gecmemesi_gereken_dusman_sayisi.ToString();

        InvokeRepeating("tank_olustur", 0, 3.0f);
        InvokeRepeating("sure_azalt", 0, 1.0f);
    }
    void tank_olustur()
    {
        GameObject yeni_tank = Instantiate(tank, dogma_noktasi.position, Quaternion.identity);


    }
    void sure_azalt()
    {
        toplam_sure++;

        kalan_sure_txt.text = toplam_sure.ToString();

    }
    public void gecen_dusman()
    {
        gecen_dusman_sayisi++;
        gecen_dusman_sayisi_txt.text = gecen_dusman_sayisi.ToString() + " / " + gecmemesi_gereken_dusman_sayisi.ToString();

        if (gecen_dusman_sayisi >= gecmemesi_gereken_dusman_sayisi)
        {
            oyunu_bitir();
        }
    }
    void oyunu_bitir()
    {
        // bitti_panel.SetActive(true);

        Time.timeScale = 0.0f;
    }

    public void para_azalt(int deger)
    {
        para -= deger;
        para_txt.text = "$" + para.ToString();

    }
    public void para_arttir(int deger)
    {
        para += deger;
        para_txt.text = "$" + para_txt.ToString();
    }


}
 
Son düzenleme:
Yazdığınız dusmanscripti 'nde
Void Update()
{

GetComponent<Rigidbody2D>().velocity = transform.forward * hiz * Time.deltaTime;

}
Velocity, Vector3 için kullanılıyor. Sizin Vector3 ile işiniz yok anladığım kadarıyla çünkü Vector3 X, Y, Z koordinasyonlarıyla alakadar ama siz 2D yapıyorsunuz. Y koordinasyonuna ihtiyacınız olmayacaktır. Diye düşünüyorum.
Bir de Forward'ı araştırdım Vector3 için kullanılıyor o da. Yani anladığım kadarıyla kodlamada bazı yerleri değiştirmeniz gerektiğini düşünüyorum. Madem yeni başladınız o zaman 3D oyunu 2D haline çevirmek yerine Tutorial'da ne öğreniyorsanız aynısını uygulayın. Ve yazdığınız kodları araştırın. Ne yazdığınızı bilin.
 
Yazdığınız dusmanscripti 'nde.
Void Update()
{

GetComponent<Rigidbody2D>().velocity = transform.forward * hiz * Time.deltaTime;

}
Velocity, Vector3 için kullanılıyor. Sizin Vector3 ile işiniz yok anladığım kadarıyla çünkü Vector3 X, Y, Z koordinasyonlarıyla alakadar ama siz 2D yapıyorsunuz. Y koordinasyonuna ihtiyacınız olmayacaktır. Diye düşünüyorum.
Bir de Forward'ı araştırdım Vector3 için kullanılıyor o da. Yani anladığım kadarıyla kodlamada bazı yerleri değiştirmeniz gerektiğini düşünüyorum. Madem yeni başladınız o zaman 3D oyunu 2D haline çevirmek yerine Tutorial'da ne öğreniyorsanız aynısını uygulayın. Ve yazdığınız kodları araştırın. Ne yazdığınızı bilin.

Aynı üç boyutlu halini uygulayacağım ona göre sanırsam dediğiniz gibi biraz uğraştıktan sonra iki boyutluya döneceğim.
Başka önerisi olan arkadaşlar varsa hala konu takibinde kalacağım.
 
Aynı üç boyutlu halini uygulayacağım ona göre sanırsam dediğiniz gibi biraz uğraştıktan sonra iki boyutluya döneceğim.
Başka önerisi olan arkadaşlar varsa hala konu takibinde kalacağım.
Merhaba, rigidbody kullanma sebebiniz nedir? Muhtemelen rigidbody kullandığınız için tanklarınız Z ekseninde yere düşüyor. Ortographic kamera bakış açısıyla 2D yürütülen bir tank oyununda rigidbodye ihtiyacınız yok. RB fizik componenti. Collider kullanmanız yeterli.
 

Geri
Yukarı