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할거냐고 묻는데 한다고 하면 모두 변경된다.