using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CSightVisualizer : MonoBehaviour
{
public float radius = 8;
private void OnDrawGizmos()
{
//탐지 범위 보여주기
//위치, 방향, 360도, 시야 3유닛
GizmosExtensions.DrawWireArc(this.transform.position, this.transform.forward,360,radius);
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using System.Linq;
public class PlayerController : MonoBehaviour
{
public MonsterController[] monsters;
List<MonsterDistance> monsterDistances; //몬스터와의 거리
CSightVisualizer cSightVisualizer;
void Start()
{
monsterDistances = new List<MonsterDistance>();
cSightVisualizer = GetComponent<CSightVisualizer>();
}
private void Update()
{
monsterDistances.Clear(); //거리 저장 초기화
// 시야 안에 있는 몬스터의 거리를 계산하여 리스트에 추가
foreach (MonsterController controller in monsters)
{
float distance = Vector3.Distance(transform.position, controller.transform.position);
if (distance <= cSightVisualizer.radius)
{
monsterDistances.Add(new MonsterDistance(controller.gameObject, distance));
}
}
// 거리를 기준으로 오름차순 정렬
monsterDistances = monsterDistances.OrderBy(md => md.Distance).ToList();
// 정렬된 몬스터와 거리 출력
//foreach (MonsterDistance md in monsterDistances)
//{
// Debug.LogFormat("<color=cyan>{0}</color> : {1}", md.Monster.name, md.Distance);
//}
// 가장 가까운 몬스터 찾기
MonsterDistance nearest = monsterDistances.FirstOrDefault();
// 가장 가까운 몬스터 출력
if (nearest.Monster != null)
{
//Debug.LogFormat("<color=yellow>가장 가까운 몬스터:</color> {0} : {1}", nearest.Monster.name, nearest.Distance);
Debug.DrawLine(this.transform.position, nearest.Monster.transform.position, Color.red, 0);
}
else
{
//Debug.Log("<color=yellow>가장 가까운 몬스터를 찾을 수 없습니다.</color>");
}
}
// 몬스터와 거리를 저장하기 위한 구조체
public struct MonsterDistance
{
public GameObject Monster { get; private set; }
public float Distance { get; private set; }
public MonsterDistance(GameObject monster, float distance)
{
Monster = monster;
Distance = distance;
}
}
}
'게임개발 > 게임플랫폼 응용 프로그래밍' 카테고리의 다른 글
시즈탱크 1단계 - 에러 수정전 (1) | 2024.02.29 |
---|---|
벌쳐 지뢰 매설하기 (0) | 2024.02.28 |
DropShip in BionicUnits (0) | 2024.02.28 |
Enum , List<> , Foreach 연습하기 (0) | 2024.02.28 |
가까운 적 따라가면서 없애기 (0) | 2024.02.28 |