2014년 9월 15일 월요일

여자 쌍단검 10연타 (예전 백업데이타를 뒤져보니.....2)


female At01 from Nlbo75 on Vimeo.

예전에 아시는 분이 급하다며 하루안에 10콤보 모션을 2개 잡아달라고 해서 작업한 모션중에 하나.
그당시에는 일본식의 딱딱한 모션에 빠져있을때라 모션을 딱딱하게 잡았었다.
이동영상은 너무 딱딱한 부분을 살짝 손본 결과물이다.

타이페로 여자 아바타(예전 백업데이타를 뒤져보니.....1)


idle01 from Nlbo75 on Vimeo.



idle02 from Nlbo75 on Vimeo.



idle03 from Nlbo75 on Vimeo.



idle04 from Nlbo75 on Vimeo.



idle05 from Nlbo75 on Vimeo.



run from Nlbo75 on Vimeo.



sit from Nlbo75 on Vimeo.

아래에 있는 Boy와 같이 타이페로의 아바타중하나.

이 게임작업을 할때 일반게임보다 월등히 많은 감정표현 모션때문에,
기획을 담당하던 여자 기획자(당시 20대 초반의 꽃띠)가
참고 하라고 눈앞에서 춤도추고 동영상 촬영도 허가해준
신기한 경험을 하게 해주었다.
기획자 분께 감사의 묵념.(지금은 시집갔다는 풍문이 있다.)

이작업물의 모든 권리는 엔도어즈에 있습니다.

2014년 8월 26일 화요일

이전회사 작업물

요기를 클릭.(짬짬이내용물을 계속 추가할 예정이다.)

마우스 왼버튼으로 화면을 돌리고, 휠버튼으로 줌인 줌아웃을 할수 있다.


유니티뷰어를 설치하라거나 화면 하단에 노란 박스가 뜨면서 승인하라면 승인 해주자.

이전회사 작업물을 유니티로 구성해봤다.
(물론 이전회사는 유니티 엔진을 사용하지 않았다. 만드느라 골치좀 아팠다.)

액션 게임 이다 보니 동작들이 상당히 프레임에 쪼들리는 현상이 보인다.
프레임을 쪼개 쓰는것에대해 많은것을 배웠다.
(회사를 그만둔 후에는 유니티도 많이 배우게 해주었다 ㅋㅋ)

2014년 8월 17일 일요일

유니티 c# 공부

이동
transform.position = new Vector3(float, float, float);
- 절대좌표를 기준으로 위치시킴(순간이동)

transform.translate(new Vector3(float, float, float));
- 상대좌표를 기준으로 위치시킴(매 프레임마다 값만큼 이동)


회전
transform.rotation = Quaternion.Euler(float, float,  float);
- 절대좌표를 기준으로 회전시킴(순간 회전)

transform.Rotate(float, float, float);
- 상대좌표를 기준으로 회전시킴(매 프레임마다 값만 큼 회전)


프레임 고정
1) 'Edit -> Project Settings -> Time'을 선택 후 'InsPector'에서 'Fixed Timestep'값을 '0.01666667'로 하면 60프레임으로 고정.(30프레임은 '0.03333333'로 하면됨.)
단 'void Update ()'대신 'void FixedUpdate ()'를 사용해야 함.

2) 'Void Start ()'또는 'void Awake ()' 같이 시작시 한번 작동하는 함수에서 'Time.captureFramerate = 60;'를 적으면 디스플레이되는 프레임이 강제로 60프레임으로 변경.(30을 적으면 30프레임이 됨.)


동적배열
'string [][] frameForPosition;'로 2차원배열을 선언한 후.
'frameForPosition = new string[posInfo.Length][];'
'frameForPosition[i] = new string[posInfoTextSplit.Length];'과 같이 'new string'를 사용하여 배열의 길이를 선언.

00
000
0
0000
00
같은 형식으로 배열이 동적으로 할당됨.

예)
frameForPosition = new string[posInfo.Length][];

for(int i=0; i<posInfo.Length; i++)
{
posInfoTextSplit = posInfo[i].text.Split('\n');
frameForPosition[i] = new string[posInfoTextSplit.Length];

for(int j=0; j<posInfoTextSplit.Length; j++)
{
frameForPosition[i][j] = posInfoTextSplit[j];
}
}


