타워 공격 시 공격 시점 및 대상을 알 수 있는 이펙트 추가(임시)
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
using System.Collections;
|
||||||
using Unity.Netcode;
|
using Unity.Netcode;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
@@ -12,6 +13,20 @@ namespace Northbound
|
|||||||
[Tooltip("탐지할 레이어")]
|
[Tooltip("탐지할 레이어")]
|
||||||
public LayerMask targetLayer = ~0;
|
public LayerMask targetLayer = ~0;
|
||||||
|
|
||||||
|
[Header("Beam Effect")]
|
||||||
|
[Tooltip("빔 효과 LineRenderer 프리팹 (없으면 자동 생성)")]
|
||||||
|
public LineRenderer beamPrefab;
|
||||||
|
[Tooltip("빔 색상")]
|
||||||
|
public Color beamColor = Color.red;
|
||||||
|
[Tooltip("빔 시작 너비")]
|
||||||
|
public float beamStartWidth = 0.1f;
|
||||||
|
[Tooltip("빔 끝 너비")]
|
||||||
|
public float beamEndWidth = 0.05f;
|
||||||
|
[Tooltip("빔 표시 시간")]
|
||||||
|
public float beamDuration = 0.15f;
|
||||||
|
[Tooltip("빔 발사 위치 (null이면 건물 중심)")]
|
||||||
|
public Transform firePoint;
|
||||||
|
|
||||||
[Header("Debug")]
|
[Header("Debug")]
|
||||||
[Tooltip("디버그 정보 표시")]
|
[Tooltip("디버그 정보 표시")]
|
||||||
public bool showDebugInfo = true;
|
public bool showDebugInfo = true;
|
||||||
@@ -19,6 +34,8 @@ namespace Northbound
|
|||||||
private Building _building;
|
private Building _building;
|
||||||
private ITeamMember _teamMember;
|
private ITeamMember _teamMember;
|
||||||
private float _lastAttackTime;
|
private float _lastAttackTime;
|
||||||
|
private LineRenderer _beamRenderer;
|
||||||
|
private Coroutine _beamCoroutine;
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
@@ -128,8 +145,15 @@ namespace Northbound
|
|||||||
|
|
||||||
if (damageable != null)
|
if (damageable != null)
|
||||||
{
|
{
|
||||||
|
// 빔 시작점 계산
|
||||||
|
Vector3 beamStart = firePoint != null ? firePoint.position : transform.position + Vector3.up * 2f;
|
||||||
|
Vector3 beamEnd = closestEnemy.transform.position + Vector3.up * 1f; // 타겟 중앙
|
||||||
|
|
||||||
damageable.TakeDamage(attackDamage, NetworkObjectId);
|
damageable.TakeDamage(attackDamage, NetworkObjectId);
|
||||||
_lastAttackTime = Time.time;
|
_lastAttackTime = Time.time;
|
||||||
|
|
||||||
|
// 모든 클라이언트에 빔 효과 표시
|
||||||
|
ShowAttackBeamClientRpc(beamStart, beamEnd);
|
||||||
|
|
||||||
var targetTeam = closestEnemy.GetComponent<ITeamMember>() ??
|
var targetTeam = closestEnemy.GetComponent<ITeamMember>() ??
|
||||||
closestEnemy.GetComponentInParent<ITeamMember>() ??
|
closestEnemy.GetComponentInParent<ITeamMember>() ??
|
||||||
@@ -148,6 +172,69 @@ namespace Northbound
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region Beam Effect
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 빔 효과를 모든 클라이언트에 표시
|
||||||
|
/// </summary>
|
||||||
|
[ClientRpc]
|
||||||
|
private void ShowAttackBeamClientRpc(Vector3 start, Vector3 end)
|
||||||
|
{
|
||||||
|
if (_beamCoroutine != null)
|
||||||
|
{
|
||||||
|
StopCoroutine(_beamCoroutine);
|
||||||
|
}
|
||||||
|
_beamCoroutine = StartCoroutine(ShowBeamCoroutine(start, end));
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerator ShowBeamCoroutine(Vector3 start, Vector3 end)
|
||||||
|
{
|
||||||
|
// LineRenderer 초기화
|
||||||
|
if (_beamRenderer == null)
|
||||||
|
{
|
||||||
|
InitializeBeamRenderer();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_beamRenderer != null)
|
||||||
|
{
|
||||||
|
_beamRenderer.enabled = true;
|
||||||
|
_beamRenderer.SetPosition(0, start);
|
||||||
|
_beamRenderer.SetPosition(1, end);
|
||||||
|
|
||||||
|
yield return new WaitForSeconds(beamDuration);
|
||||||
|
|
||||||
|
_beamRenderer.enabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void InitializeBeamRenderer()
|
||||||
|
{
|
||||||
|
if (beamPrefab != null)
|
||||||
|
{
|
||||||
|
// 프리팹 사용
|
||||||
|
GameObject beamObj = Instantiate(beamPrefab.gameObject, transform);
|
||||||
|
_beamRenderer = beamObj.GetComponent<LineRenderer>();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 자동 생성
|
||||||
|
GameObject beamObj = new GameObject("AttackBeam");
|
||||||
|
beamObj.transform.SetParent(transform);
|
||||||
|
_beamRenderer = beamObj.AddComponent<LineRenderer>();
|
||||||
|
|
||||||
|
// 기본 설정
|
||||||
|
_beamRenderer.positionCount = 2;
|
||||||
|
_beamRenderer.startWidth = beamStartWidth;
|
||||||
|
_beamRenderer.endWidth = beamEndWidth;
|
||||||
|
_beamRenderer.material = new Material(Shader.Find("Sprites/Default"));
|
||||||
|
_beamRenderer.startColor = beamColor;
|
||||||
|
_beamRenderer.endColor = beamColor;
|
||||||
|
_beamRenderer.enabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
private void OnDrawGizmos()
|
private void OnDrawGizmos()
|
||||||
{
|
{
|
||||||
if (_building == null || _building.buildingData == null) return;
|
if (_building == null || _building.buildingData == null) return;
|
||||||
|
|||||||
Reference in New Issue
Block a user