프로젝트가 하나 또 완성됐다.
연휴가 길어서 걱정을 많이 했는데, 연휴에도 개발을 하다보니 생각보다 구현이 잘됐다.
다만 아쉬운점은 타워마다 특별한 특징이 없는 점인데,
시간이 부족하다 보니 제작이 힘들었다.
다음에는 메인 기능을 꼭 분리해서 진행해야겠다.
너무 큰 도전이었다!
싱글턴 제네릭하게 사용하는게 더 효율적이다.
게임이 길어질수록 -> 포지션을 계속 받아와야해서 부하가 될 수 있다.
컬렉션을 재활용할 수 있는 방법을 고민해보자.
using UnityEngine;
using System.Collections;
public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
private static T _instance;
public static T Instance
{
get
{
if (_instance == null)
{
_instance = FindObjectOfType(typeof(T)) as T;
if (_instance == null)
{
Debug.LogError("There's no active " + typeof(T) + " in this scene");
}
}
return _instance;
}
}
}
using UnityEngine;
using System.Collections;
public class ManagerClass : Singleton<ManagerClass>
{
}
이렇게 진행하면, 매니저 클래스마다 코드를 만들어줄 필요없이 싱글톤으로 구현 가능하다!
아래 코드는 현재 타워의 눈금을 지정하는 부분이다.
private Vector2[] CalculateDotPositions(int towerLevel)
{
Vector2[] positions = null;
switch (towerLevel)
{
case 1:
positions = new Vector2[] { Vector2.zero };
break;
case 2:
positions = new Vector2[] { new Vector2(-0.3f, -0.3f), new Vector2(0.3f, 0.3f) };
break;
case 3:
positions = new Vector2[] { new Vector2(-0.3f, -0.3f), Vector2.zero, new Vector2(0.3f, 0.3f) };
break;
case 4:
positions = new Vector2[] { new Vector2(-0.3f, -0.3f), new Vector2(0.3f, -0.3f), new Vector2(-0.3f, 0.3f), new Vector2(0.3f, 0.3f) };
break;
case 5:
positions = new Vector2[] { new Vector2(-0.3f, -0.3f), new Vector2(0.3f, -0.3f), Vector2.zero, new Vector2(-0.3f, 0.3f), new Vector2(0.3f, 0.3f) };
break;
case 6:
positions = new Vector2[] { new Vector2(-0.3f, -0.3f), new Vector2(-0.3f, 0f), new Vector2(-0.3f, 0.3f), new Vector2(0.3f, -0.3f), new Vector2(0.3f, 0f), new Vector2(0.3f, 0.3f) };
break;
default:
break;
}
return positions;
}
이 부분을 컬렉션화해서 재사용이 가능하게 만든다면,
private Dictionary<int, Vector2[]> dotPositions = null;
private void Awake()
{
dotPositions = CalculateDotPositions();
}
private Dictionary<int, Vector2[]> CalculateDotPositions()
{
Dictionary<int, Vector2[]> positions = new Dictionary<int, Vector2[]>();
positions[1] = new Vector2[] { Vector2.zero };
positions[2] = new Vector2[] { new Vector2(-0.3f, -0.3f), new Vector2(0.3f, 0.3f) };
positions[3] = new Vector2[] { new Vector2(-0.3f, -0.3f), Vector2.zero, new Vector2(0.3f, 0.3f) };
positions[4] = new Vector2[] { new Vector2(-0.3f, -0.3f), new Vector2(0.3f, -0.3f), new Vector2(-0.3f, 0.3f), new Vector2(0.3f, 0.3f) };
positions[5] = new Vector2[] { new Vector2(-0.3f, -0.3f), new Vector2(0.3f, -0.3f), Vector2.zero, new Vector2(-0.3f, 0.3f), new Vector2(0.3f, 0.3f) };
positions[6] = new Vector2[] { new Vector2(-0.3f, -0.3f), new Vector2(-0.3f, 0f), new Vector2(-0.3f, 0.3f), new Vector2(0.3f, -0.3f), new Vector2(0.3f, 0f), new Vector2(0.3f, 0.3f) };
이 코드를 사용한다면,
int towerLevel = 3;
Vector2[] positions = dotPositions[towerLevel];
foreach (Vector2 position in positions)
{
Debug.Log("Position: " + position);
}
이렇게..?
다시 3D 강의를 들어보자! 3D가 어려워도 재밌는 점이 많은 것 같다.