using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
namespace Test3
{
public class Test_CreatePortalMain : MonoBehaviour
{
[SerializeField]
private GameObject heroPrefab;
private HeroController heroController;
[SerializeField]
private MonsterGenerator monsterGenerator;
private List<MonsterController> monsterList;
[SerializeField]
private ItemGenerator itemGenerator;
private List<ItemController> itemList;
[SerializeField]
private GameObject portalPrefab;
// Start is called before the first frame update
void Start()
{
this.CreateHero();
this.monsterList = new List<MonsterController>();
MonsterController turtle = this.monsterGenerator.Generate(GameEnums.eMonsterType.Turtle, new Vector3(-3, 0, 0));//제너레이터야 만들어라
turtle.onDie = (rewardItemType) =>
{
var pos = turtle.gameObject.transform.position;
this.CreateItem(rewardItemType, pos);
Destroy(turtle.gameObject);
};
MonsterController slime = this.monsterGenerator.Generate(GameEnums.eMonsterType.Slime, new Vector3(0, 0, 3));
slime.onDie = (rewardItemType) =>
{
var pos = slime.gameObject.transform.position;
this.CreateItem(rewardItemType, pos);
Destroy(slime.gameObject);
};
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);
}
this.itemList = new List<ItemController>();
}
private void CreateHero()
{
GameObject heroGo = Instantiate(this.heroPrefab);
this.heroController = heroGo.GetComponent<HeroController>();
Debug.Log(this.heroController);
}
// Update is called once per frame
void Update()
{
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))
{
MonsterController controller = hit.collider.gameObject.GetComponent<MonsterController>();
if (controller != null)
{
this.monsterList.Remove(controller);
controller.Die();
}
else
{
if (this.heroController != null)
{
this.heroController.Move(hit.point);
}
}
Debug.LogFormat("this.monsterList.Count: {0}", this.monsterList.Count);
if (this.monsterList.Count <= 0)
{
this.CreatePortal();
}
}
}
}
private void CreateItem(GameEnums.eItemType itemType, Vector3 position)
{
this.itemGenerator.Generate(itemType, position);
}
private void CreatePortal()
{
int x = Random.Range(-4, 4);
int z = Random.Range(-4, 4);
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 HeroController : MonoBehaviour
{
private Vector3 targetPosition;
private Coroutine moveRoutine;
private Animator anim;
// Start is called before the first frame update
void Start()
{
this.anim = this.GetComponent<Animator>();
}
// Update is called once per frame
public void Move(Vector3 targetPosition)//위치(몬스터X?)
{
this.targetPosition = targetPosition;
Debug.Log("움직여라");
this.transform.LookAt(this.targetPosition);
//이동
this.moveRoutine = StartCoroutine(this.CoMove());
}
private IEnumerator CoMove()
{
while (true)
{
//이동
this.transform.Translate(Vector3.forward * 1.5f * Time.deltaTime);
anim.SetInteger("State", 1);
float distance = Vector3.Distance(this.transform.position, this.targetPosition);//거리측정
Debug.Log(distance);
if (distance <= 0.1f)
{
break;
}
yield return null;//다음 프레임 시작
}
Debug.Log("<color=yellow>도착</color>");
anim.SetInteger("State", 0);
}
}
}
heroGenerator를 만들었었는데 그냥 main에 CreateHero를 만들어도 된다는것을 알았다.
'유니티 기초' 카테고리의 다른 글
무기 바꿔끼우기 (0) | 2023.08.11 |
---|---|
포탈 한번만 나오기 수정 & 아이템먹기 (0) | 2023.08.10 |
몬스터 죽으면 아이템 생성 (0) | 2023.08.10 |
몬스터 클릭하면 사라지고 랜덤 위치에 포탈 생성하기 (0) | 2023.08.10 |
rpg monster 복습 (0) | 2023.08.08 |