2014년 7월 19일 토요일

게임샐러드 공부 중단!!

이전에 올린 글에서 게임샐러드가 화면 밖으로 나간 액터(오브젝트)를 임의로 삭제한다고 적고 그 범위를 구해봤다.

신기하게 모바일이나 PC나 사이즈는 동일하다.
변경할수 있는 방법도 없는것 같다.

횡스크롤 액션게임을 만든다고 했을때 이는 큰 문제를 발생시킨다.
물론 일일이 저장하고 불러오는 방법을 강구 할 수는 있겠지만,
다른 엔진에 비해 너무 번거롭다.

화면이 움직이지 않는게임을 만든다 하여도, 부모자식 개념이 없어서, 스폰명령을 이용한 복제 액터(오브젝트)들의 컨트롤이 너무 어려워 진다.

물론 간단한 게임을 만든다면, 충분히 써먹을 수 있겠지만, 내가 하고픈거랑은 방향성이 다르다.

게임샐러드에 적당한 게임을 만든다면 모르겠지만 지금은 아니다.
그간 잠시 손 놓았던 유니티엔진을 다시 만져 봐야겠다.

그런데 게임샐러드의 '비헤이비어'개념은 상당히 좋았다.
다른개임엔지에서도 이를 유념한다면, 좋은구조를 짤 수 있을것 같다.

백수가 됐다.

아~~ 이나이 먹고 다시 백수가 될줄이야.. ㅋㅋ

약 4년동안 열심히 달렸으니 이젠 조금 쉬면서 공부도 하고,
그간 묶여있던것 정리도 하고,
해야겠다.

2014년 7월 2일 수요일

게임샐러드 지원 기기의 해상도와 액터의 삭제되는 범위

지원 기기의 해상도

iPhone Landscape (X : 568, Y : 320)
iPhone Portrait (X : 320, Y : 568)

iPad Landscape (X : 1024, Y : 768)
iPad Portrait (X : 768, Y : 1024)

Nook color Landscape (X : 1024, Y : 600)
Nook color Portrait (X : 600, Y : 1024)

Kindle Fire Landscape (X : 1024, Y : 580)
Kindle Fire Portrait (X : 600, Y : 1004)

GameSalad Arcade (X : 480, Y : 320)
720 HD Fullscreen (X : 1280, Y : 720)
MacBook Fullscreen (X : 1280, Y : 800)

Legacy iPhone Landscape (X : 480, Y : 320)
Legacy iPhone Portrait (X : 320, Y : 480)
Legacy Web Game (X : 720, Y : 480)

액터의 삭제 되는 범위

기기및 해상도와는 관계 없이
X축 -500 ~1780사이를 벗어나면 액터가 삭제 된다.
Y축 -500 ~ 1300사이를 벗어나면 액터가 삭제 된다.

상당히 신기한것이 스크린의 사이즈와는 관계 없이 동알한 범위를 벗어나면 액터가 삭제된다.
유동적으로 사용자가 변경할 수 있는 방법이 있으면 좋겠지만 그런명령은 없는것 같고, 사용자가 삭제되기 전에 저장했다가 다시 범위내로 들어오면 불러와야 한다.

2014년 6월 28일 토요일

여주인공


MDA girl from Nlbo75 on Vimeo.

한달쯤 전에 지인으로 부터 부탁받은 작업이다.
작업량도 많지는 않아서, 리깅에서 이것 저것 테스트를 해본 작업이다.
기존보다는 면수가 많아서 조금더 애니메이션 할맛이 났다.

2014년 6월 27일 금요일

자주 이용되는 맥스 스크립트 사용

in coordsys local rotate MountLEar (EulerAngles 180 0 90)
-로컬축으로 회전하기

$'Bip01_Breast'.rotation.controller.value =
-회전시킬 때 포지션 값이 변동되지 않게
setUserPropBuffer $ ("\r\nNiOptimizeKeep\n")
-유저디파인에 문자남기기

