using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameEnums
{
public enum eMonsterType
{
Turtle,Slime
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Test3
{
public class Test_CreatePortalMain : MonoBehaviour
{
[SerializeField]
private MonsterGenerator monsterGenerator;
private List<MonsterController> monsterList;
[SerializeField]
private GameObject portalPrefab;
// Start is called before the first frame update
void Start()
{
this.monsterList = new List<MonsterController>();
MonsterController turtle = this.monsterGenerator.Generate(GameEnums.eMonsterType.Turtle,new Vector3(-3,0,0));//제너레이터야 만들어라
MonsterController slime = this.monsterGenerator.Generate(GameEnums.eMonsterType.Slime, new Vector3(0, 0, 3));
this.monsterList.Add(turtle);
this.monsterList.Add(slime);
Debug.LogFormat("this.monsterList.Count: {0}", this.monsterList.Count);
foreach (MonsterController monster in monsterList)
{
Debug.LogFormat("monster{0}", monster);
}
}
// Update is called once per frame
void Update()
{
//Test 클릭해서 죽이기
//ray연습할겸 클릭해서 선택 몬스터를 제거하자
//화면을 클릭하면 ray를 만든다.
//ray 사용해서 충돌체크한다
//충돌을 감지해서 해당 몬스터를 씬에서 제거한다.
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Debug.DrawRay(ray.origin, ray.direction * 100f, Color.red, 3f);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100f))
{
if (hit.collider.tag == "Monster")
{
MonsterController controller =hit.collider.gameObject.GetComponent<MonsterController>();
this.monsterList.Remove(controller);
Destroy(hit.collider.gameObject);
Debug.LogFormat("this.monsterList.Count: {0}", this.monsterList.Count);
}
int x = Random.Range(-4, 4);
int z = Random.Range(-4, 4);
if (this.monsterList.Count <= 0)
{
GameObject portalGo=Instantiate(portalPrefab);
portalGo.transform.position = new Vector3(x, 0, z);
}
}
}
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Test3
{
public class MonsterController : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Test3
{
public class MonsterGenerator : MonoBehaviour
{
//[SerializeField] private GameObject turtlePrefab;
//[SerializeField] private GameObject slimePrefab;
[SerializeField]
private List<GameObject> prefabList;//동적 배열(컬렉션은 사용전 반드시 인스턴스화)
// Start is called before the first frame update
void Start()
{
foreach(GameObject prefab in this.prefabList)
{
Debug.LogFormat("prefabs{0}", prefab);
}
}
// Update is called once per frame
/// <summary>
/// 몬스터 생성
/// </summary>
/// <param name="monsterType">생성하려고 하는 몬스터의 타입</param>
/// <param name="initPosition">생성된 몬스터의 월드 좌표</param>
public MonsterController Generate(GameEnums.eMonsterType monsterType,Vector3 initPosition)
{
Debug.LogFormat("monsterType{0}", monsterType);
//몬스터 타입에 따라 어떤 프리팹으로 프리팹 복사본(인스턴스)를 생성할ㅈ ㅣ결정 해야함
int index = (int)monsterType;
Debug.LogFormat("index{0}", index);
GameObject prefab = this.prefabList[index];
Debug.LogFormat("prefab{0}", prefab);
GameObject go = Instantiate(prefab);
//동적으로 컴포넌트 부착
//if (go.GetComponent<MonsterController>() == null)
//{
// MonsterController controller = go.AddComponent<MonsterController>();
//}
//if (go.GetComponent<MonsterController>() != null)
//{
// Destroy(go.GetComponent<MonsterController>());
//}
go.transform.position = initPosition;
//if (monsterType == GameEnums.eMonsterType.Turtle)
//{
// Instantiate(this.prefabList[0]);
//}
//elseif (monsterType == GameEnums.eMonsterType.Slime)
//{
// Instantiate(this.prefabList[1]);
//}
return go.GetComponent<MonsterController>();
}
}
}