Clolent


※ 부모에 접근하기 현재.parent.Getcomponent<>


※ 유니티 스크립트상 함수에서 불필요한 부분은 최대한 하지않고, 빠져나가는 것이 성능 향상에 좋다.


※ 함수 등의 커서 놓고 F12 누르면 정의부로 날라갈수있음


내가 겪었던 애니메이션이 Legacy 안되있는거 해결법

탭 메누에서 Noraml 로 되어있을 것을 Debug 모드로 가서 Legacy 를 체크해주면 된다. 


실행 화면에 상태 같은것을 띄우기 ! OnGUI() 함수

GUI. 으로 이것저것 접근이 가능한데 첽이 다달았을때, You Are Dead  체력이 남아있을땐 체력이 표시되게하는 코드이다.


void OnGUI()

    {

        float x = (Screen.width / 2.0f) - 100;    ※ Screen.width 로 현재 화면의 크기에 대한 값을 가져올수 있다.


        Rect rect = new Rect(x, 10, 200, 25);  ※ 사각형을 만들어주는 코드이다, ( 가로위치,세로위치, Width,Height ) 

        if (isDead)

        {

            GUI.Box(rect, "You Are Dead ");  ※ 박스를 만들고, 그 형태와 띄울 문장 등을 받아온다. ( 사각형, 문구 )

        }

        else

        {

            GUI.Box(rect, "MyHealth : " + healthPoint);

        }

    }


부모를 없애는법 (?) 만드는 법 엥 이거완전 패드립아니냐

transfrm.parent = NULL 로 한다면 이순간 부모가 사라지므로 최상위 오브젝틀 되어버린다 ! 반대로 부모를만들려면

transform.parent = 무언가로 세팅을 한다면 그 밑으로 들어가게 된다. 


스크립트 실행순서

Edit - Poroject Setting - Script Exclusion Order 에서 스크립트의 실행순서를 정해줄수있다. Deafult 위는 더빨리 / 아래는 더 늦게 호출된다. 



유니티 돌아가는 방식

100개의 오브젝트가 있는데,

처음 시작할때 80개만 있다고 치자,

그러면 80개의 Start 를 시작시킨다. 정렬안시키고 그냥 무작위로 아무거나 한다. 그냥 호출한다. 

그리고 다들 Update가 호출다 된다. 모든 80개의 오브젝트의 update 가 끝나면 다음으로 넘어간다.

Lateupdate 가 호출되는데 코루틴이 이쯤에 호출된다. 이것까지 끝나면 드디어 화면에 그린다.


즉 Update 에서 뭔가 바꾸든 LateUpdate 에서 바꾸든 문제가없다. 어차피 모두 종료된 후에 그리니까


결론 : 의존성 있는 스크립트가 있을경우, 그 순서를 잘 미리 세팅을 해놓자 Scrpit Exclusion Order 에서 ! 


드디어 나왔다. 코루틴 Coroutine ( 멀티 스레드 같은 개념 ) 

코루틴이 호출되는 순간 주 Script는 그대로 쭉 가고 동시에 Corutine 의 흐름이 또 생겼다가 종료된다.


유니티는 싱글스레드이다. 개념적으로 멀티스레드 이지만.


반환형이 IEnumerator 인 경우 코루틴 함수이다. 라고 알면된다.


외부에서 코루틴 함수를 직접 호출하지말고 다른 함수를 통해서 호출하도록 하자


코루틴 함수는 무조건 StartCoroutine 으로 호출해야한다.


yield return을 최소한번은 하자.

return null 과 return WaitForEndOfFrame() 의 차이는 null은 그냥 update 수 정도고

frame 은 화면 갱신되는 횟수이다. 


return null

return new WaitForSeconds( float ) 지정된 초만큼 대기

return new WaitForEndOfFrame() 렌더링 작업이 끝날 때 까지 대기

return new WaitForFixedUpdate() 다음 물리프레임까지 대기

return StartCoRoutine ( STRING ) 다른 코루틴이 끝날때까지 대기 쓰지말자

return new WWW( sTRING ) 웹 통신작업이 끝날 때까지 대기

return new AsyncOperation 비동기작업이 끝날 때 까지 대기 ( 씬로딩,씬전환 )


코루틴은 오브젝트 단위로 생성된다. 즉 StopAllCorutines 를 부른 오브젝트 안에있는 코루틴드란멈춰진다. 


코루틴 부르는 두가지 방법 StartCoroutine( 함수 ( 인자 ) ) 혹은 StartCoroutine("함수이름")

후자의 장점 StopCoroutine("함수이름") 이 가능함 

단 뒤에있는 케이스는 인자가 없는 함수만이 가능함

전자의 케이스를 종료시키는 방법 : Coroutine 변수를 선언해서 미리 받아놓고 그 변수를통해 종료가능


코루틴 함수명을 일반함수처럼 짓는건 되도록 피하자, 햇갈릴수있다.


Camera Shaking


    Vector3 localPosition = Vector3.zero;

    void Start()

    {

        localPosition = transform.localPosition; ※  원래의 카메라 위치 기억

    }


Coroutine currentCoroutine ;

    public void PlayCameraShake() ※  외부에서 코루틴함수를 바로 호출 안하고, 함수를 통해 호출 

    {

        StopAllCoroutines();

    if( currentCoroutine != null ){

StopCoroutine(curentCoroutine) ;

currrentCoroutine = nul ;

}

        currentCouroutine = StartCoroutine(CameraShaking(1.0f, 0.2f));

    }


   IEnumerator CameraShaking(float shakeTime, float shakeSense)

    {

        float deltaTime = 0.0f;

        while(deltaTime < shakeTime)

        {

            deltaTime += Time.deltaTime;


            transform.localPosition = localPosition;

            Vector3 pos = Vector3.zero;

            pos.x = Random.Range(-shakeSense, shakeSense);

            pos.y = Random.Range(-shakeSense, shakeSense);

            pos.z = Random.Range(-shakeSense, shakeSense);

            transform.localPosition = pos;

            yield return new WaitForEndOfFrame();

        }

        transform.localPosition = localPosition;

        yield return null;

    }


죽음을 좀더 깔끔하게 구현해봅시다.


댓글 로드 중…

블로그 정보

Clolent - 커피물조절달인

최근에 게시된 글