레이블이 창고인 게시물을 표시합니다. 모든 게시물 표시
레이블이 창고인 게시물을 표시합니다. 모든 게시물 표시

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년 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
- 와이어파라메타 같은 것을 사용할 때 회전값을 라디안 단위로 변환