1)
반복되는 이름을 사용할 경우 (예 : 애니메이션 이름 같은) 전역변수로 바꿔서 한번에 관리하기
고정적으로 쓰이는 값 경우 어디 한 곳에 모아두기
변수들은 enum 을 사용해서 관리하기 -> 다른 사람들이 더 쉽게 볼 수 있고 나중에 수정에도 용이함
예시 :
export enum TitanAnimationState{
AttackFast = 0,
AttackSlow = 1,
AttackIdle = 2
}
export enum TAnimation{
isIdle = "isIdle",
isWalk = "isWalk",
isRun = "isRun",
}
2)
함수을 만들 때는 기능 분할시키고 합치기
예시 : ChangeRun 안에 ChangeRunAnimation / ChangeRunSFX / ChangeRunState 함수가 있게 또는 아래 참고
public FindAndFollowTarget()
{
// 타깃을 찾기
this.FindingTarget();
// 타깃 쫓기
this.RunTarget();
// 현재 거인 상태 검사하기
this.ChangeTitanAllState();
}
3)
구조적으로 init 같은 여러 번 쓰이는 중요한 부분 있으면 인터페이스로 만들기
관련 참고 링크 : https://geojun.tistory.com/49
4)
Coroutine, Update, AddListener 는 늘 유의해서 쓰기 -> 되도록 쓰지 않기 (최적화에 안 좋음)
주의할 점은 Coroutine 은 해당 객체가 비활성화되면 안 돌아감
Coroutine 사용할 때는 아래처럼 사용하기
예시 :
// 시작
if(this.capturePhotoCoroutine != null) { this.StopCoroutine(this.capturePhotoCoroutine); }
this.capturePhotoCoroutine = this.StartCoroutine(this.capturePhotoProcess());
// 종료
if(this.capturePhotoCoroutine != null) { this.StopCoroutine(this.capturePhotoCoroutine); }
5)
어떤 기능을 만들 때는 다른 사람들이 직관적으로 사용할 수 있게 만들기 + 직관적인 이름 사용하기
예시 : SettingItemBox(4) : 아이템 박스 4개를 세팅하는 함수이구나 대충 알 수 있게
6)
로직이 잘 정리되지 않을 때는 아래처럼 정리해보기
예시 :
Update{
// 호스트면 타깃 찾기
// 타깃 찾으면 데이터 보내주는 코루틴 실행
// 다른 타깃이 가까우면 현재 타깃 해체
// 서버에서 받은 위치값을 받아서 타깃이 정해졌을때
// 이동하게 만들어주기
// 거리 측정해서 현재 상태 바꿔주기
// 공격 중일 때, 공격 상태 바꿔주기
// 공격 중일 때, 데미지 처리해주기
}
Coroutine(){
// 0.5 기준으로 현재 타깃의 근처 위치를 찾아서 보내주기
}
7)
소리는 한 소리에 한 개의 Prefab으로 만들기
파티클, 소리, 애니메이션 1초마다 play 시키지 않도록 조심 / play 한번만 해야함
소리 재생할 때만 활성화, 비활성화 해주기
UI 등 추가할 때는 그냥 추가하는 것이 아닌 prefab으로 만들어서 prefab 안에서 수정하기
이펙터, 사운드 등 추가할 때 한 번에 관리할 수 있는 변수나 버튼을 미리 만들어 놓기
예시 :
if(TS_GameState.GetInstance().IsFXActive) this.playParticle(50);
8)
코드 중에 변경되지 않게 변하지 않은 값은 아래처럼 고정시켜주기
/* Const Values */
const LANGUAGE_ACTIVE_COLOR : Color = new Color(62/255, 18/255, 18/255, 255/255);
const LANGUAGE_DEACTIVE_COLOR : Color = new Color(125/255, 125/255, 125/255, 255/255);
9)
추가적으로, 참고하면 좋은 코드
// 재난 시작
public StartDisaster()
{
// 재난 지역에 있는 경우에만 Ambient 재생
if(TS_PlayerStatController.GetInstance().PlaceState == PlaceState.Field) {
TS_GameSound.GetInstance().PlayAmbient(Ambient.FireBurningLoop);
}
this.isStart = true;
}
'IT' 카테고리의 다른 글
[책 리뷰] "IT 전문가로 살아가는 법" 읽고 내용 정리 및 후기 -2 (0) | 2023.12.14 |
---|---|
게임 만들면서 고려하면 좋은 점 + Unity UI 공부 (1) | 2023.12.11 |
[유니티] collider 안 먹힐 때 / 뚫고 지나가는 오류 생길 때 / 충돌 안될 때 collision detection 사용하기 (0) | 2023.11.01 |
[Unity/TypeScript] 유니티 최적화 하는 방법 / 코드 최적화 (0) | 2023.08.23 |
[유니티 공모전/행사] MWU KOREA AWARD 2023 얼리버드 이벤트 후기 (0) | 2023.08.23 |
댓글