- SkillGemData에 카테고리, 시전 속도 배율, 추가 반복 횟수 필드를 추가함 - SkillLoadoutEntry가 젬 합산 기준 최종 속도와 반복 횟수를 계산하도록 확장함 - SkillController가 반복 횟수만큼 스킬을 재시전하고 시작 효과와 OnEffect를 매 반복에 다시 적용하도록 수정함 - 연속 젬과 반복 젬 테스트 프리셋을 추가하고 디버그 메뉴에 적용 및 계산 로그 경로를 보강함 - 공격형 테스트 젬 자산과 추가 대미지 이펙트를 정리하고 무젬 35, 반복 젬 70 피해를 검증함
79 lines
3.1 KiB
C#
79 lines
3.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
|
|
using UnityEngine;
|
|
|
|
namespace Colosseum.Skills
|
|
{
|
|
/// <summary>
|
|
/// 젬의 주 역할 분류입니다.
|
|
/// </summary>
|
|
public enum SkillGemCategory
|
|
{
|
|
Common,
|
|
Attack,
|
|
Threat,
|
|
Defense,
|
|
Support,
|
|
Control,
|
|
Efficiency,
|
|
}
|
|
|
|
/// <summary>
|
|
/// 젬 효과가 발동될 애니메이션 이벤트 인덱스와 효과 목록입니다.
|
|
/// </summary>
|
|
[Serializable]
|
|
public class SkillGemTriggeredEffectEntry
|
|
{
|
|
[Tooltip("OnEffect(index)와 매칭되는 애니메이션 이벤트 인덱스")]
|
|
[Min(0)] [SerializeField] private int triggerIndex = 0;
|
|
[Tooltip("해당 인덱스에서 함께 실행할 추가 효과")]
|
|
[SerializeField] private List<SkillEffect> effects = new();
|
|
|
|
public int TriggerIndex => triggerIndex;
|
|
public IReadOnlyList<SkillEffect> Effects => effects;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 스킬의 기반 효과 위에 추가 동작을 덧붙이는 젬 데이터입니다.
|
|
/// </summary>
|
|
[CreateAssetMenu(fileName = "NewSkillGem", menuName = "Colosseum/Skill Gem")]
|
|
public class SkillGemData : ScriptableObject
|
|
{
|
|
[Header("기본 정보")]
|
|
[SerializeField] private string gemName;
|
|
[TextArea(2, 4)]
|
|
[SerializeField] private string description;
|
|
[SerializeField] private Sprite icon;
|
|
[Tooltip("젬의 주 역할 분류")]
|
|
[SerializeField] private SkillGemCategory category = SkillGemCategory.Common;
|
|
|
|
[Header("기본 수치 보정")]
|
|
[Tooltip("장착 시 마나 비용 배율")]
|
|
[Min(0f)] [SerializeField] private float manaCostMultiplier = 1f;
|
|
[Tooltip("장착 시 쿨타임 배율")]
|
|
[Min(0f)] [SerializeField] private float cooldownMultiplier = 1f;
|
|
[Tooltip("장착 시 스킬 애니메이션 재생 속도 배율")]
|
|
[Min(0.1f)] [SerializeField] private float castSpeedMultiplier = 1f;
|
|
[Tooltip("기반 스킬 시전을 몇 회 더 반복할지 정의합니다. 현재는 계산/표시용으로만 사용됩니다.")]
|
|
[Min(0)] [SerializeField] private int additionalRepeatCount = 0;
|
|
|
|
[Header("추가 효과")]
|
|
[Tooltip("시전 시작 시 즉시 발동하는 추가 효과")]
|
|
[SerializeField] private List<SkillEffect> castStartEffects = new();
|
|
[Tooltip("애니메이션 이벤트 인덱스별로 발동하는 추가 효과")]
|
|
[SerializeField] private List<SkillGemTriggeredEffectEntry> triggeredEffects = new();
|
|
|
|
public string GemName => gemName;
|
|
public string Description => description;
|
|
public Sprite Icon => icon;
|
|
public SkillGemCategory Category => category;
|
|
public float ManaCostMultiplier => manaCostMultiplier;
|
|
public float CooldownMultiplier => cooldownMultiplier;
|
|
public float CastSpeedMultiplier => castSpeedMultiplier;
|
|
public int AdditionalRepeatCount => additionalRepeatCount;
|
|
public IReadOnlyList<SkillEffect> CastStartEffects => castStartEffects;
|
|
public IReadOnlyList<SkillGemTriggeredEffectEntry> TriggeredEffects => triggeredEffects;
|
|
}
|
|
}
|