지금 판다와 3dmax를 이용한 3d맵을 제작중입니다.
쉐이드가 이상할 거라고 조금은 예상했는데..
뼈대만 생길뿐 배경이 전부 엉망으로 나와요..
그래픽 맵핑이 전혀 입혀지지 않은 상태로 나타나고 있습니다.
그리고 샘플에있는 랄프를 보면서 이동과 충돌에 대한 공부를 하면서..
충돌은 자동으로 표현되는건 알겠는데..
캐릭터가 이동이 전혀 되지 않아요..
그냥 제자리에서 빙글빙글 돌기만? 앞으로 이동이 전혀 안되거든요..
이거 수정할 방법이 없는건가요?? 졸업이 걸려있어요..ㅠㅠ
1. 우선 Ralph가 움직이지 않는건 튜토리얼에서 사용된 지형 데이터와 실제 사용하신 지형 데이터의 구조가 달라서 그래요.
원래의 튜토리얼에서는 CollisionRay와 충돌한 지오메트리가 땅이면 이동하고, 나무나 돌 같은 것이면 이동하지 않게 되어 있거든요.
그래서, 다음과 같이 충돌된 지오메트리의 이름이 'terrain'인지 확인하지요.
if (len(entries)>0) and (entries[0].getIntoNode().getName() == "terrain"):
하지만, 사용하신 kkkk.egg라는 파일은 아래와 같은 구조를 가졌는데, 실제로 ray와 충돌하는 geomNode엔 아예 이름이 없지요.
그러니까, 계속 무언가에 부딛혔다고 판단해서 움직이지 않는 겁니다.
PandaNode models
ModelRoot kkkk.egg
Character character
GeomNode (181 geoms: S:(ColorAttrib))
지금 데이터를 그대로 사용하면서 '억지로' 움직이게 하려면,
if (len(entries)>0) and (entries[0].getIntoNode().getName() == "terrain"):
위와 같이 된 부분들을
if (len(entries)>0) and (entries[0].getIntoNode().getParent(0).getName() == "character"):
라고 고치시면 움직이긴 할텐데요. 이때의 문제점은 바닥면과 나무, 건물등이 구분이 안되어서 이상하게 움직이게 될거에요.
이 문제를 해결하시려면, 맥스안에서 바닥면 지오메트리의 이름을 terrain이라고 주시고,
egg로 컨버트하실 때, 따른 지오메트리와 구분이되어 컨버트가 되게 세팅을 하셔야 할 겁니다.
2. 텍스쳐가 로드되지 않는건 텍스쳐 패스의 문제인데요,
egg 파일을 열어보면
텍스쳐 파일의 경로들이
../../ÀÌÁØÇÑ/Documents/3dsMax/sceneassets/images/FA24FC~1.bmp
/x/03-[¹è°æ]/00-[¹é¾÷ÀÛ¾÷¹°]/[È«Äá]/ÀÌÁ¾È£/³ª¹«4Á¾·ù/BO_HK_S_A_17_06(³ª¹«)/BOT_TK_S_A_17_01_BS_DOWN.bmp
와 같이 되어 있는데요,
우선 한글이 사용된 경로가 제대로 컨버트되지 않을 수 있으니까, 텍스쳐 파일들을 모두 같은 디렉토리에 넣고 컨버트하시는것이 좋겠구요.
최종적으로 컨버트된 egg파일과 텍스쳐파일의 위치가 동일하도록 하셔야 합니다.
egg파일은 ascii 파일이니까 텍스트 에디터에서 오픈하셔서 잘못된 경로들을 고쳐주시고, 필요한 파일들을 같은 디렉토리에 넣으셔도 되겠지요.
안녕하세요 게도님...
말씀해주신대로 다 했는데...
처음에 한거처럼 움직임이 전혀 없어요..
필드랑 따로따로 했는데 이름도 terrain으로 바꿔주고..
혹시 다른방법은 없나요?
다시 보내주신 egg 파일에도 여전히 character라는 상위 노드가 존재하고, 그 밑에 terrain이 들어있네요.
혹시, egg로 컨버팅할 때 animation시킬 수 있는 character로 컨버팅하신 것 아닌가요? 이런 배경은 model로만 컨버팅하셔야 하는데.
보내주신 egg 파일 잘 봤구요,
1. 우선 static으로 변환시키는 것이 맞는 것 같네요.
2. 보니까 모델이 대충 이런 식의 hierarchy를 갖고 있는데요,
<Group> "Àå¸é ·çÆ®" {
<Group> road {
<Group> 55field {
<Group> terrain {
<Group> Box2284 {
<Group> Box2283 {
<Group> Box2282 {
<Group> Box2281 {
<Group> Box2280 {
<Group> Box2279 {
이렇게 하시려면 script에서 terrain을 다 road라고 바꾸셔야 하는거구요. (그걸 의도하신 건지 모르겠지만)
참고하신 roaming-ralph 스크립트는 collision ray가 부딛힌 첫번째 geometry의 이름을 체크해서 움직이는거니까 만약 이 raod라는 그룹밑에 속한 지형들 위로는 ralph가 움직이게 하실거라면 이렇게 하면 되겠죠. 그리고, 저 Box라고 이름 붙은 애들에 부딛히면 멈추게 되구요.
2. 첨부한 그림과 같은 gap이 있으면 프로그램이 에러를 내면서 멈추게 되어 있습니다. 저 gap 부분에선 collision ray가 부딛힐 수 없으니까요.
road terrain 55field 이렇게 다 적어도 안 움직여요 다시봐주시면 안될까요? ㅠㅠ
egg파일은 다시 수정해서 그걸로 보내드릴께요..
이번엔 egg 파일안에 terrain이라는 그룹을 밖으로 빼내셨네요. 그러니, collision이 일어난 노드의 parent의 이름을 체크하는 아래의 루틴으로는 동작을 안하죠.
if (len(entries)>0) and (entries[0].getIntoNode().getParent(0).getName() == "terrain"): 이걸if (len(entries)>0) and (entries[0].getIntoNode().getName() == "terrain"): 이렇게 고치셔야 합니다.
흐악...이제 필드에서 이동은 잘되는데 건물안에 돌아다니는게 문제네요 ㅠㅠ 건물안에 돌아다닐곳 밑에 깔린 오브젝트들 지오메트리쪽에 다 추가했는데
위에 떠 있는 오브젝트들때문에 건물안에 못들어가요 ㅠㅠ 어케해야되는거에요? ㅠㅠ

텍스쳐가 입혀지지 않는 건 에러메시지나 그런건 없구요?
캐릭터가 이동이 되지 않는 python 스크립트를 좀 보여주시고,
좀 정보를 더 주세요 ^^;