텍스트형태의 파일 받기
'public TextAsset[] posInfo;'로 선언 후
'posInfo[0] = (TextAsset)Resources.Load("Txt/wp045_samba/wp045_samba_101_MOVE");'
로 스크립트에서 불러온다.(단 텍스트에셋은 'Resources'폴더 아래 있어야 한다.)


애니메이션 끝까지 출력하기
1)
 IEnumerator wait( float sec )
{
yield return new WaitForSeconds(sec);
        ableKeyInput = true;(키입력을 받을 수 있는지를 확인하는 Flag)
} 함수를 만든 후

if (Input.GetButtonDown("AKey"))
{
ableKeyInput = false;
animation.CrossFade("2D_TEST_GUARD", 0);
StartCoroutine(wait(animation["2D_TEST_GUARD"].clip.length));
}
을 하면 간단하게 ableKeyInput 가 true로 변경 될때 까지 다른 키 입력을 받지 못한다.
단 이경우 애니메이션 분기가 있는경우 사용되지 못한다.

2)
if((animation.IsPlaying("wp045_samba_301_STAN"))||(animation.IsPlaying("wp045_samba_302_GRD"))||(!animation.isPlaying))
{
.
.
.
} 과 같이 특정 모션이 '참'이거나 '거짓'일경우 함수 안으로 들어가지 못하게 하는 방식이 있다.
애니메이션에 분기를 넣고 싶으면 애니메이션에서 이벤트를 넣어 void 함수를 불러 오도록 한다.


플레이되는 애니메이션의 현재시간 구하기
(animation[aniname].time)
(System.Convert.ToInt32((animation[aniname].time)*60.0f)) 이렇게 덧붙이면, 시간을 프레임으로 변경할 수 있다.
단 FixedUpdate를 사용하고 'Fixed Timestep'값을 '0.01666667'로 할것.


키입력
Input.GetKey
- 키가 눌려지는 동안

Input.GetKeyDown
- 키가 눌릴때

Input.GetKeyUp
- 키를 눌렀다 뗀 후

Input.GetButton
- 키(키이름이 정의된 키셋팅에 해당하는 키)가 눌려지는 동안

Input.GetButtonDown
- 키(키이름이 정의된 키셋팅에 해당하는 키)가 눌릴때

Input.GetButtonUp
- 키(키이름이 정의된 키셋팅에 해당하는 키)를 눌렀다 뗀 후

예)
if(Input.GetKey("left"))
if(Input.GetButton("dashKey"))

GetKey와 GetButton의 차이
- GetKey는 키보드의 키를 직접 나타내고
- GetButton는 Edit-> Project Settings->Input에서 정의된 키의 네임을 나타냄.


맥스에서 읽은 텍스트 파일을 인식하지 못할때.
MonoDevelop의 문제인지 유니티의 문제인지는 모르겠지만, 텍스트문서를 읽어 스트링으로 정장한 후 해당 스트링을 IF문으로 비교했을때 인식하지 못하는 경우가 있다.
이럴때는 텍스트 문서를 MonoDevelop에서 부른 후에 한글자를 지우고 다시 똑같이 적은 후 저장을 하면 Convert할거냐고 묻는데 한다고 하면 된다.
텍스트 파일이 많을 경우 모든 텍스트 파일을 MonoDevelop에서 연 후에 한개의파일만 수정하고 저장하면 모두 Convert할거냐고 묻는데 한다고 하면 모두 변경된다.

2014년 7월 19일 토요일

2DTest


2DTest from Nlbo75 on Vimeo.

처음으로 진행해본 2d 캐릭터 모션이다.
유니티에서 실시간으로 녹화를 뜬것인데,
겉보기에는 2d같지만 사실 플랜을 여러개 덧댄 3d다.
그래도 기본이 3d이다 보니 모션블랜딩도 먹고,
같은 노드형태를가지고 있다면, 애니메이션 공유도 되서 상당히 쓸만한 느낌이다.
아는 분이 '좀비빌리지'나 '배틀하트'같은 느낌을 내고 싶다고 해서 테스트 했다.
여러가지 덧 붙일것이 있지만, 어떤 형태로 작업을 해야 할지 방향을 제시해준 결과물이었다.

게임샐러드 공부 중단!!

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

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

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

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

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

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

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

백수가 됐다.

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

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