Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 오브젝트 깜빡임
- Unity
- nav거리
- 유니티 해상도
- networkobject.networkid
- 몬스터
- m585 수리
- M590
- unity git
- 유니티 해상도 변경
- m585
- 유니티 브랜치 merge
- Github DeskTop Merge
- 깃허브 데스크탑 합치기
- 유니티 머지
- 깃허브 데스크탑 병합
- 유니티
- unity 병합
- m590 수리
- networkbehaviourid
- networkobject
- nav오브젝트사이거리
- 유니티 해상도 설정
- unity merge
- githubdesktopmerge
- stateauthority
- navigation
- 유니티 합치기
- NavMesh
Archives
- Today
- Total
집게사장의 꿈
[영혼들] 사운드 추격 본문
사운드 추격
몬스터는 기본적으로 사운드를 추격합니다.
사운드의 거리에 따라 추격 여부를 결정할 수 있어야 됩니다.
단, 사운드는 지역 사운드와 전역 사운드가 존재하며 몬스터의 우선 순위는 전역 사운드가 우선입니다.
기본 구조
사운드가 발생한 위치를 판단하기 위해 EventManger에서 필터링 후 몬스터에서 불러와 사용한다.
지역 사운드 발생 시
기존 사운드를 제거하고 새로운 사운드를 등록한다.
public bool EventSound(Transform _target, float _distance)
{
//글로벌 사운드가 존재할 경우 실행하지 않음.
if (GlobalSoundTarget != null) return false;
//기존 로컬 사운드 존재 시 실행하지 않음.
//if (LocalSoundTarget) return false;
//소리가 울려퍼지는 범위 _distance
//소리가 발생한 지점은 _target
if ((GetMonsterPosition() - _target.position).magnitude < (_distance* DataSet.Instance.GameDifficulty.SoundSensitivity))
{
//Debug.Log(string.Format($"EventSound :: 소리가 몬스터 감지범위에 탐지됩니다. {transform.name} :: {_distance}"));
//사운드 타겟 지정
LocalSoundTarget = _target;
//이전 딜레이 제거 후 사운드 실행
CancleLocalSoundDelay();
EventSoundTimeout = EventSoundCroutine();
StartCoroutine(EventSoundTimeout);
//Debug.Log("EventManager :: 일시적인 사운드 이벤트 발생 입력 성공");
return true; // 성공
}
return false;// 실패
}
//로컬 사운드가 지정되었을 때, 딜레이 후 사운드를 제거합니다.
IEnumerator EventSoundCroutine() // 이벤트 사운드 타겟 저장 시간 = 1초
{
yield return new WaitForSeconds(1);
LocalSoundTarget = null;
EventSoundTimeout = null;
//Debug.Log("EventMAnager :: 사운드 근원지 TimeOut 초기화");
}
전역 사운드 발생 시
같은 전역 사운드의 경우 사용하지 않으며, 다른 사운드의 경우 기존에 타겟으로 지정된 전역 사운드가 존재한다면 대기열에 등록해 둔다.
단, 전역 사운드의 파괴 시 등록을 제거합니다.
//전역사운드를 지정합니다.
public void ActiveTheHightestPrioritySound(ObjectInfo obj)
{
// 기존 오브젝트에 존재하면 비활성화
if (FindObject(obj.Name)) return;
CancleLocalSoundDelay();//로컬 사운드 딜레이가 있을 경우 제거
//이미 있을 경우 단순히 추가
if (objInfo.Count > 0)
{
objInfo.Add(obj);
}
//아무것도 없을 경우 타겟설정
else
{
GlobalSoundTarget = obj.Trans;
objInfo.Add(obj);
}
}
//글로벌 사운드를 꺼낸다.
public void DeActiveTheHightestPrioritySound(ObjectInfo obj)
{
//Debug.Log($"사운드 오브젝트 비활성화 시작 {objInfo.Count}");
//만약 오브젝트가 존재한다면, 같은 이름의 오브젝트를 제거한다.
for (int i = 0; i < objInfo.Count; i++)
{
if (objInfo[i].Name.Equals(obj.Name))
{
objInfo.RemoveAt(i);
//Debug.Log($"사운드 오브젝트 비활성화 완료 {objInfo.Count}");
break;
}
}
//오브젝트가 존재하면 다름 오브젝트를 타겟으로 지정한다.
if (objInfo.Count > 0)
{
GlobalSoundTarget = objInfo[0].Trans;
//Debug.Log("새로운 전역 사운드로 대체한다!!");
}
//저장된 전역 사운드가 없다면 지정을 해제한다.
else
{
GlobalSoundTarget = null;
//Debug.Log("새로운 전역 사운드로 없다!!!");
}
}
플레이 영상
설명
첫 장면에서는 오르골[전역 사운드]을 활성화 시킴으로서, 몬스터가 추적을 시작
그 다음으로 플레이어의 점프 사운드[지역 사운드]가 몬스터의 추격 범위에 식별되어 추격을 시작
+추적 로직
'제작 > 영혼들' 카테고리의 다른 글
[영혼들] 아이템 표시 (0) | 2024.08.02 |
---|---|
[영혼들] 씬 불러오기 (0) | 2024.08.02 |
[영혼들] 컬라이더로 맵에서 플레이어의 위치 찾기 (0) | 2024.08.02 |
[영혼들] 아이템 상호작용 (0) | 2024.08.02 |
[영혼들]아이템 - 오르골 (0) | 2023.11.04 |