플레이어의 linearVelocityY가 음수가 되면 SetTrigger("fall")을 켜서 player_fall(낙하 시작)로 넘어감. 그리고 player_fall에서는 exitTime 설정해서 끝나면 자동으로 player_falling(낙하 중)으로 옮겨가서 착지할 때까지 루프 재생.
그런데 플레이어가 땅 위에 있는지 아닌지는 fixedUpdate에서 매 프레임 체크하고 그에 맞는 트리거를 키기 때문에, any state에서 출발하는 특성상 실제로는 player_fall이 끝나고 player_falling으로 넘어가더라도 곧바로 다시 SetTrigger("fall")이 켜져서 player_fall로 돌아가버림
낙하 중인지 이제 막 낙하를 시작하는 건지 체크하는 변수 같은 걸 만들어서 키프레임이나 비동기 함수 같은 걸로 넣으면 해결될 것 같긴 한데, 별로 섹시하지 않은 것 가틈...뭔가 대단히 간단하고 기초적인 구현법이 있을 것 같은데 몰루겟어요...
그리고 추가로 player_jump도, 점프하면 디폴트상태인 player_idle이랑 첫 1프레임? 정도가 섞여서 점프->idle->점프 이런 식으로 보이는 현상도 있는데 왜 이럴까?? ExitTime도 0인데
겜메에서 작업할때 player_fall에다가 조건으로 (sprite_index != player_falling) 같은거 넣었는데 유니티는 어렵네
유니티도 비슷한 게 가능하긴 한데...뭔가 생각한 대로 안 되드라고요
몇가지 떠오르는 아이디어로는 1. 매프레임마다 땅밟 체크하는 대신 OnColliderEnter 및 Exit 을 활용해본다. 2.애니메이터에서 현재 애니메이션의 진행도를 0에서 1로 표현한 프로퍼티 있었던것으로 기억함. 이를 이용해 애니메이션의 진행도에 따라 다르게 동작하도록 한다. 3. LateUpdate를 이용해 강제로 로직의 서순을 바꿔본다 (비추) - dc App
벽이 곧 바닥이기도 한 게임이라 온콜리전은 무리..ㅜ
any state -> fall -> falling에서 any state때매 아무 상태에서나 전이 가능한거 아닌가? falling에서 fall로 가는 방향을 차단해야할거같은데
그래서 bool falling 파라미터 하나 만들어서 anystate -> fall 트랜지션에 false로 붙이고 SetTrigger("fall");SetBool("falling",true);로 써봤는데, 이렇게 하면 이미 false인 상태에서 트리거를 켰으니 fall->falling 조건이 만족돼서 넘어가고, 다음줄에서 true로 바뀌었으니 착지할 때까지 fall->falling이 막힐 줄 알았는데 실제로는 그냥 처음부터 막혀버려서 fall로 넘어가지지조차않음..
일반적으로 생각해보면 move, jump 상태 다음에서 fall이 가능할거같은데 아예 근본적으로 any state 대신 move, jump에서 단방향으로 fall로 이동시키는건 안되려나?
이동 중에 낙하, 점프 중에 낙하, 공격하고 낙하, 스킬 쓰고 낙하 등등.....낙하로 이어질 수 있는 모션이 너무 많아서..정 안 되면 그렇게 하나하나 이어주는 수밖에 없을 거 같긴함..
@Micharie 그런 문제면 아마도 애니메이션 트랜지션이 즉시 일어나는게 아니라 다음 프레임에 일어난다거나 하는 구조여서 그런거 같은데 좀 야매적으로 짤거면 코루틴으로 SetBool을 1프레임 뒤로 미루는거 해볼만할듯?
점프에서 대기상태 보이는건 트랜지션 인스펙터에서 Can Transition To Self 체크해제 해보셔요. 그게 아니라면 idle로 가는 조건들 체크해봐야 할듯
레이캐스트로 바닥 체크하는데, 점프를 하는 순간에 점프 애니메이션을 재생하자마자 아직 레이저가 바닥에 닿아있는 그 순간에 idle로 돌아가는듯...ㅋㅋ골때리네
점프 애니메이션 들어갈때 짧은시간동안 레이캐스트 끄면 되겠네 그럼...플랫포머는 복잡하구나 참..
bool로 안하고 왜 트리거로 해?