스텟만들기 - 핵심 내용
1. 스크립터블 오브젝트(Scriptable Object)
- 스크립터블 오브젝트는 Unity에서 데이터를 저장하고 관리하는 유연한 데이터 컨테이너
- 게임에서 재사용 가능한 데이터 또는 설정을 저장하는 데 사용
- 코드와 데이터를 분리하여 코드를 더 깔끔하고 관리하기 쉽게 만듬
- 하나의 스크립터블 오브젝트를 여러 게임 오브젝트에서 참조하거나 재사용할 수 있다.
- Unity 에디터와 통합되어 인스펙터 창에서 직접 수정하고 관리할 수 있다.
케릭터 스텟 만들기
1. Attack SO 만들기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName ="DefaultAttackData", menuName ="TopDownController/Attacks/Default", order = 0)]
public class AttackSO : ScriptableObject
{
[Header("Attack Info")]
public float size;
public float delay;
public float power;
public float speed;
public LayerMask target;
[Header("Knock Back Info")]
public bool isOnKnockback;
public float knockbackPower;
public float knockbackTime;
}
2. RangedAttackData 만들기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName = "RangedAttackData", menuName = "TopDownController/Attacks/Ranged", order = 1)]
public class RangedAttackData : AttackSO
{
[Header("Ranged Attack Data")]
public string bulletNameTag;
public float duration;
public float spread;
public int numberofProjectilesPerShot;
public float multipleProjectilesAngel;
public Color projectileColor;
}
3. CharacterStats 만들기
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public enum StatsChangeType
{
Add,
Multiple,
Override,
}
[Serializable]
public class CharacterStats
{
public StatsChangeType statsChangeType;
[Range(1, 100)] public int maxHealth;
[Range(1f, 20f)] public float speed;
public AttackSO attackSO;
}
4. SO 데이터 만들기
ScriptableObjects\Datas 폴더→ Ranged 데이터 생성
Player_RangedAttackData 이름 변경
다음과 같이 데이터 설정
Character Stats Handler 설정
- Player - CharacterStatsHandler 추가
- AttackSO → Player_RangedAttackData 설정
'TIL' 카테고리의 다른 글
12.13 (TIL - Unity) (0) | 2023.12.13 |
---|---|
12.12 (TIL-Unity) (0) | 2023.12.12 |
12.08 (TIL-코딩문제) (1) | 2023.12.08 |
12.07 (TIL-Unity) (0) | 2023.12.07 |
12.06 (TIL-코딩문제) (0) | 2023.12.06 |