공격 구현은 잘되는데 캐릭터가 앞에 있으면 캐릭터가 안 움직이게 하고 싶습니다. 그리고 캐릭터가 앞에 없을 때는 움직이게 하고 싶은데 else { isBehindForward2=true; } 이 부분이 작동하지 않습니다. if문을 어떻게 고쳐야 할까요? public void behindBACK() { Collider2D[] collider2Ds = Physics2D.OverlapBoxAll(pos2.position, boxsize2, 0); foreach (Collider2D collider in collider2Ds) { if (collider.tag == "Unit") { isBehindForward2 = false; } else { isBehindForward2 = true; } } }
강좌 잘 봤습니다. 그런데 단일 공격은 어떻게 구현하나요? 지금 방식으로는 박스 안의 모든 적들을 한 대씩 치는데, 박스 안에 있는 적들 중 한 놈만 치는 걸로요. isDeal 변수를 사용해서 체크를 해보니 한 놈만 때리는 게 가능은 한데, 문제는 너무 무작위로 때려서 포커싱이 안되더군요.
overlapboxall 이 아닌 overlapbox를 사용하면 제일 먼저 충돌된 오브젝트만 가져옵니다. 이때 레이어마스크를 이용해서 특정 레이어(적군의 레이어)만 검색할 수 있게 만들면 됩니다. docs.unity3d.com/kr/530/ScriptReference/Physics.OverlapBox.html 특정 몬스터 타겟팅은 공격 범위의 모든 적 오브젝트를 List로 가지고 있다가 일정 키를 누르면 정수형 변수를 변경할 수 있게 만들고 공격시 List[정수형 변수]의 오브젝트를 공격하게 만들면 될 것 같습니다.
문제없이 잘돌아갔는데 한가지 문제점이 있습니다 영상에서는 player 방향이 전환되면 피격box의 방향도 함께 전환되는걸로 확인되는데 저는 플레이어 방향만 바뀌고 box방향은 그대로더라구요 방향전환에 flip사용하고있는데 box방향도 같이 움직이려면 어떻게 해야 하나요?
좌측을 봤을때 기즈모가 계속 우측에 존재한다는 의미인가요? Player오브젝트의 하위에 빈오브젝트를 생성하고 overlapbox와 기즈모의 포지션을 자식오브젝트로 설정했는지 확인해보시고 로그를 찍어서 좌측봤을 때 공격이 제대로 되는지 확인해 보시기 바랍니다. 또한 캐릭터를 이동할 때 방향전환을 transform.eulerAngles을 이용해 보시기 바랍니다.
안녕하세요. 언제나 올려주신 영상에 많은 도움을 받고 있습니다. 다름이 아니라 제가 작성한 코드에 알려주신 기즈모를 적용하고 캐릭터를 좌우로 움직이면 캐릭터는 정상적으로 이미지가 반전되서 적용되지만 기즈모는 항상 우측에 위치합니다 혼자 해결해보려고 여기저기 찾아봤지만 아무래도 유니티 한지 얼마 안된 초보라 해결하기 힘드네요. 해결방법좀 자세하게 알고싶습니다. 감사합니다.
두 오브젝트 간의 스크립트 접근법은 여러가지가 있는데 만약 호출하고 싶은 오브젝트가 프로젝트에서 한개만 존재한다면 싱글톤패턴과 인스턴스 변수를 이용해서 접근하는 방법, FInd를 이용해서 오브젝트를 찾고 GetComponent로 찾은 오브젝트의 스크립트에 접근하는 방법... 등등... 질문하신 버튼이 UGUI의 버튼이라면 b에서 FInd로 a버튼을 찾아서 GetComponent로 Button을 가져온 다음 a버튼.onClick.AddListener(실행 할 함수); 하셔도 됩니다. 예시 ) Button bu = GameObject.Find("Button").GetComponent(); bu.onClick.AddListener(functionclick); void functionclick(){ // 버튼이 눌리면 실행하고 싶은 작업 }
애니메이션만 재생이 안되는 거라면 애니메이션의 트랜지션의 설정을 확인해보세요. has exit time이 체크되어있는지 확인해보세요. 코드상에서 curtime 조건도 확인해보세요. 증상만으로는 정확한 문제를 알기 어렵습니다. 프로젝트 창의 Assets 우클릭 Export Package... 로 내보내기 후 메일로 보내주시면 답장드리겠습니다. giggles.yhg@gmail.com
void OnDrawGizmos() { Gizmos.color = Color.blue; Gizmos.DrawWireCube(Gpos.position, boxSize); } 를 썼는데 "로컬 함수 'OnDrawGizmos()'이(가) 선언되었지만, 사용되지 않았습니다." 라고 떠서 박스가 보이질 않습니다... 혹시 어떻게 해야 하는지 알려주실 수 있나요?
그냥 캐릭터가 우측을 보는게 기본상태라면 좌측 키를 누르면 transform.eulerAngles = new Vector3(0, 180, 0); 우측키가 눌리면 transform.eulerAngles = new Vector3(0, 0, 0); 을 하면 될 것 같습니다. 오일러앵글을 쓰면 오브젝트를 회전시키기에 스프라이트의 회전도 같이 이루어 집니다.
@@DevGomDal 혹시 그러면 if (Input.GetButtonDown("Horizontal")) transform.eulerAngles = new Vector3(0, 180, 0); transform.eulerAngles = new Vector3(0, 0, 0); if (Input.GetButtonDown("Horizontal")) transform.eulerAngles = new Vector3(0, 180, 0); transform.eulerAngles = new Vector3(0, 0, 0); 이렇게 구문을 짜도 되나요? 아니면 다르게 구문을 짜야하나요?>? ㅠㅠ
메인카메라를 플레이어 자식 오브젝트로 넣고 코드를 썼더니 왼쪽으로 이동하면 오브젝트들이 죄다 반전되네요 다른댓글 보고 GameObject 변수 선언하고 Melee 오브젝트를 변수에 넣고했는데 해결되지않네요 ㅠㅠ if(Input.GetButton("Horizontal")) { if(Input.GetAxisRaw("Horizontal")
회전이 아닌 스케일을 이용한 반전을 사용해 보세요 if (Input.GetAxisRaw("Horizontal") < 0) transform.localScale = new Vector3(-1,1,1); //transform.eulerAngles = new Vector3(0, 180, 0); else transform.localScale = new Vector3(1, 1, 1);
@@DevGomDal 이 코드에서 마우스 에임에 따라서 캐릭터가 플립되는데 protected void CheckFlip() // 마우스와 캐릭터의 위치를 비교해서, 캐릭터가 항상 마우스 쪽을 바라보도록 하는 메소드 { if (GameManager.instance.mousePosition.x < transform.position.x) // 마우스 x 좌표가 캐릭터의 좌표 + 보정값보다 작을 때 (캐릭터의 pivot은 왼쪽 아래이기 떄문에, 정중앙을 기준으로 계산하려면 보정이 필요) { spriteRenderer.flipX = false; spriteRenderer.transform.Translate(new Vector3(0f, 0f, 0f)); // flip이 왼쪽 아래 pivot을 기준으로 이뤄지기 때문에, 위치의 보정이 필요 } else { spriteRenderer.flipX = true; spriteRenderer.transform.Translate(new Vector3(0f, 0f, 0f)); } } 따로 어떻게 바꿔야할지 모르겠습니다,,
점프 공격이 어떤식으로 작동하냐에 따라서 방법은 다양하겠지만 예를 들어 바닥에서 떨어졌을 때 공격키를 누르면 점프 모션 공격이 발동하게 만들어 주면 됩니다. 이때 공격을 받을 타겟이 캐릭터의 정면이면 영상처럼 overlapbox 를 써주고 공중에서 바닥으로 공격을 하려면 Physics2D.BoxCast를 원하는 각도로 바닥을 향해 체크해서 데미지를 넣어주면 될 것 같습니다.
증상만으로는 정확한 오류 문제를 알기 힘듭니다. 적의 Tag 설정이 제대로 되어 있는지 확인해 보세요. 문제가 없다면 프로젝트 폴더의 Assets, ProjectSettings 두 폴더를 압축해서 메일로 보내주시면 확인 후 답장드리겠습니다.giggles.yhg@gmail.com
부모 오브젝트가 회전을 하게 되면 자식 오브젝트는 전부 회전을 하게 됩니다. 만약 회전이 안되어야 하는 자식 오브젝트가 있다면 영상에서의 근접 공격 범위를 잡아주는 melee 오브젝트만 회전시키고 플레이어 Sprite는 Flip 시키던가 또는, 회전을 받으면 안 되는 자식 오브젝트도 같이 회전하게 만들어서 막아주는 방법이 있습니다.
연속공격이 기본공격키를 계속해서 누르면 이어지는 모션을 취하면서 타격하는 것을 말하시는 건가요? 가능할 것 같습니다. curTime이 0이 되기전에 다시 Z키가 눌린다면 애니메이션을 두번째 공격 모션으로 전환하고 오버랩박스에 적이 있다면 TakeDamage를 호출하면 될 것 같습니다.
플립 을 사용하여 캐릭터를 뒤집는 형태로 코드를 작성했는대 transform.eulerAngles = new Vector3(0, 180, 0); transform.eulerAngles = new Vector3(0, 0, 0); 플립 으로 뒤집는 코드를 지우고 해야 하나요? sprite.flipX = !sprite.flipX;코드를 사용했습니다
@@DevGomDal 곰돌님께서 설명해 주신대로 작성하여 코드를 작성 했는대 키를 입력 하고 있을때만 왼쪽으로 캐릭터가 회전하고 키보드 입력을 멈추면 다시 오른쪽으로 돌아가는 바람에 공격하기가 어렵습니다. 해결방법이 있을까요? if(Input.GetAxisRaw("Horizontal") < 0) { transform.eulerAngles = new Vector3(0, 180, 0); } else { transform.eulerAngles = new Vector3(0, 0, 0); } transform.position += moveVec * moveSpeed * Time.deltaTime; xAxis = Input.GetAxisRaw("Horizontal");
불린형 변수(ismove)를 한개 선언하고 이 변수(ismove)가 참일 때만 이동이 가능하게 조건문을 달아줍니다. 평소에는 변수(ismove)를 참으로 만들고 공격 애니메이션으로 전환되는 순간 변수(ismove)를 거짓으로 변환하게 만들고 애니메이터 창에서 공격 상태를 선택하면 인스펙터창에 Add Behaviour 버튼이 있습니다. 버튼을 누른 뒤 스크립트를 생성하고 열어주면 //override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) //{ // //} 이 부분의 주석을 풀어준 뒤 여기에서 변수(ismove)를 다시 참이 되게 만들어 주면 됩니다. animator.GetComponent(); 로 변수에 접근할 수 있습니다.
@@DevGomDal 말씀해주신대로 해서 idle에서 공격하면 공격애니메이션이 끝나고 이동이 가능해지는데 run중에 공격하면 멈추지 않고 이동하면서 공격애니메이션이 진행되는데 run 중에 공격시 이동을 중지할려면 어떤방법을 쓰나요? 참일 때는 speed를 그대로 받고 아닐때는 0으로 받음으로 해결했습니다. 왜 질문하고나서야 방법이 떠오르는지....ㅋㅋㅋ
bool형 변수를 선언하고(isAtk 이라고 하겠습니다.) Z키가 눌리는 순간 isAtk변수를 false로 변경한 뒤 공격모션이 끝나는 시점에 다시 true로 변경해줍니다. 그리고 이동코드에 isAtk변수가 거짓일 때만 코드가 작동하게 조건문을 달아주면 됩니다. 공격모션이 끝나는 시점은 여러가지 방법이 있지만 애니메이터에서 공격State를 클릭하고 인스펙터창의 AddBehaviour를 통해서 알 수 있습니다. OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) 이 부분이 상태에서 벗어날 때 호출되는 부분입니다.
애니메이션 생성은 건너뛰어버리셔도 상관없다면 2:40 부터 보셔도 괜찮습니다!
정말 대단한게 앵간한 인디게임개발학원에서도 이렇게까지 답변을 해주지 않는데 댓글보면 하나같이 다 답변해주시는것에 놀랐습니다. 좀 쉬엄쉬엄 하는것도 괜찮은데 몸관리 열심히 하세용
감사합니다! ㅎㅎ 간단한 운동이라도 해야겠어요 :D
댓글 보실지는 모르겠는데 Enemy에 관련된 collider 메소드? 는 저희도 모르게 싱글톤 패턴을 사용한 것 일까요?
싱글톤을 많이 다뤄보지 못해봐서 응용하려니 어렵네여 그래도 덕분에 재밌게 개발합니당
잘 배우고 갑니다.
플레이어가 뒤로 돌면 Gizmo부분도 플레이어의 앞에 위치해 있어야 되잖아요.
예를 들어 플레이어가 뒤를 돌면 플레이어 앞에 있는 Gizmo.DrawWireCube는 플레이어의 뒤에 위치시키는 것은
어떻게 구현하면 되나요?
고맙습니다! 공격 때문에 3시간을 고생했는데 이 영상 덕분에 해결됬네요!
오늘도 잘보고갑니다 기즈모는 진짜 혁신이네요ㅋㅋㅋ
기즈모 정말 편하죠! ㅎㅎ 감사합니다! :D
기즈모 좌우 위치 조정하는 것을 모르겠어서 댓글 확인 했는데 질문과 답변이 있어, 봤는데 transform.eulerAngles를 사용하시라 했는데 잘 이해하지 못하겠어요. transform.eulerAngles으로 어떻게 구문을 짜야하나요?
Player의 인스펙터를 보면 Transform에 Rotation 항목이 있습니다.T의 수치를 180욿 변경해보면 캐릭터의 좌우 방향이 바뀝니다. 이것을 코드에서 변경해주는 코드가 transform.eulerAngles입니다.
transform.eulerAngles = new Vector3(0, 180, 0);
이런식으로 사용되며
우측키가 눌리면 Y를 0 좌측이동키가 눌리면 Y를 180 이런식으로 만드시면 됩니다.
공격 구현은 잘되는데 캐릭터가 앞에 있으면 캐릭터가 안 움직이게 하고 싶습니다. 그리고 캐릭터가 앞에 없을 때는 움직이게 하고 싶은데 else { isBehindForward2=true; }
이 부분이 작동하지 않습니다. if문을 어떻게 고쳐야 할까요?
public void behindBACK()
{
Collider2D[] collider2Ds = Physics2D.OverlapBoxAll(pos2.position, boxsize2, 0);
foreach (Collider2D collider in collider2Ds)
{
if (collider.tag == "Unit")
{
isBehindForward2 = false;
}
else
{
isBehindForward2 = true;
}
}
}
강좌 잘 봤습니다.
그런데 단일 공격은 어떻게 구현하나요?
지금 방식으로는 박스 안의 모든 적들을 한 대씩 치는데, 박스 안에 있는 적들 중 한 놈만 치는 걸로요.
isDeal 변수를 사용해서 체크를 해보니 한 놈만 때리는 게 가능은 한데, 문제는 너무 무작위로 때려서 포커싱이 안되더군요.
overlapboxall 이 아닌 overlapbox를 사용하면 제일 먼저 충돌된 오브젝트만 가져옵니다.
이때 레이어마스크를 이용해서 특정 레이어(적군의 레이어)만 검색할 수 있게 만들면 됩니다.
docs.unity3d.com/kr/530/ScriptReference/Physics.OverlapBox.html
특정 몬스터 타겟팅은 공격 범위의 모든 적 오브젝트를 List로 가지고 있다가 일정 키를 누르면 정수형 변수를 변경할 수 있게 만들고 공격시 List[정수형 변수]의 오브젝트를 공격하게 만들면 될 것 같습니다.
정말 유익하게 잘 보고 갑니다~!
감사합니다! :D
워우 감사합니다 아주 좋네요 ㅋㅋ
아하 진짜~ 영상 엄청 도움되고 있습니다
감사합니다! 부족하지만 도움이 되셨다니 ㅎㅎ
안녕하세요 영상 잘보고있습니다 영상따라서 attack 애니메이션을 트리거로해놓고 공격키 를 연타하면 공격모션에서 idle로 안넘어가는데 무슨문제인지 알수있을까요?
저도 왼쪽으로 움직여도 기즈모는 계속 오른쪽에만있네요ㅜ..ㅜ그리고 곰님이 자식오브잭트설정했을때 파란네모가 빨간색으로 바꾸던데 저는 바뀌지 않아요ㅠㅠrigid.velocity랑 AddForce 그리고이미지 반전쓰고있는데 혹시 그게 문젤까요?
네 붉은색 파란색은 6:35 코드에서 기즈모의 Color.blue 부분을 Color.red로 바꿔주시면 바뀝니다 ㅎ 그리고 캐릭터의 좌우는 이미지 반전이 아닌 transform.eulerAngles 를 사용하시면 됩니다.
항상 좋은 영상 감사합니다! 많은 도움을 받고 있습니다. 많은 개발자 지망생들이 이 영상을 봤으면 좋겠네요!
부족한 영상이지만 시청해주셔서 감사합니다! 도움이 되셨다니 엄청 기뻐요!! 더 열심히 고민해서 영상 만들겠습니다.
결정했다, 구독이다!
감사합니다!
공격 애니매이션이 두번공격으로 이어져서 포스가 두 개 필요할 거같은데
기본근접공격 포스가 두 개일 경우는 어떻게 해야 하나요? 오버랩박스를 한번더줘야 하나요?
영상의 공격으로 사용하시려면 공격 범위가 같으면 재사용 하시면 될 것 같습니다. 만약 다르다면 한개를 더 생성해서 사용하시면 될 것 같습니다.
@@DevGomDal 범위가 달라서 한개를 더 생성해야할거같은데..어떤걸 한번더 생성하면..초보라서..아직..
@@스히링 ruclips.net/video/QPRLiAIHeWY/видео.html 이 영상을 한 번 참고해 보세요
문제없이 잘돌아갔는데 한가지 문제점이 있습니다
영상에서는 player 방향이 전환되면 피격box의 방향도 함께 전환되는걸로 확인되는데
저는 플레이어 방향만 바뀌고 box방향은 그대로더라구요
방향전환에 flip사용하고있는데
box방향도 같이 움직이려면 어떻게 해야 하나요?
플레이어의 Rotation.Y의 값을 180 도 회전시키면 박스도 반대방향으로 옮겨집니다!
다른 방법으로는 반대 방향키가 눌릴때마다 박스의 위치를 바꿔주는 방법도 있습니다.
@@DevGomDal 안녕하세요 이것저것 해보느라 답글이 늦었습니다
알려주신 방법중 저는 flipx가 활성화될경우와 비활성화 될 경우에따라 박스의 위치를 바꿔주는 방법을 선택했는데요
방금 구현끝냈습니다
친절한 답변 갑사합니다
@@망겜조무사-v4h 오! 최고입니다! :D
캐릭터가 왼쪽을 보고 공격을 했을때도 근접공격의 공격범위를 나타내는 박스는 오른쪽을 볼때와 같게 나옵니다. 왼쪽을 보면서도 공격이 나가려면 어떻게 해야 하나요?
좌측을 봤을때 기즈모가 계속 우측에 존재한다는 의미인가요? Player오브젝트의 하위에 빈오브젝트를 생성하고 overlapbox와 기즈모의 포지션을 자식오브젝트로 설정했는지 확인해보시고 로그를 찍어서 좌측봤을 때 공격이 제대로 되는지 확인해 보시기 바랍니다. 또한 캐릭터를 이동할 때 방향전환을 transform.eulerAngles을 이용해 보시기 바랍니다.
@@DevGomDal 정말 빠르게 답변해 주셔서 감사합니다!
기즈모 신기하네요! 전 스크립트에서 하면 충돌판정이 안보여서 콜라이더를 만들어놓고 SetActive썼는데 저게 더 깔끔해보여요 ㅁㅁ
저쪽이 잘 쓰면 개발에 편리한 기능이 많은 것 같아요. :D
안녕하세요. 언제나 올려주신 영상에 많은 도움을 받고 있습니다.
다름이 아니라 제가 작성한 코드에 알려주신 기즈모를 적용하고 캐릭터를 좌우로 움직이면
캐릭터는 정상적으로 이미지가 반전되서 적용되지만 기즈모는 항상 우측에 위치합니다
혼자 해결해보려고 여기저기 찾아봤지만 아무래도 유니티 한지 얼마 안된 초보라 해결하기 힘드네요. 해결방법좀 자세하게 알고싶습니다.
감사합니다.
캐릭터 방향을 변경할 때 Rotation 또는 Scale을 변경하는 방식으로 하셔야 영상의 방식이 제대로 적용이 됩니다. 캐릭터 하위에 생성한 빈 오브젝트를 pos에 넣었는지도 확인해 보세요.
@@DevGomDal 제가 작업할때는 플립으로 했는데 로테이션으로 했어야 하는군요. 이제 알았습니다 감사합니다!
외람된 질문이지만, a라는 버츤을 눌렀을때 b라는 스프라이트의 스크립트가 작동되게 하는법이 없나요? 두 물체의 스크립트끼리의 연동은 어떻게 하나요
두 오브젝트 간의 스크립트 접근법은 여러가지가 있는데 만약 호출하고 싶은 오브젝트가 프로젝트에서 한개만 존재한다면 싱글톤패턴과 인스턴스 변수를 이용해서 접근하는 방법, FInd를 이용해서 오브젝트를 찾고 GetComponent로 찾은 오브젝트의 스크립트에 접근하는 방법... 등등... 질문하신 버튼이 UGUI의 버튼이라면 b에서 FInd로 a버튼을 찾아서 GetComponent로 Button을 가져온 다음 a버튼.onClick.AddListener(실행 할 함수); 하셔도 됩니다. 예시 )
Button bu = GameObject.Find("Button").GetComponent();
bu.onClick.AddListener(functionclick);
void functionclick(){
// 버튼이 눌리면 실행하고 싶은 작업
}
다음에 기회가 되신다면 한 번 영상으로 다뤄주실 수 잇나요? ;; 사실 글로된 설명만 들으면 잘 이해는 못해서 한번 찾아봐야 겠네요. 대답해 주셔서 감사합니다 항상 잘 보고 잇습니다
꼭 캐릭터까지 포함되어 있는 그림을 싸야 하나요? 캐릭터가 포함되어있지않고 근접공격만 있는 그림을 사용하면 안되나요?
캐릭터없이 터치한 부분에 타격이펙트만 띄우는 방법을 말하시는 건가요? 가능은 하지만 해당 영상의 방법은 캐릭터를 기준으로 근접공격을 하기때문에 효율적이지는 못할 것 같습니다.
답변 감사합니다, 32 * 32사이즈로 도트를 찍고 만드려면 공간이 많이 부족해서 질문드린건데, 효율적이지 못하다니.. 흠 이제부터는 더 넓은 사이즈로 도트를 찍어야 겠네요 ㅎㅎ
@@한도현-s3s 아 가능합니다. 제가 말을 잘못 이해한거 같아요. 32사이즈로 캐릭터 따로 이펙트 따로 무기 따로 그리시고 애니메이션에서 위치만 잡으시면 될 것 같아요!
와 정말 알고싶은 정보였어요 ㅠㅠ
도움이 되었으면 좋겠네요! 감사합니다!
@@DevGomDal 혹시 공격중엔 이동이나 점프가 안된다던가 그런 제한을 거는게 가능할까요??
@@sbk0135 FSM을 응용해서 구현하셔도 되고 간단하게 bool 변수를 두고 공격이 시작되면 true 끝나면 false로 만든다음 변수를 조건으로 이동 점프에 제한을 두는 식으로도 가능할 것 같습니다.
곰돌님, 영상보면서 잘 따라하고 있어요! 그런데 trigger 쪽에서 한번 실행되고 난후 z 키를 눌러도 공격모션이 나오지 않는경우는 어떻게 해야하나요?
애니메이션만 재생이 안되는 거라면 애니메이션의 트랜지션의 설정을 확인해보세요.
has exit time이 체크되어있는지 확인해보세요.
코드상에서 curtime 조건도 확인해보세요.
증상만으로는 정확한 문제를 알기 어렵습니다.
프로젝트 창의 Assets 우클릭 Export Package... 로 내보내기 후 메일로 보내주시면 답장드리겠습니다.
giggles.yhg@gmail.com
@@DevGomDal 아, 영상 천천히 다시 돌려보니 if,else 구문쪽에서 실수가 있었네요! 빠른 답변 감사합니다!! 너무너무 감사해요!
void OnDrawGizmos()
{
Gizmos.color = Color.blue;
Gizmos.DrawWireCube(Gpos.position, boxSize);
}
를 썼는데
"로컬 함수 'OnDrawGizmos()'이(가) 선언되었지만, 사용되지 않았습니다."
라고 떠서 박스가 보이질 않습니다...
혹시 어떻게 해야 하는지 알려주실 수 있나요?
혹시 OnDrawGizmos를 클래스 바로 아래에 생성한게 맞는지 확인해보세요!
@@DevGomDal 어제 저녁에 보고 아침에 확인해야지 하고 봤었는데, 답변이 정확하시네요!
이렇게 간단히 해결될 줄이야... 중괄호 하나가 차이였네요.ㅜㅜ
이제 배우는 입장으로 영상 잘 보고 있습니다!
@@아무개-k1c 해결되었다니 다행입니다! 감사합니다!
제 플레이어 캐릭터의 모션범위가 너무 커서 캐릭터 앞에 pos를 놔두면 Player만 인식해요.
플레이어 캐릭터를 제외하고 인식하게 할수는 없나요?
Project Settings - Physics에서 설정 가능합니다 . 링크를 참고해 보세요. soopeach.tistory.com/16
transform.eulerAngles = new Vector3(0, 180, 0); 를 사용하여 스프라이트 반전과 transform.eulerAngles = new Vector3(0, 180, 0); 이것도 함께 쓰고 싶은데 어떻게 구문을 짜야할까요?
그냥 캐릭터가 우측을 보는게 기본상태라면 좌측 키를 누르면 transform.eulerAngles = new Vector3(0, 180, 0); 우측키가 눌리면 transform.eulerAngles = new Vector3(0, 0, 0); 을 하면 될 것 같습니다. 오일러앵글을 쓰면 오브젝트를 회전시키기에 스프라이트의 회전도 같이 이루어 집니다.
@@DevGomDal 감사합니다!!
@@DevGomDal 혹시 그러면 if (Input.GetButtonDown("Horizontal"))
transform.eulerAngles = new Vector3(0, 180, 0);
transform.eulerAngles = new Vector3(0, 0, 0);
if (Input.GetButtonDown("Horizontal"))
transform.eulerAngles = new Vector3(0, 180, 0);
transform.eulerAngles = new Vector3(0, 0, 0);
이렇게 구문을 짜도 되나요? 아니면 다르게 구문을 짜야하나요?>? ㅠㅠ
모르고 2번 썻네요
@@김성훈-p5l if( Input.GetAxis("Horizontal") < 0)
transform.eulerAngles = new Vector3(0, 180, 0);
else
transform.eulerAngles = new Vector3(0, 0, 0);
getaxis를 사용해서 어느 방향인지 확인해야 합니다!
메인카메라를 플레이어 자식 오브젝트로 넣고 코드를 썼더니 왼쪽으로 이동하면 오브젝트들이 죄다 반전되네요
다른댓글 보고 GameObject 변수 선언하고 Melee 오브젝트를 변수에 넣고했는데 해결되지않네요 ㅠㅠ
if(Input.GetButton("Horizontal"))
{
if(Input.GetAxisRaw("Horizontal")
회전이 아닌 스케일을 이용한 반전을 사용해 보세요 if (Input.GetAxisRaw("Horizontal") < 0)
transform.localScale = new Vector3(-1,1,1);
//transform.eulerAngles = new Vector3(0, 180, 0);
else
transform.localScale = new Vector3(1, 1, 1);
@@DevGomDal 정말 감사합니다! 3년전 영상이라 답변을 해주실까 했는데 이렇게 바로 답변 올줄은 몰랐어요!
혼자서 해결못해서 좌절하고 있었는데 한방에 해결됐습니다! 알려주셔서 감사합니다!
저기 강좌에서 사용하신 리소스를 보내주실 수 있나요? 캐릭터의 모든 행동이 한 사진에 들어있어서 필요한 것만 분리할 수 없네요.
영상의 리소스들은 유료 구매한 부분이라 공유할 수 없습니다. 죄송합니다. 스프라이트가 한 장에 들어있다면 Sprite Editor를 이용해서 잘라서 사용하는 방법을 추천드립니다.
@@DevGomDal 님은 유료 리소스를 사용하시는군요! 게임을 만드는데 필요해서 구매하신가요? 아니면 강좌용으로 구매하신건가요?
@@DevGomDal Sprite Editor에서 사이즈를 맞추기가 어렵네요.
@@jungwook1452 rvros.itch.io/animated-pixel-hero 링크의 이미지를 사용해보세요.
x : 50 , y : 37 로 자르시면 됩니다! 유료구매는 유튜브 시작 전에 그냥 충동구매를 했던거로 기억합니다
@@DevGomDal Pixels Per Unit 라는게 있는데. 무슨 값을 넣어야 하나요? 저는 407로 넣었는데. 게임상에서 플레이어가 흐릿하게 나옵니다ㅠㅠ
굳굳
감사합니다. :D
애니메이션 이벤트를 사용할려고 했는데 함수가 필요하다고 하네요 혹시 지정해놓은 이벤트타이밍에 데미지가 들어가게 할려면 어떻게 해야하나요 이영상에서 나온 코드로는 안돼서요
메서드를 한개 생성하고 이벤트에 연결해주면 됩니다.
void AttackEvent(){
//공격시 실행할 코드
}
애니메이션 이벤트에 AttackEvent 설정
@@DevGomDal animationevent 'takedamage()' on animation 'common' has no receiver! are you missing a component? 이런오류가 뜨네요
검색해봤더니 필요없는 이벤트가 추가되었다고 인식이 된거래요.. 이벤트 함수란에 함수 이름이랑 int매개함수값도 넣어놨는데도 저러네요
로테이션으로 방향전환하려면 코드를 어떻게 짜야 하나요?
스케일로 돌리니까 반동? 이 너무 심해서요
로테이션으로 돌리니 카메라도 돌아가서....flip할 떄 오버랩 박스의 방향을 바꿀려면 어떻게 해야 하나요?
왼쪽을 볼때 기즈모를 왼쪽으로 이동시키고 싶은데 댓글에 있는 코드들을
써봐도 잘 안돼서 힘드네요,, 혹시 괜찮으시다면 이메일로 코드 보내서 따로
도움 주실 수 있으신가요..?
캐릭터의 스케일을 변경해 보세요.
반대로 바라볼 때 transform.localScale = new Vector3(-1,1,1); 다시 transform.localScale = new Vector3(1,1,1);을 하시면 원상태로 돌아옵니다.
@@DevGomDal 기즈모가 플립으로 캐릭터를 돌리면 안따라오고, localScale이나 rotation을 써야만 따라오나요?
@@이름성-c3i 플립은 Sprite Renderer에 의해서 그려지는 이미지만 반대로 그려줄 뿐입니다. 오브젝트 자체를 돌려줘야합니다.
@@DevGomDal 코드를 여러 곳에서 따와 쓰다보니까 잘,,
@@DevGomDal 이 코드에서 마우스 에임에 따라서 캐릭터가 플립되는데
protected void CheckFlip() // 마우스와 캐릭터의 위치를 비교해서, 캐릭터가 항상 마우스 쪽을 바라보도록 하는 메소드
{
if (GameManager.instance.mousePosition.x < transform.position.x) // 마우스 x 좌표가 캐릭터의 좌표 + 보정값보다 작을 때 (캐릭터의 pivot은 왼쪽 아래이기 떄문에, 정중앙을 기준으로 계산하려면 보정이 필요)
{
spriteRenderer.flipX = false;
spriteRenderer.transform.Translate(new Vector3(0f, 0f, 0f)); // flip이 왼쪽 아래 pivot을 기준으로 이뤄지기 때문에, 위치의 보정이 필요
}
else
{
spriteRenderer.flipX = true;
spriteRenderer.transform.Translate(new Vector3(0f, 0f, 0f));
}
}
따로 어떻게 바꿔야할지 모르겠습니다,,
영상 감사합니다. 점프 했을때 공격은 어떻게 하나요?
점프 공격이 어떤식으로 작동하냐에 따라서 방법은 다양하겠지만
예를 들어 바닥에서 떨어졌을 때 공격키를 누르면 점프 모션 공격이 발동하게 만들어 주면 됩니다.
이때 공격을 받을 타겟이 캐릭터의 정면이면 영상처럼 overlapbox 를 써주고
공중에서 바닥으로 공격을 하려면 Physics2D.BoxCast를 원하는 각도로 바닥을 향해 체크해서 데미지를 넣어주면 될 것 같습니다.
영상 잘봤습니다!!! 혹시 충돌체크에서 cast나 콜라이더 박스는 어떤 방식인지 간단하게 설명해주실수 있나요?
캐스트는 특정 모양의 충돌체를 지정한 방향과 거리로 날려서 충돌한 물체들의 정보를 가져오며
overlapXXX 은 특정 모양의 충돌체를 생성하고 이곳에 충돌한 물체들의 정보를 가져옵니다.
제가 이거 보고 플레이어 좌우이동 및 공격 기능 그리고 적까지 다 만들었습니다.
적을 공격할때 tag는 안뜨는대 z키는 잘 동작하는거 같습니다. 이건 어떻게 해결해야하나요? Gizmo 함수는 만들려다 계속 오류를 뱉어서 안만들고 했습니다
증상만으로는 정확한 오류 문제를 알기 힘듭니다. 적의 Tag 설정이 제대로 되어 있는지 확인해 보세요. 문제가 없다면 프로젝트 폴더의 Assets, ProjectSettings 두 폴더를 압축해서 메일로 보내주시면 확인 후 답장드리겠습니다.giggles.yhg@gmail.com
@@DevGomDal 네 감사합니다. 방금 두 개의 폴더를 압축후 전송했습니다
if(Input.GetButton("Horizontal"))
transform.eulerAngles = new Vector2(0, 180);
이렇게 작성을 했는데 캐릭터뿐만 아니라 모든 오브젝트가 다 회전을 해버립니다... 어떻게 해야하나요 ㅠㅜㅜ
부모 오브젝트가 회전을 하게 되면 자식 오브젝트는 전부 회전을 하게 됩니다.
만약 회전이 안되어야 하는 자식 오브젝트가 있다면 영상에서의 근접 공격 범위를 잡아주는 melee 오브젝트만 회전시키고 플레이어 Sprite는 Flip 시키던가
또는, 회전을 받으면 안 되는 자식 오브젝트도 같이 회전하게 만들어서 막아주는 방법이 있습니다.
@@DevGomDal 그러면 메인카메라를 플레이어의 자식 오브젝트로 넣어놨는데 melee오브젝트만 플레이어 스프라이트를 중심으로 해서 회전시키는 방법이 있을까요?
GameObject 변수를 한개 선언하고 melee 오브젝트를 변수에 넣어줍니다.
그리고 변수명.transform.eulerAngles = new Vector2(0,180); 해주면 됩니다.
@@DevGomDal 감사합니다 ㅠㅡㅜ 덕분에 근접공격 구현해냈어요 :)
실행은 잘되는데 콘솔창에서 NullReference 에러가 계속 나오는데 안나오게 수정 가능할까요??
근접공격 유형을 범위를 다르게해서 여러개로 만들고 싶은데 이럴땐 어떻게 해야하는지 알려주실수 있나요?
공격 유형마다 overlapbox의 point 와 size의 값을 바꿔주시면 됩니다.
@@DevGomDal 답변 감사합니다!! 제가 가렌E스킬같이 일정시간동안 지속되는 공격을 만들어 보려고 하는데요 공격이 진행되는 도중일정간격으로 로그를 찍게 하고싶은데 어떻게 해야 할지 모르겠어서 다시 질문해봅니다ㅠㅠ
저...
[SerializeField]
float cooltime = 0.5f;
public Transform pos;
public Vector2 boxSize;
private void Awake()
{
}
void Update()
{
cooltime = cooltime - Time.deltaTime;
if (cooltime
저번에 저 대신 만들어 주셨던 (치간칫솔)에서 공격을 따로만든 거에요
코드도 item에 넣줘서 된것갔긴한데.. 무슨문제가 있나요..?
OnCollisionStay2D 이 함수 말고 다른 방식을 찾아보세요. 충돌 상태가 유지되면 호출되는데 설정에 따라서 충돌을 체크하는 상태가 달라지고 가끔 씹히기도 합니다.
@@DevGomDal 엌ㅋㅋ 데브곰돌님이 말한 그 코드를 지우고 Update에 넣더니 되네요 ㅋㅋㅋㅋ
@@유빈-j9v :D 해결하셨나보군요! 따봉! 乃
@@DevGomDal Dev 곰돌님 덕분이에요~♡! ㅎㅎ
혹시 The type or namespace name 'Enemy' could not be found 이런 버그가뜨면
어떻게 수정해야할까요?
Enemy 클래스가 존재하지 않아서 나오는 에러입니다. Enemy 스크립트를 생성할 때 다른 이름으로 했다면 그것으로 맞춰보세요
@@DevGomDal 해결했습니다!
혹시 아직도 강좌하시나요?
전에봤던 몬스터 강좌가 제가 보기엔 어려워서.. 혹시 괜찮으시면 좀만 이해되게 해주실수있을까요?
혹시 반대쪽으로 공격은 어떻게 구현해야 할까요? 캐릭터에 카메라가 박혀있어서 로테이션회전은 안됩니다ㅠㅠ
스케일을 -1로 바꿔주시면 반대방향으로 회전이 됩니다.
@@DevGomDal 그 스케일을 -1로 바꿔주는걸 코드 어디서 할지가 문제입니다 ㅠㅠ 지금 코드가 플립으로 좌우 돌리는 식이라...
@@l_i_nk 플립 시키는 부분을 스케일 바꿔주는 코드로 바꿔주시면 됩니다.
플레이어가 가다가 공격하려면 어떻게 해야햐죠?
저는 움직임이 없고 멈췄을때만 공격이 되요.
공격애니매이션을 setbool로 했어요
애니메이터에서 걷는 모션에서 공격모션으로 트랜지션이 연결되어 있는지 확인하고 트랜지션이 들어가고 나가는 조건 설정도 확인해보세요.
그리고 Has Exit Time 을 사용하지 않는다면
setbool(false) 를 호출하는 순간도 고민해야 합니다.
@@DevGomDal 감사합니다!
혹시 공격할때 범위에 있는적 다 공격하지 않게하고 단일 공격은 못하나요?
9:07 37번 줄 다음에 break; 를 추가해 보세요.
@@DevGomDal 아 넵~! 그렇게 간단한거였어요...?ㅋㅎㅋㅎ
@@DevGomDal 또 물어볼게 하나 있는데요~ㅎㅎ 그... 이미지 자를때 Sprite Editor에서 투명색 상자에서 파란색 점 4개랑 초록색 내모난 점이 있잖아요
이때 초록색 내모난 점이 뭔지모르겠어요....
● ○ ●
○ ○
@@유빈-j9v 이것은 공식 메뉴얼 링크를 드리겠습니다. docs.unity3d.com/kr/current/Manual/9SliceSprites.html
@@DevGomDal 감사합니다~
반대편도 할 수 없나요??
Player가 좌측을 볼 때 Rotation.y를 반대로 뒤집으면 됩니다!
transform.eulerAngles = new Vector3(0, 180, 0);
어디서배웠어요??..
영상속에서는 히트박스가 플레이어에 따라서 좌우로 움직이는데 저는 앞에 고정되어있어요
어떻게 해야하나요?
증상만으로는 추측하여 답변 드릴 수 밖에 없습니다. 캐릭터 방향전환을 scale 또는 rotation을 이용해서 바꿔주셔야 합니다. 6:55 플레이어 하위에 빈 오브젝트를 생성하는 부분을 제대로 하셨는지 확인해 보세요.
@@DevGomDal 감사합니다 해결됐어요
혹시 이거 응용해서 연속공격도 만들 수 있나요??
연속공격이 기본공격키를 계속해서 누르면 이어지는 모션을 취하면서 타격하는 것을 말하시는 건가요? 가능할 것 같습니다. curTime이 0이 되기전에 다시 Z키가 눌린다면 애니메이션을 두번째 공격 모션으로 전환하고 오버랩박스에 적이 있다면 TakeDamage를 호출하면 될 것 같습니다.
@@DevGomDal if(corTime 0)
{
if((Input.GetKey(KeyCode.D))
{
공격2 명령어
}
}
else
{
corTime -= Time.deltaTime;
}
그럼 이런느낌으로 쿨타임이 0이면 1번공격을 쿨타임이 0이 아니면 2번공격을 한다 이런느낌으로 하면 될까요??
혹시 콜라이더박스를 하나 더 집어넣을 수는 없나요?? 공격1과 공격2의 범위를 다르게 하거나 점프공격도 넣고싶어서요
@@sbk0135 if (첫번째 curTime
플립 을 사용하여 캐릭터를 뒤집는 형태로 코드를 작성했는대
transform.eulerAngles = new Vector3(0, 180, 0);
transform.eulerAngles = new Vector3(0, 0, 0);
플립 으로 뒤집는 코드를 지우고 해야 하나요?
sprite.flipX = !sprite.flipX;코드를 사용했습니다
스프라이트가 포함된 오브젝트 로테이션의 y값을 180 회전 시키면 스프라이트가 뒤집힙니다. 이때 플립까지 해버리면 뒤집힌 스프라이트가 원래 상태로 돌아가 버립니다.
@@DevGomDal 곰돌님께서 설명해 주신대로 작성하여 코드를 작성 했는대 키를 입력 하고 있을때만 왼쪽으로 캐릭터가 회전하고 키보드 입력을 멈추면 다시 오른쪽으로 돌아가는 바람에
공격하기가 어렵습니다. 해결방법이 있을까요?
if(Input.GetAxisRaw("Horizontal") < 0)
{
transform.eulerAngles = new Vector3(0, 180, 0);
}
else
{
transform.eulerAngles = new Vector3(0, 0, 0);
}
transform.position += moveVec * moveSpeed * Time.deltaTime;
xAxis = Input.GetAxisRaw("Horizontal");
@@oopp21 else 뒤에 if(Input.GetAxisRaw("Horizontal") > 0) 를 추가해 보세요
else
if(Input.GetAxisRaw("Horizontal") > 0)
@@DevGomDal 곰돌님은 신이야!
감사합니다!!!!
혹시 melee가 플레이어 방향이 바뀔떄마다 위치가 바뀌게 하려 하는데 if (Input.GetButton("Horizontal"))
{
spriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == -1;
transform.eulerAngles = new Vector3(0, 180, 0);
} 여기서 뭐를 추가해야할지 모르겠어요 ㅠㅠ
spriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == -1;
이 부분은 없어도 됩니다.
if(Input.GetAxisRaw("Horizontal") < 0)
transform.eulerAngles = new Vector3(0, 180, 0);
else
transform.eulerAngles = new Vector3(0, 0, 0);
로테이션의 값만 바꿔주면 됩니다!
공격애니메이션이 종료된후에 이동이 가능하게 할려면 어떻게 하나요?
불린형 변수(ismove)를 한개 선언하고 이 변수(ismove)가 참일 때만 이동이 가능하게 조건문을 달아줍니다.
평소에는 변수(ismove)를 참으로 만들고 공격 애니메이션으로 전환되는 순간 변수(ismove)를 거짓으로 변환하게 만들고
애니메이터 창에서 공격 상태를 선택하면 인스펙터창에 Add Behaviour 버튼이 있습니다.
버튼을 누른 뒤 스크립트를 생성하고 열어주면
//override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
//{
//
//}
이 부분의 주석을 풀어준 뒤 여기에서 변수(ismove)를 다시 참이 되게 만들어 주면 됩니다.
animator.GetComponent(); 로 변수에 접근할 수 있습니다.
@@DevGomDal input.getkey 안에 ismove = false로 하면되나요?
네 공격 키가 눌리면 false로 만들어주면 됩니다!
@@DevGomDal 말씀해주신대로 해서 idle에서 공격하면 공격애니메이션이 끝나고 이동이 가능해지는데
run중에 공격하면 멈추지 않고 이동하면서 공격애니메이션이 진행되는데
run 중에 공격시 이동을 중지할려면 어떤방법을 쓰나요?
참일 때는 speed를 그대로 받고 아닐때는 0으로 받음으로 해결했습니다.
왜 질문하고나서야 방법이 떠오르는지....ㅋㅋㅋ
한번 근접 공격을 하고 idle로 다시돌아가는데 다시 근접 공격이안되요...
if(curTime) 부분에 로그로 정상적으로 진입하는지 확인해보시고 로그가 정상적으로 뜨지 않는다면 curTiem과 coolTime 부분을 확인해보세요.
@@jonghwikim 프로젝트를 보내 주실 수 있다면 메일로 보내주시면 확인 후 답장 드리겠습니다. giggles.yhg@gmail.com
void Update()
{
foreach (Collider2D collider in collider2Ds)
{
if (collider.tag == "Tooth")
{
anim.SetBool("eat", true);
if (cooltime
적으신 코드대로면 tag가 Tooth가 아니면 계속 else만 반복하는게 정상입니다.... 음? 메일로 보내주시면 확인해보겠습니다....
@@DevGomDal 앜ㅋ 그래요...? 냅 이메일로 보내드리겠 습니다 지금 아직 하고있어서 오류가 있을수도 있어요~ㅎㅎ
자꾸 공격 애니매이션이 반복될 때엔 어떻게 해야 되나요?
프로젝트를 봐야지 정확하겠지만 공격애니메이션에서 빠져나가는 트랜지션을 확인해보세요. 트랜지션의 조건이 맞지 않는다면 공격애니메이션만 반복되는 상황이 나올 수 있습니다.
오래전 댓글이지만 글 하나 남깁니다.
트랜지션에서 공격 애니메이션 모션으로 들어갈때, 나올때 모두 트리거 파라미터를 넣으시면 반복하는 현상이 발생합니다..
원인을 찾는 과정에서 혼자 고생을 했어서 나중에 보시는분들을 위해 남겨둡니다 ㅠㅠ
melee가 플레이어 방향이 바뀔떄마다 위치가 바뀔려면 어떻게 해야하나요?
플레이어의 방향을 transform . rotation . z 축을 변경하는 방법, 혹은 pos 의 localposition을 변경하는 방법등이 있습니다.
저는 공격 키를 마우스 왼쪽 키로 설정했는데요
다 작동 잘되는데, 마우스를 한번 클릭하면 공격 모션이 지속되요..
마우스를 한번 누르면 공격 모션이 계속 되고 마우스를 한번 더 눌러야 공격 모션이 끝납니다.
어떻게 해야 하나요??ㅠㅠㅠ
애니메이터의 파라미터를 trigger가 이닌 bool형식으로 설정하셨나요?
@@DevGomDal 아뇨 Trigger로 설정했어요 ㅠㅠ
@@오와우-e2f 혹시 마우스 클릭은 어떻게 구성하셨나요?
@@DevGomDal using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
public float maxSpeed;
public float jumpPower;
Rigidbody2D rigid;
SpriteRenderer SpriteRenderer;
Animator anim;
void Awake()
{
rigid = GetComponent();
SpriteRenderer = GetComponent();
anim = GetComponent();
}
private float curTime;
public float coolTime = 0.5f;
private void Update()
{
//Jump
if (Input.GetButtonDown("Jump") && !anim.GetBool("Jumping")) {
rigid.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);
anim.SetBool("Jumping", true);
//stop speed
if (Input.GetButtonUp("Horizontal"))
rigid.velocity = new Vector2(rigid.velocity.normalized.x * 0.5f, rigid.velocity.y);
}
//Direction Sprite
if (Input.GetButtonDown("Horizontal"))
SpriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == -1;
//Animation
if (Mathf.Abs(rigid.velocity.x) < 0.3)
anim.SetBool("Moving", false);
else
anim.SetBool("Moving", true);
//Atk
//공격
{
if(curTime maxSpeed) //Right Max Speed
rigid.velocity = new Vector2(maxSpeed, rigid.velocity.y);
else if (rigid.velocity.x < maxSpeed * (-1)) //Left Max speed
rigid.velocity = new Vector2(maxSpeed * (-1), rigid.velocity.y);
//Landing Platform
if(rigid.velocity.y < 0) {
Debug.DrawRay(rigid.position, Vector3.down, new Color(0, 1, 0));
RaycastHit2D rayHit = Physics2D.Raycast(rigid.position, Vector3.down, 1, LayerMask.GetMask("Platform"));
if (rayHit.collider != null) {
if (rayHit.distance < 0.5f)
anim.SetBool("Jumping", false);
프로그래밍 전체는 이렇게 했어요!
if (Input.GetKey(KeyCode.Mouse0)) 마우스 코딩은 이렇게 했습니다!
@@오와우-e2f 코드는 이상이 없네요.. 아무래도 애니메이터 쪽에서 설정이 잘못 된듯합니다.
void Update()
{
cooltime = cooltime - Time.deltaTime;
//anim.SetBool("Walk", false);
Collider2D[] collider2Ds = Physics2D.OverlapBoxAll(pos.position, boxSize, 0);
if (cooltime
else 문 안에 로그를 찍어보셔서 조건에 맞는 상황에서 제대로 들어가는지 확인해 보시고 로그는 제대로 찍힌다면 애니메이터 - 파라미터의 이름, 트랜지션의 설정 등을 확인해 보세요
@@DevGomDal 로그를 하면 안되요 ㅠㅠ 아예 실행이 안되는거 같아요 피라미터이름,트렌지션설정도 했어요
@@유빈-j9v if (cooltime
@@DevGomDal 어... 제가 이해력이 딸려서 ㅋㅎ 그.. 빠진다는게 무슨 말인가요? 계속 else로 간다는 뜻인가요?
@@유빈-j9v else 문의 로그도 안찍힌다면 else문으로 빠지지 않는다는 것입니다.
항상 아래의 조건문 안으로만 들어가는 듯 합니다.
if (cooltime
공격하는 중일땐 플레이어가 움직이지 못하도록 하고싶은데 if (Input.GetKey(KeyCode.Z))구문 안에 어떻게 추가해야 할까요?
bool형 변수를 선언하고(isAtk 이라고 하겠습니다.) Z키가 눌리는 순간 isAtk변수를 false로 변경한 뒤 공격모션이 끝나는 시점에 다시 true로 변경해줍니다.
그리고 이동코드에 isAtk변수가 거짓일 때만 코드가 작동하게 조건문을 달아주면 됩니다.
공격모션이 끝나는 시점은 여러가지 방법이 있지만 애니메이터에서 공격State를 클릭하고 인스펙터창의 AddBehaviour를 통해서 알 수 있습니다.
OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
이 부분이 상태에서 벗어날 때 호출되는 부분입니다.