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