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.)