Unity 개발일지

[Unity] 캐릭터 스텟(Stat) 시스템 만들기 본문

Unity 개발

[Unity] 캐릭터 스텟(Stat) 시스템 만들기

아머르 2024. 5. 17. 21:02

오늘은 캐릭터 스텟 시스템을 만들어보자

 

 

[AttackSO.cs]

ScriptableObject는 클래스 인스턴스와는 별도로 대량의 데이터를 저장하는 데 사용할 수 있는 데이터 컨테이너입니다. ScriptableObject의 주요 사용 사례 중 하나는 값의 사본이 생성되는 것을 방지하여 프로젝트의 메모리 사용을 줄이는 고,  연결된 MonoBehaviour 스크립트에 변경되지 않는 데이터를 저장하는 프리펩이 있는 프로젝트의 경우 유용하다.

 

원거리공격을 따로 빼서 만들어준경우

 

AttackSO를 만들어주었다면 Project창에서 AttckSO를 만들 수 있다.

 

AttackSO 스크립트에 넣은 값들을 조정할 수 있다.

 

AttackSO를 연결해줘야하니 Controller에 Event등록을 해주자!

 

 

 

 

 

ScriptableObject - Unity 매뉴얼

ScriptableObject는 클래스 인스턴스와는 별도로 대량의 데이터를 저장하는 데 사용할 수 있는 데이터 컨테이너입니다. ScriptableObject의 주요 사용 사례 중 하나는 값의 사본이 생성되는 것을 방지하

docs.unity3d.com

 

 

[CharacterStat .cs]

Enum타입으로 StatChangeType을 만들어주었다.

Add, Multiple 마지막에 Override하는 개념으로 Enum으로 만든 이유는

Enum에는 각각 정수가 매핑되어있어 차후 오름차순으로 정렬을 활용해서

체계적으로 버프효과 적용순서 관리가 가능하다.

 

 

[CharacterStatHandler.cs]

다음은 CharacterStatHandler 스크립트이다.

 

CharacterStst을 설정할 수 있게 baseStat으로 변수를 선언해주었고,

CurrentStat을 다른 스크립트에서 가져갈 수 있게 get만 열어놓았다.

statModifiers로 어떤 추가스텟이 있는지에 대한 리스트를 선언해주었다.

 

UpdateCharacetrStat함수를 Awake에서 실행하도록 해주었다.

UpdqteCharacterStat은 AttackSO를(공격관련스크립트) 지역변수로 선언 해주었다.

그리고 CurrentStat에 new CharacterStat을 생성하여 스텟을 넣을 수 있게 해주었다.

 

 

[HealthSystem.cs]

healthChangeDelay 변수로 피격 시 무적 시간을 만들어줄 계획!

각각의 Action들을 정의해주었고, 람다식을 이용하여 CurrentStat.maxHealth를 get하였다.

 

 

Update문에서 피격무적 발생조건에 대해 if문으로으로 정의해주었고

 

체력변동 시 발생 순서를 ChangeHealth 함수로 작성해주었다.

 

마지막 OnDeath를 실행해주는 CallDeath함수도 만들었다.

 

 

[DestroyOnDeath.cs]

체력이 0이되어 파괴될 경우 작동할 스크립트를 작성해주었다.

 

 

[Unity 적용하기]

CharacterStatHandler와 HealthSystem 스크립트를 적용하고 AttackSO를 필드에 적용해주면 된다!

 

반응형