최근 질문글(질삭튀 x 인증용)
[미해결] 유니티 옵션 설정 조정 - 인디 게임 개발 갤러리 (dcinside.com)
특정 키를 누를때 다른 키의 입력을 막으려고 하는데 되는게 있고 안되는게 있어서 물어봄
주먹 발 코드
if (f_currentTime <= 0)
{
if (Input.GetKeyDown(KeyCode.Z) && rigidbody2d.velocity.y == 0)
{
b_AttackP = true;
b_Dash = false;
//Collider2D[] collider2Ds = Physics2D.OverlapBoxAll(curPos.position, boxSize, 0);
//foreach (Collider2D cols in collider2Ds)
//{
// Debug.Log(cols.tag);
//}
}
if(b_AttackP)
{
animator.SetTrigger("Player_punchT");
animator.SetBool("Player_stay", false);
animator.SetBool("Player_walk", false);
//animator.SetBool("Player_Dash"), false); //추가하여 대시 방지하기
//animator.SetBool("Player_death", false);
f_currentTime = f_handcooltime;
b_AttackP = false;
}
if (Input.GetKeyDown(KeyCode.X) && rigidbody2d.velocity.y == 0)
{
b_AttackK = true;
b_Dash = false;
}
if(b_AttackK)
{
animator.SetTrigger("Player_kickT");
animator.SetBool("Player_stay", false);
animator.SetBool("Player_walk", false);
//animator.SetBool("Player_Dash"), false); //추가하여 대시 방지하기
//animator.SetBool("Player_death", false);
f_currentTime = f_kickcooltime;
b_AttackK = false;
}
점프 코드
if (Input.GetKeyDown(KeyCode.Space) && rigidbody2d.velocity.y == 0 && b_Hurt == false) //점프
{
animator.SetTrigger("Player_jumpT");
rigidbody2d.AddForce(Vector2.up * JumpForce, ForceMode2D.Impulse);
animator.SetBool("Player_walk", false);
animator.SetBool("Player_stay", false);
}
인데 주먹키를 누르면서 점프를 누르면 주먹질이 되면서 점프가 됨
발도 마찬가지고
혹시 이걸 막으려면 어떻게 처리하면 좋을까?
진짜 간단한건 else if 로 같이묶던가 아니면 점프나 공격때 bool값넣어서 먼저 if(bool == false)체크하기..
그런건 키를막는게아니라 if(animator.GetCurrentAnimatorStateInfo(0).IsName("주먹질"))해서 점프를 막는게 어떨까
혹시 조금 더 예제같은거 들어서 설명해줄 수 있어? 이 코드는 첨보는데)
애니메이터가 지금 어떤 애니메이션을 재생중인지 GetCurrentAnimatorStateInfo(0)로 가져올수있음. IsName으로 지금 실행중인 애니메이션이 주먹질이면 점프 못하게 하는 코드 추가하라는거. 그리고 IsName은 스트링비교라 성능 안나오니까 Animator.StringToHash("주먹질")로 Hash값 저장해뒀다가 animator.GetCurrentAnimatorStateInfo(0) == punchHash 이런식으로 비교하는거 추천
점프코드 if로 묶으면 되겠네
이거는 지금 당장 이해하긴 좀 많이어렵네..stringtohash라는것도 첨봐가지고..일단 좀 더 알아볼게..
일단 나중에 더 꼬이기 전에 각 상태별로 코드를 정리할 필요가 있음 enum curstate{walk, jump, attack} 뭐 이런식으로 만들어서 현재 상태가 walk면 어떤 입력만 받고 어떻게 행동하고, attack 상태일때는 또 어떻게 하고.. 뭐 이런식으로 구분을 하는게 앞으로 기능들을 추가할때도 좋고 버그 트래킹에도 유리할거임 지금처럼 하면 계속 if안에 또 if를 만들고 bool도 각 상태별로 계속 늘어나기만 할거임
가독성이 떨어지는 코드가 되는거구나..enum 한참 예전에 몇번 본게 다라서 기억도 잘 안나네.. 혹시 enum으로 현재 상태중의 일부가 될때 무슨 기능을 하게끔 넣으면 다른 상태가 되면 해당 기능 이외엔 동작하지 않는거지?
무슨 말인지 잘 이해가 안가긴하는데 하여간 그건 만들기에 따라 다른거임 enum 같은걸로 상태를 구분하라는 건 알아보기 쉽고 관리하기 편하라고 그러는 거임 그러니 니가 특정 상태에서 뭐가 작동하다가 다른상태로 바뀌면 작동을 중지되는 걸 구현하고 싶다면 그걸 if문 같은걸 써서 구현을 해야겠지 근데 지금 내가 어떤 상태인지를 매번 if문이나 각각의 bool로 체크하는건 너무 힘들고 복잡하잖음 그러니 enum같은걸로 각 상태를 구분한 뒤 지정해서 뭔가의 조건문을 만들때 관리하기 좋게 효율적으로 하라는 거임
아니 그냥 플래그 써.
플래그가 어떤거임?