오늘은 정말 힘들었다... 잠도 별로 못 잔 채로 12시가 넘어서까지 계속 작업을 했다.
오늘은 여러 문제가 많았지만, 그중에서도 GameObject를 Destroy 할 때의 처리에 대해 자꾸만 까먹어서 문제였다. 다행히 팀원 중에 이런 것을 잘 체크해주시는 분이 계셔서 내 실수를 발견해주셨지만, 나 혼자였다면 또 끙끙 앓고 있었을 것이다. 앞으로는 Destroy 될 때 해제해야 하거나 처리해줘야 할 것들을 반드시 잊지 말자.
나는 이번 프로젝트에서 Enemy를 맡았는데, 이 때 Enemy가 이동할 수 있는지 여부를 파악하기 위해 Raycast를 사용했다.
private Vector3Int IsTileAvailable()
{
foreach(var pos in points)
{
RaycastHit2D hit = Physics2D.Raycast((Vector3)pos, Vector3.zero, 0.1f, LayerMask.GetMask("Wall", "Enemy", "Player"));
if(hit.transform == null)
{
return pos;
}
}
return Vector3Int.FloorToInt(transform.position);
}
이동하고 싶은 좌표 points들에서 pos를 가져와 RaycastHit2D를 통해 해당 좌표에 LayerMask로 Wall, Player, 다른 Enemy가 있는지 여부를 파악하고, 없다면 return을 해주는 함수이다.
해당 코드는 Resources에 있는 Enemy Prefab들을 가져오기 위해 사용했다.
Resources/Enemy에 위치해 있는 GameObject 타입들을 전부 가져와서 미리 선언해둔 List<GameObject> EnemyPrefab
에 넣어주는 방식으로 했다.
public void SetEnemyPrefabList()
{
foreach(var go in Resources.LoadAll<GameObject>("Enemy"))
{
EnemyPrefab.Add(go);
}
EnemyPrefabList();
}
오늘은 정말 힘들었다. 그래도 어느정도 마무리를 지은 것 같아 다행이다. 구현하고 싶었던 기능들이나 몬스터의 종류를 더 늘리고 싶었지만 시간이 부족해 아쉽다.