1.nameof 사용법
다양한 스크립트를 딕셔너리로 관리를 해보고 싶었다.
예를 들어 플레이어의 스킬을 관리한다고 했을때 Skill을 상속 받는 다양한 스킬들이 존재 할 것이다.
이를 상속받은 클래스 이름으로 정리하면 좋을거 같아서 방법을 찾아보던 중 nameof 라는것을 알게 되었다.
nameof(FireBall) 이라고하면 FireBall을 문자 그대로 출력 해준다.
public Dictionary<string,Skill> userSkill = new Dictionary<string, Skill>();
public void RegisterFireBall(Skill Fireball)
{
userSkill[nameof(Fireball)] = Fireball;
}
이런식으로 작성하면 딕셔너리에 Frireball 문자열을 키 값으로 가지는 Fireball을 등록할 수 있게 된다.
원하는 스킬을 찾을때 nameof(Class 이름) 으로 찾으면 되니 실수도 줄어 들고 좋은 방법으로 사용 가능하다.
2.잘못된 사용법
처음에 nameof가 Class의 이름을 string으로 바꿔주는 기능인줄 알았다.
아래와 같이 작성하면 자동으로 클래스 이름이 키값으로 들어갈 것이라고 생각했다.
public Dictionary<string,Skill> userSkill = new Dictionary<string, Skill>();
public void RegisterSkill(Skill skill)
{
userSKill[nameof(skill)] = skill
}
매개변수로 받은 스킬이 만약 fireball이면 nameof(skill) 이 fireball로 저장될 줄 알았다.
그게 아니라 nameof 내부에 skill 이라는 문자 그대로 skill로 저장이 되는것이다.
그래서 아무리 딕셔너리를 통해 fireball을 찾아도 찾을수가 없었다.
3.해결 방법
정확한 클래스명을 키로 사용하고 싶으면 아래와 같이 작성하면 된다.
public Dictionary<string,Skill> userSkill = new Dictionary<string, Skill>();
public void RegisterSkill(Skill skill)
{
userSKill[skill.GetType.name] = skill
}
4.다른 사용법
대신에 아래와 같이 클래스 명으로 접근할 때 사용하면 깔끔하게 관리가 가능하다.
public Skill FindSkill(string skillname)
{
return userSkill[skillname];
}
public void GetSkill()
{
Skill findSkill = FindSkill(nameof(FireBall));
}
'Unity > 기능' 카테고리의 다른 글
| [Unity] 유니티 오브젝트의 법선백터 계산 기준 (0) | 2025.05.22 |
|---|---|
| [Unity] 2D 게임에서 카메라 영역 제한하기 (2) | 2025.05.19 |
| [Unity] 제네릭(Generic) 을 통한 상속 (0) | 2025.05.08 |
| [Unity] UI의 Rect Transform (0) | 2025.05.04 |
| [Unity] BoxCast로 히트 박스 제작하기 (1) | 2025.05.02 |