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할거냐고 묻는데 한다고 하면 모두 변경된다.
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일 토요일
게임샐러드 공부 중단!!
이전에 올린 글에서 게임샐러드가 화면 밖으로 나간 액터(오브젝트)를 임의로 삭제한다고 적고 그 범위를 구해봤다.
신기하게 모바일이나 PC나 사이즈는 동일하다.
변경할수 있는 방법도 없는것 같다.
횡스크롤 액션게임을 만든다고 했을때 이는 큰 문제를 발생시킨다.
물론 일일이 저장하고 불러오는 방법을 강구 할 수는 있겠지만,
다른 엔진에 비해 너무 번거롭다.
화면이 움직이지 않는게임을 만든다 하여도, 부모자식 개념이 없어서, 스폰명령을 이용한 복제 액터(오브젝트)들의 컨트롤이 너무 어려워 진다.
물론 간단한 게임을 만든다면, 충분히 써먹을 수 있겠지만, 내가 하고픈거랑은 방향성이 다르다.
게임샐러드에 적당한 게임을 만든다면 모르겠지만 지금은 아니다.
그간 잠시 손 놓았던 유니티엔진을 다시 만져 봐야겠다.
그런데 게임샐러드의 '비헤이비어'개념은 상당히 좋았다.
다른개임엔지에서도 이를 유념한다면, 좋은구조를 짤 수 있을것 같다.
신기하게 모바일이나 PC나 사이즈는 동일하다.
변경할수 있는 방법도 없는것 같다.
횡스크롤 액션게임을 만든다고 했을때 이는 큰 문제를 발생시킨다.
물론 일일이 저장하고 불러오는 방법을 강구 할 수는 있겠지만,
다른 엔진에 비해 너무 번거롭다.
화면이 움직이지 않는게임을 만든다 하여도, 부모자식 개념이 없어서, 스폰명령을 이용한 복제 액터(오브젝트)들의 컨트롤이 너무 어려워 진다.
물론 간단한 게임을 만든다면, 충분히 써먹을 수 있겠지만, 내가 하고픈거랑은 방향성이 다르다.
게임샐러드에 적당한 게임을 만든다면 모르겠지만 지금은 아니다.
그간 잠시 손 놓았던 유니티엔진을 다시 만져 봐야겠다.
그런데 게임샐러드의 '비헤이비어'개념은 상당히 좋았다.
다른개임엔지에서도 이를 유념한다면, 좋은구조를 짤 수 있을것 같다.
피드 구독하기:
글 (Atom)