feat: 아군 타게팅 시스템 구현 — SingleAlly 투사체형 치유/보호막

- 치유/보호막 스킬을 즉발 자가시전에서 투사체형 아군 1인 타겟팅으로 전환

- TargetType.SingleAlly 추가, targetOverride 매개변수로 외부 타겟 주입 지원

- PlayerSkillInput: 카메라 레이캐스트 기반 아군 탐지, 서버 검증, RPC 타겟 ID 전달

- AllyTargetIndicator: 호버 아군 위에 디스크 인디케이터 표시, 사거리/초과 색상 변경

- SpawnEffect: 타겟 방향 회전 보정

- 투사체 스폰 이펙트 에셋 생성 (치유/보호막 각각)

- 인디케이터 프리팹 + URP/Unlit 머티리얼 생성

- Player 프리팹에 AllyTargetIndicator 컴포넌트 추가 및 설정

- Input.mousePosition → Mouse.current.position.ReadValue() 수정 (Input System 호환)
This commit is contained in:
2026-03-31 23:06:13 +09:00
parent 2c6a65d406
commit 106e53c9aa
22 changed files with 6779 additions and 112 deletions

View File

@@ -13,7 +13,7 @@ namespace Colosseum.Skills
public abstract class SkillEffect : ScriptableObject
{
[Header("대상 설정")]
[Tooltip("Self: 시전자, Area: 범위 내 대상")]
[Tooltip("Self: 시전자, Area: 범위 내 대상, SingleAlly: 아군 1인 (외부에서 타겟 주입)")]
[SerializeField] protected TargetType targetType = TargetType.Self;
[Header("Area Settings (TargetType이 Area일 때)")]
@@ -49,10 +49,10 @@ namespace Colosseum.Skills
/// <summary>
/// 스킬 시전 시 호출
/// </summary>
public void ExecuteOnCast(GameObject caster)
public void ExecuteOnCast(GameObject caster, GameObject targetOverride = null)
{
List<GameObject> targets = new List<GameObject>();
CollectTargets(caster, targets);
CollectTargets(caster, targets, targetOverride);
for (int i = 0; i < targets.Count; i++)
{
@@ -64,7 +64,7 @@ namespace Colosseum.Skills
/// 현재 효과가 영향을 줄 대상 목록을 수집합니다.
/// 젬의 적중 이상상태 적용 등에서 동일한 타겟 해석을 재사용하기 위한 경로입니다.
/// </summary>
public void CollectTargets(GameObject caster, List<GameObject> destination)
public void CollectTargets(GameObject caster, List<GameObject> destination, GameObject targetOverride = null)
{
if (caster == null || destination == null)
return;
@@ -78,6 +78,13 @@ namespace Colosseum.Skills
case TargetType.Area:
CollectAreaTargets(caster, destination);
break;
case TargetType.SingleAlly:
if (targetOverride != null && IsCorrectTeam(caster, targetOverride))
AddUniqueTarget(destination, targetOverride);
else
AddUniqueTarget(destination, caster);
break;
}
}
@@ -275,7 +282,8 @@ namespace Colosseum.Skills
public enum TargetType
{
Self,
Area
Area,
SingleAlly
}
public enum TargetTeam