Clolent

※ 물리 엔진은 1초에 50번만 계산한다.

그런데 우리 움직임은 Update 에서 움직ㅇ므로 프레임이 서로 같지않다. 비동기화 되어있다. 

이를 해결하기위해 프레임 동기화를 해줘야한다.


1. 물리엔진의 프레임을 끌어올려준다. Edit - Project Setting - Time 에서 Fixed Timestep 을 건드린다.

2. Rigidbody 에서의 Interpolate 버젼을 Interpolate 로 해준다. ( 그래도 끊기면 Extrapolate ) 

3. Application.targetFrameLate = int 값 으로 프레임 값을 고정시켜 버릴수있다.


※ 스크립트 상에서 빨간줄이 그어져 있는 부분에 커서를 놓고 F12 를 누르면 고쳐할 부분으로 워프

돌아오기는 Ctrl + Tab 


※ 과거에 컴퍼넌트가 꺼져있을 때도 플레이 되는 순간 돌아갔다. 지금은 세상에 꺼내져있어도 액티브 상태가 아니라면, 

실행이 안되고 있다.


※ 부모가 LigidBody 가 있다면 하위는 모두 Dynamic 이다.



※ 기존의 스위치문 사용하던 것을 Dictionary 를 이용하여 바꿔줄수 있다 .

Dictionary <ENEMYSTATE, System.Action> dic = new Dictionary<ENEMYSTATE, System.Action>()

로 선언을 해주고 

dic[ENEMYSTATE.IDLE] = Idle ;

dic[ENEMYSTATE.MOVE] = Move ;

dic[ENEMYSTATE.ATTACK] = Attack ;

dic[ENEMYSTATE.DAMAGE] = Damage ;

dic[ENEMYSTATE.DEAD] = Dead ;


식으로 미리 선언을 해주고,  dic[enemyState](); 식으로 Update 에서 호출하면 enemyState 에 따라 적당한 함수가 호출된다.


Delegate 와 동일하다 = System.Action 


애니메이션 추가설명


※ 맞는 도중 또맞아도 그냥 Play 로 했다면,  맞다가 또 맞아도 기존에 플레이 되던 애니메이션을 마저 플레이 한다. 

만약 플레이 도중이어도 다시 플레이를 시켜야 한다면         

AnimationState animStae = anim.PlayQueued("Damage", QueueMode.PlayNow);


※ AnimationState = anim[ " " ] 와 같지만 PlayQueued 에서는 적용이 불가능하다. 

playqueue 할때는 재생시키고, 스피드 바로 바꿔줘야함


※ 죽는 모션이 모두 끝난 다음에 객체를 사라지게 하고싶다면 어떻해해야할까 나는 이런 식으로 구현했다.    void Dead() {

        if (dead)    ※ dead 는 bool 함수로 단 한번 실행된다. 

        {

            anim.PlayQueued("Die",QueueMode.PlayNow);  ※피격중이었던 공격중이엇던 즉시 Die 애니메이션ㅇ로

            dead = false;                                                넘어간다.

        }

        if (!anim.isPlaying)             ※ 현재 수행되고 있는 애니메이션이 없다면 

        {

            Destroy(gameObject);

            manager.cnt -= 1;  

        }

    }


댓글 로드 중…

블로그 정보

Clolent - 커피물조절달인

최근에 게시된 글