using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class EnemyGenerator : MonoBehaviour
{
public GameObject player;
public GameObject[] spwanPoint;
public GameObject[] EnemyGos;
public Button[] btnEnemyTypes;
public Button btnGenerateEnemy;
public Text[] txts;
private bool isCleard;
private bool[] isEnemySelected;
private float maxGenTime = 3f;
private float genTime;
private Color tmpcolor;
void Start()
{
this.btnGenerateEnemy.onClick.AddListener(() =>
{
if (this.isCleard)
{
this.isCleard = false;
this.txts[0].text = "Gnerate Off";
Debug.Log("isCleard");
}
else
{
this.isCleard = true;
this.txts[0].text = "Gnerate On";
Debug.Log("!isCleard");
}
});
this.isEnemySelected = new bool[this.EnemyGos.Length];
for (int i = 0; i < this.btnEnemyTypes.Length; i++)
{
int idx = i;
this.btnEnemyTypes[idx].onClick.AddListener(() =>
{
if (!this.isEnemySelected[idx])
{
this.isEnemySelected[idx] = true;
if(idx == 0) this.txts[1].text = "Range On";
else this.txts[2].text = "Melee On";
Debug.LogFormat("{0} true", idx);
}
else
{
this.isEnemySelected[idx] = false;
if (idx == 0) this.txts[1].text = "Range Off";
else this.txts[2].text = "Melee Off";
Debug.LogFormat("{0} false", idx);
}
});
}
}
void FixedUpdate()
{
float[] arrDist = new float[this.spwanPoint.Length];
float maxDist = 0;
int mostFarSpwanPoint = 0;
int secondFarSpwanPoint = 0;
for (int i = 0; i < this.spwanPoint.Length; i++)
{
arrDist[i] = Vector2.Distance(this.player.transform.position, this.spwanPoint[i].transform.position);
if (maxDist < arrDist[i])
{
secondFarSpwanPoint = mostFarSpwanPoint;
maxDist = arrDist[i];
mostFarSpwanPoint = i;
}
}
if (!this.isCleard)
{
this.genTime += Time.deltaTime;
if(this.genTime >= this.maxGenTime)
{
for (int i = 0; i < this.EnemyGos.Length; i++)
{
if (this.isEnemySelected[i])
{
var go = Instantiate(this.EnemyGos[i]);
go.transform.position = this.spwanPoint[mostFarSpwanPoint].transform.position;
go.GetComponent<AIEnemy>().Init(this.player.transform);
}
if (this.isEnemySelected[i])
{
var go = Instantiate(this.EnemyGos[i]);
go.transform.position = this.spwanPoint[secondFarSpwanPoint].transform.position;
go.GetComponent<AIEnemy>().Init(this.player.transform);
}
}
Debug.Log("Spawn");
this.genTime = 0;
}
}
}
}
구상한 로직은 플레이어가 해당 룸으로 입장 시 EnemyGenerator 오브젝트를 활성화 (SetActive)하여 해당 스크립트가 바로 실행되도록 구현하였으며 현재는 2가지 Enemy 종류로 테스트단계입니다. 또한, 현재는 플레이어와 가장 먼 2가지 스폰 포인트에서 Enemy 객체가 생성되도록 하였으며, 특정 조건을 통해 해당 스크립트의 isCleard변수가 true가 되었을 때 적 생성이 중단됩니다.
'Unity2D' 카테고리의 다른 글
Unity) [유니티 2D] 대시공격 AI 구현 (0) | 2023.03.21 |
---|---|
Unity) [유니티 2D] 자폭공격AI 구현 (0) | 2023.03.19 |
Unity) [유니티 2D] Skill(Spell) Indicator 구현 (0) | 2023.03.14 |
Unity) [유니티 2D] 넉백효과 구현 (0) | 2023.03.13 |
Unity) [유니티 2D] 플레이어 대시, 잔상 구현 (0) | 2023.03.10 |