본문 바로가기
IT

[Unity] 게임 개발하면서 주의하면 좋은 점 / 게임 개발 팁 / 최적화

by 배애앰이 좋아 2023. 11. 20.
반응형

 

 

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;
    }

 

 

반응형

댓글