NavMesh의 AgentTypeID가 직관적이지 않은 경우
문제점
NavMesh의 공식 확장인 NavMeshComponents의 샘플을 만졌을 때 발생했습니다.Examples/Scenes/5_sliding_window_terrain
라는 장면은, NavMeshBuilder
클래스를 사용하는 것으로 Agent의 주위에 런타임에 동적으로 NavMesh 를 작성할 수 있는 예를 나타내고 있습니다만, AgentType 가 Humanoid
의 Agent 밖에 존재하지 않았기 때문에 , 여기에 새로운 AgentType 를 추가하면 어떻게 될까 하는 기분이 되어, 시도해 보기로 했습니다.
AgentTypes는 본 목적으로 매우 Enum입니다. 실제 기본값으로 설정된 Humanoid
라는 AgentType에 해당하는 ID는 0
입니다.
Examples/Scripts/LocalNavMeshBuilder.cs// 60行目
var defaultBuildSettings = NavMesh.GetSettingsByID(0);
그래서, Humanoid
밑에 있는 Ogre
에 대응하는 ID 는 하나 증분되어 1
가 되는 것이라고 생각하네요. 그래서 위의 스크립트 ID를 1
로 다시 쓰고 장면의 Agent를 Orge로 설정했지만 Failed to create agent because it is not close enough to the NavMesh
라는 경고가 표시되어 제대로 작동하지 않았습니다.
조사한 결과, Ogre
에 대응하는 NavMesh가 올바르게 작성되지 않은 것을 알았고, Ogre
에 대응하는 AgentTypeID가 1
가 아닌 것인지를 알았습니다.
해당 AgentTypeID를 얻는 방법
여러가지 시도해 보았습니다만, 최종적으로 이하의 방법으로 AgentType 에 대응하는 ID 를 알 수 있습니다. 사전 형식으로 저장하면 언제든지 AgentType 이름에서 ID를 얻을 수 있습니다.
(회전 쓰는 방법으로 되어 있는 것은 딱 좋은 API가 없었기 때문입니다)
Dictionary<string, int> agentTypeIdDict = new private Dictionary<string, int>();
for (var i = 0; i < NavMesh.GetSettingsCount(); i++)
{
var id = NavMesh.GetSettingsByIndex(i).agentTypeID;
var name = NavMesh.GetSettingsNameFromID(id);
agentTypeIdDict.Add(name, id);
}
여기에서 얻은 ID를 지정하면 경고가 사라지고 Ogre
Agent도 올바르게 작동했습니다.
마지막으로
결과적으로 자신의 환경에서 Ogre
에 해당하는 ID 는 -1372625422
이었습니다! 전혀 예상과 달랐어요! ! ! ! !
Reference
이 문제에 관하여(NavMesh의 AgentTypeID가 직관적이지 않은 경우), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hinoboru/items/af9a363d8383c6ef0860
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// 60行目
var defaultBuildSettings = NavMesh.GetSettingsByID(0);
여러가지 시도해 보았습니다만, 최종적으로 이하의 방법으로 AgentType 에 대응하는 ID 를 알 수 있습니다. 사전 형식으로 저장하면 언제든지 AgentType 이름에서 ID를 얻을 수 있습니다.
(회전 쓰는 방법으로 되어 있는 것은 딱 좋은 API가 없었기 때문입니다)
Dictionary<string, int> agentTypeIdDict = new private Dictionary<string, int>();
for (var i = 0; i < NavMesh.GetSettingsCount(); i++)
{
var id = NavMesh.GetSettingsByIndex(i).agentTypeID;
var name = NavMesh.GetSettingsNameFromID(id);
agentTypeIdDict.Add(name, id);
}
여기에서 얻은 ID를 지정하면 경고가 사라지고
Ogre
Agent도 올바르게 작동했습니다.마지막으로
결과적으로 자신의 환경에서 Ogre
에 해당하는 ID 는 -1372625422
이었습니다! 전혀 예상과 달랐어요! ! ! ! !
Reference
이 문제에 관하여(NavMesh의 AgentTypeID가 직관적이지 않은 경우), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hinoboru/items/af9a363d8383c6ef0860
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(NavMesh의 AgentTypeID가 직관적이지 않은 경우), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hinoboru/items/af9a363d8383c6ef0860텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)