MountLUpperArm.rotation = (inverse (biped.getTransform $'Bip01 L Clavicle' #rotation))
-쇠골뼈같은경우 축맞추기(이렇게 하지 않으면 이상하게 틀어짐)

$.pos.controller=Position_XYZ()
-해당 오브젝트의 콘트롤러 변경
$.transform.controller.Biped_SubAnim.controller.BipScaleList.controller.Available.controller = bezier_Scale ()
- 해당 오브젝트의 콘트롤러 변경 (바이패드오브젝트는 요렇게 바꾸고 추가를 함)

if(matchPattern (((getNoteTrack $'bip01' 1).keys)[i].value) pattern:"start -*" == true) do
-문자열검색

firePointName = filterstring KeysValue[j] ":"
-문자열 분리 하여 저장

$bip01.controller.enableSubAnims = true
-망할 썹애니 플래그

a = selection as array
- 선택한 오브젝트를 변수에 넣기

aPos = nodeGetBoundingBox $ $.transform
bipLength = aPos[2].x
-해당축으로의 오브젝트길이 구하기(바이패드길이 구할 때 용이)


selObj = selection as array
- 선택한 모든오브젝트를 변수에 저장


selObj = $* as array
- 존재하는 모든 오브젝트를 변수에 저장


exptFileName = getFilenameFile maxFileName
- 'maxFileName' 명령의 경우 확장자명까지 받아 오는데  'getFilenameFile'로 한번더 걸러주면 정확히 파일명만을 얻는다.(replace maxFileName (maxFileName.count - 3) 4 ""와 같이 어렵게 하지 않아도 된다 ㅠ,.ㅠ)

biped.setTransform $ #pos [0,-6.3386,97.4567] off
- 바이패드의 위치값 수정 off는 애니메이션 키생성 옵션(on이면 키생성)

degToRad -74.145
- 와이어파라메타 같은 것을 사용할 때 회전값을 라디안 단위로 변환

2014년 6월 19일 목요일

게임샐러드팁2

액터간의 부모자식 만들기

게임샐러드는 링크(마운트,어테치,그룹 등등)의 개념이 없다.
그래서 작업자가 비슷한 것을 직접 만들어 주어야 한다.
방법은 다음과 같다.
-------------------------------------
Constrain Attribute를 이용해
'자신의 위치 X축' to '자식과의 거리 * cos(부모의 회전값+ 부모의 정면을 기준으로 위치각)

Constrain Attribute를 이용해
'자신의 위치 Y축' to '자식과의 거리 * sin(부모의 회전값+ 부모의 정면을 기준으로 위치각)

Constrain Attribute를 이용해
'자신의 회전각 to 부모의 회전각'
-------------------------------------

여기서 '부모의 정면을 기준으로 위치각'이란것은 자식이 항상 부모의 정면쪽에 붙어있는 경우는 없다.
비행기의 날개의 경우도 몸통의 좌우(90/270의 각도)에 부터있다.
이것의 각도를 뜻하는 것이다.


게임샐러드 팁1

멈추지 못하고 떨릴때.
액터의 Physics내의 Drag항목은 저항값을 의미한다.
문제는 Accelerate Behavior를 사용하거나 액터의 Linear Velocity항목에 값을 입력하여 움직였을때 Drag에 의해 Linear Velocity값이 0이 되야 하는데
4~-4값정도(확실하지는 않다) 왔다갔다하며 조금씩 움직인다.

이때 해결방법은
Linear Velocity의 X축 Y축의 값이 모두 5~-5가되면
Drag를 Change Attribute Hehavior를 사용해 0으로 변경하고
Linear Velocity의 X축 Y축의 값을 Constrain Attribute를 사용해 0으로 변경한다.




방향키를 이용해 이동할때.
방향 Key값을 이용하여 오브젝트를 움직일때 가끔 움직임이 멈출경우가 있다.
Boolean으로 키입력의 참거짓을 정의하고, 그값을 이용하여 움직이게 한다.
그리고 회전의 경우는 Rotate Behavior를 사용하면 빠른 키전환시 멈추는경우가 있는데, 이는 액터의 Rotation값을 Constrain Attribute를 사용해 직접 변경하면 된다.