inflearn logo
강의

講義

知識共有

絶対講座!Unity6 - ネットワークゲーム開発マスタークラス (Part3) : Netcodeで開発する2D RPG

Relay API活用 (2/3)

Warrior가 Gobin에게 달려가 충돌하면 Gobin이 뒤로 튀겨나가는 현상??

64

muttul589114

投稿した質問数 6

0

Warrior가 Gobin에게 달려가 충돌하면 Gobin이 뒤로 튀겨나가는 현상이 있습니다.
ChaseState 상태에서는 뒤로 튀겨나가도 다시 앞으로 가는데 Warrior가 계속 밀다가 사망 상태가 되면 Gobin은 IdleState가 되면서 계속해서 뒤로 밀리는 현상이 있습니다.

아래와 같이 IdleState 상태로 진입하면 enemy.StopMoving(); 를 추가 해서 멈추도록 했는데

public void Enter(Enemy enemy)
{
    Logger.Log("Idle 진입");
    enemy.animator.SetBool(Enemy.hashIsRun, false);
    // Idle 상태 진입 시 물리 엔진으로부터 발생하는 이동/힘을 즉시 차단합니다.
    // Enemy.StopMoving()을 호출하면 리지드바디 속도를 0으로 만들어 밀림을 방지합니다.
    enemy.StopMoving();
}


이 것도다 정확한 방법을 알 수 있을까요?

 

unity 네트워크 unity2d 유니티6

回答 2

0

indiegamemaker

안녕하세요.

물리 충돌이 발생하는 Collision 에서는 막을 수 있는 방법은 mass와 drag 값을 순간적(충돌 순간)에 충돌 당하는 쪽에 크게(Infinity) 설정해서 밀리지 않도록 할 수 있습니다. 하지만 이 방법도 완전한 해결책은 아니구요. linarVeclocity 역시 0으로 처리하셔야 하면 효과가 있습니다. 아래 코드는 테스트한 코드는 아닙니다만, 이런식으로 처리하시면 밀리는 현상은 현저히 줄일수 있으실 겁니다.

private void OnCollisionEnter2D(Collision2D other)
{
    if (other.collider.CompareTag("Player"))
    {
        this.gameObject.GetComponent<Rigidbody2D>().mass = float.MaxValue;
        this.gameObject.GetComponent<Rigidbody2D>().linearVelocity = Vector2.zero;
    }
}

private void OnCollisionExit2D(Collision2D other)
{
    if (other.collider.CompareTag("Player"))
    {
        this.gameObject.GetComponent<Rigidbody2D>().mass = 1f; // 원래 질량으로 복원
        this.gameObject.GetComponent<Rigidbody2D>().linearVelocity = Vector2.zero;
    }        
}

 

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 까만돌님.

질문해주신 “Warrior가 Gobin에게 달려가 충돌하면 Gobin이 뒤로 튀겨나가는 현상”에 대해 설명드리겠습니다. Unity에서 물리 기반으로 객체가 서로 충돌할 때 발생하는 물리 반응은 Rigidbody 컴포넌트 및 물리적 힘의 영향을 받습니다. Gobin이 뒤로 밀리는 현상은 객체 사이의 물리적 상호작용에서 일반적으로 발생할 수 있습니다.

문제 설명 및 해결 방안

문제 원인:

  1. 물리적 상호작용: 두 객체가 충돌하면서 생성된 힘이 Gobin을 뒤로 밀어내게 됩니다.
  2. 리지드바디 설정: Gobin의 Rigidbody 설정에 따라 관성이나 힘의 적용이 과도하게 적용될 수 있습니다.

해결 방법:

  1. Rigidbody를 사용한 속도 제어:

    • enemy.StopMoving();처럼 리지드바디의 속도를 0으로 설정하는 방법은 적절하며, 이를 통해 이동을 제어할 수 있습니다. 만약 이 방법이 이미 적용되고 있음에도 불구하고 문제가 해결되지 않는다면, 힘이나 이동 속도를 추가로 제어할 필요가 있습니다.
  2. 물리적 충돌 민감도 조정:

    • RigidbodyMassDrag 설정값을 조정하여 충돌 시 발생하는 힘의 크기를 조정할 수 있습니다. 적절한 값으로 설정하면 불필요한 밀림 현상을 줄일 수 있습니다.
  3. Physics Material 설정:

    • 두 충돌 객체에 부여된 Physics Material의 Bounciness 또는 Friction 값을 조절하여 충돌 시 반동이나 마찰을 줄일 수 있습니다.

기존 커뮤니티에서도 물리 충돌과 관련한 해결 방법이 아주 다양하게 논의되고 있으므로, 다음 링크를 참조하셔서 더 다양한 해결 방안을 연구해 볼 수 있습니다:
- 유니티 물리적 충돌 및 반응 최적화 방법

이 문제와 유사한 다른 사례들도 함께 확인하시면, 물리적 상호작용을 더 잘 이해하고 적용할 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

싱글턴패턴

0

3

1

강의자료 pdf

0

7

1

코드 관련 질문

0

21

2

수강기간 연장 가능하실까요?

0

20

2

섹션7 수업자료 업로드 부탁드립니다.

0

22

2

Dictionary Key를 int에서 string으로 변경한 이유에 대한 문의

0

19

1

네트워크 전체 흐름 복습 질문

0

29

2

맥북으로 RDP 연결 질문

0

29

2

수강 연장 가능하면 요청 드립니다.

0

28

2

5.6버전 Networking Insights 실행안됨 문제에 관하여

0

30

1

UI 기능 관련 질문이 있습니다!

0

37

2

03-01 (16. CharacterController)

0

31

2

침해사고 샘플분석 첫번째 파일 다운로드 불가

0

28

1

6.0LTS, 6.3LTS 패키지 매니져 에러

0

113

3

캐릭터 중복 생성 문제

0

75

2

완강 후 궁금한 것

0

75

1

39강 질문

0

59

1

기초적인 질문

0

85

2

Default Player Prefab 파괴시 재생성

0

67

2

캐릭터 네트워크 애니메이션 질문 (29강의)

0

56

1

Warrior의 InputHandler.cs 의 OnEnable(), OnDisable() 메서드 부분에서 공격에 문제가 있는 것 같아요.

1

61

2

Netcode 사용시 운영관점 질문

0

70

1

캐릭터 이동 방식을 A* Pathfinding 에셋으로도 한번 부탁드립니다.

1

88

1

여기에 쓰인 기술이 적합할지 궁금하네요.

0

108

2