인프런 커뮤니티 질문&답변

idim7님의 프로필 이미지

작성한 질문수

따라하면서 배우는 고박사의 2D 플랫포머 게임 제작

02-03 추락하는 발판 (Platform_01_Drop)

02-03 추락하는 발판에서 isKinematic = true;로 하면, 중력영향 안받으니

작성

·

24

·

수정됨

0

내용이 너무 좋은 것 같아서 즐겁게 배우고 있다는 이야기부터 전합니다.

 

 

 rb.isKinematic = true;

 rb.velocity = Vector2.zero; // 사실상 불필요?.

 

위에서처럼 rb.velocity 값을 Vector2.zero로 할 필요가 없지 않나요?

챗지피티에게 물어보면 불필요하다고 하는데... 정확한지 몰라서 여쭙니다.

답변 2

0

고박사님의 프로필 이미지
고박사
지식공유자

PlatformDrop 클래스에서 OnRespawn() 메소드에 있는

rigid2D.velocity = Vector2.zero; 문장을 지우고 실행해보면

발판을 밟아서 떨어뜨리고, 다시 리스폰 되었을 때 속력 값이 초기화 안되서

리스폰 되자마자 아래로 떨어집니다.

idim7님의 프로필 이미지
idim7
질문자

지금 플레이 해봤는데요... 리스폰될 때 떨어지지 않고 잘 유지되고 있어요. 플레이어 밟아도 정상 작동하고요.

0

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

질문을 주신 내용을 보니, Rigidbody2D 컴포넌트의 isKinematic 속성과 velocity 설정에 대한 논의가 있는 것 같습니다. 여러분이 유니티에서 물리학적 움직임을 관리할 때 자주 만나게 되는 상황인데요.

isKinematic이 주는 영향

  • isKinematic이 true로 설정되면, Rigidbody2D는 물리 엔진의 영향을 받지 않게 되어 중력이나 충돌 등의 물리적인 상호작용을 무시합니다. 즉, 스크립트나 인스펙터를 통해 직접 transform.position을 설정하지 않는 한, 객체는 계속 제자리입니다.

velocity 설정은 필요한가?

  • rb.velocity = Vector2.zero; 설정은 명시적으로 현재 속도를 0으로 만드는 것입니다. isKinematic을 true로 설정할 경우, 기본적으로 속도는 물리 엔진의 영향을 받지 않아 변경되지 않지만, 명시적으로 속도를 0으로 설정하는 것은 다음의 이점을 가집니다:
    • 안정성: 코드를 읽는 사람이 객체의 상태를 명확히 이해할 수 있습니다.
    • 호환성: 이후에 isKinematic을 false로 변경할 경우, unexpected한 움직임을 방지할 수 있습니다.

따라서, isKinematic을 true로 설정한 상태에서 엄밀히 필요하지 않을 수 있지만, 명확성을 위해 이렇게 설정해 두는 것이 좋습니다.

유사한 질문과 해결 링크

아래는 유사한 질문과 관련된 논의를 참고할 수 있는 링크입니다:
- 리지디바디2디에 벨로시티가 없다고 나오네요..

다양한 접근 방법이 있으니, 이러한 참고 자료들과 함께 실전에서 테스트해 보시기를 권장드립니다.

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

idim7님의 프로필 이미지

작성한 질문수

질문하기