Bir Önceki Derste Yaptığımız Yapay Zekanın Üzerinden Devam Ediyoruz. Bir Önceki Derse
BURADAN Bakabilirsiniz. Çok Uzatmadan Konuya Başlayalım İlk Önce Bir (Sphere)Küre Oluşturuyoruz Ve Küreye Bir Materyal Atıyoruz Bu Düşmanın Bize Fırlatacağı Mermi Olacak.
Bu Merminin İçine (Rigidbody) Fizik Ekliyoruz. Bu işlemleri Tamamladıktan Sonra. Yeni Bir C# Dosyası Oluşturuyoruz. Aşağıda Yazmış Olduğum Kodu Kopyalayıp, Oluşturmuş Olduğumuz C# Dosyasının içine Yapıştırıyoruz.
Oluşturduğumuz Kodu mermimiz'in içine atıyoruz Speed e istediğiniz bir değeri verebilirsiniz.
Speed Değeri merminin gidiş hızıdır. neden Raycast sistemi kullanmıyorsun derseniz bu sistem daha gerçekçi olduğu için. Raycast metodunda belirli bir ışın düz bir halde ve önüne bir obje çıkmadığı sürece sonsuza kadar gider .
bu kullandığım metotta ise oluşan bir mermi vardır , merminin fırlatılma hızı ve fiziği vardır sonsuza kadar gitmez önüne bir obje çıkmazsa yere düşer.
son olarak mermimiz'i Prefab haline getiriyoruz.
Bir C# Dosyası daha Oluşturup Adına EnemyGun ismini veriyoruz ve aşağıdaki kodu kopyalayıp yapıştırıp Kaydedip Unity 3d ye dönüyoruz. Boş bir GameObject oluşturuyoruz ve onu Enemynin içine atıyoruz adına BulletSP veriyoruz ve BulletSP nin içine Kodumuzu atıyoruz Enemy TransformaPlayerimizi TowerTransforma Yaptığımız Kuleyi koyuyoruz. BulletTime Ve BulletTimere Herhangi bir sayı veriyoruz Bullet Time Ve BulletTimer a Aynı Rakamı vermeniz lazım sebebi ise BulletTime merminin çıkış süresidir BulletTimer ise merminin çıkış süresini yenileyen Sayaçtır.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyGun : MonoBehaviour
{
public Transform EnemyTransform;
public Transform TowerTransform;
public Transform BulletSpawnPoint;
public GameObject Bullet;
public float EnemyDistance;
public float TowerDistance;
public float A = 100;
public float BulletTime;
public float BulletTimer;
public bool TowerFire;
public bool EnemyFire;
public bool TowerBool = true;
Vector3 TowerPosition;
Vector3 EnemyPosition;
void Update()
{
//-----------------------------------------------------------------------------------------------------------------------------
EnemyDistance = Vector3.Distance(transform.position, EnemyTransform.position);
EnemyPosition = new Vector3(EnemyTransform.position.x, transform.position.y, EnemyTransform.position.z);
//-----------------------------------------------------------------------------------------------------------------------------
if (TowerBool)
{
TowerDistance = Vector3.Distance(transform.position, TowerTransform.position);
TowerPosition = new Vector3(TowerTransform.position.x, transform.position.y, TowerTransform.position.z);
A = TowerDistance;
}
if (!TowerBool)
{
TowerFire = false;
A = 100;
TowerDistance = 100;
}
if (A >= 100)
{
TowerFire = false;
}
if (A < 99 && A > 11)
{
TowerFire = false;
}
if (A >= 10 && A <= 15)
{
TowerFire = true;
}
//-------------------------------------------------------------------------
if (EnemyDistance > 20)
{
TowerBool = true;
EnemyFire = false;
}
if (EnemyDistance <= 20 && EnemyDistance > 11)
{
EnemyFire = false;
TowerFire = false;
TowerBool = false;
}
if (EnemyDistance >= 10 && EnemyDistance <= 15)
{
EnemyFire = true;
TowerFire = false;
TowerBool = false;
}
//------------------------------------------------------------------
if (EnemyFire)
{
transform.LookAt(EnemyPosition);
BulletTime -= Time.deltaTime;
}
//--------------------------------------------------------------
if (TowerFire)
{
transform.LookAt(TowerPosition);
BulletTime -= Time.deltaTime;
}
//----------------------------------------------------------
if (BulletTime < 0)
{
Instantiate(Bullet, BulletSpawnPoint.position, BulletSpawnPoint.rotation);
BulletTime = BulletTimer;
}
}
}