2017-12-18 21 views
1

Unity2D의 Physics2D 엔진에있는 중력이 다음 두 코드 행이 번갈아 실행될 때 왜 다른 동작을합니까? 다음Physics2D가 왜 속도에 대한 AddForce()에 대해 다른 결과를 생성합니까?

private float speed = 500f; 
RigidBody2D playerChar = null; 

그리고 내 캐릭터 도보 만들기 :

예를 들어, 내 플레이어 스프라이트에 플레이어 컨트롤러의 C# 스크립트를 첨부

Vector2 vec = new Vector2 (Input.GetAxis("Horizontal"), 0); 
playerChar.AddForce(vec * speed); 

을 그리고 중력이 설정되어 50

결과 1 : 내 캐릭터 아바타가 정상적으로 작동하지 않습니다.

한편 내가 할 때

Vector2 vec = new Vector2 (Input.GetAxis("Horizontal"), 0); 
playerChar.velocity = (vec * speed); 

그리고 중력은 여전히 ​​결과 2

50 설정 : 내 캐릭터가 지금 가을에 시간이 오래 걸리는 (천천히 아래로 "수레") .

왜 그럴까요?

+0

저는 단결력 개발자가 아니지만 속도를 추가하는 동안 힘을 가하면 가속도가 높아 지므로 추측 할 수 있습니다. 당신의 캐릭터가 떠돌아 다닌다는 말은 처음에는 느리게 떠 다니고 얼마나 빨리 뜨는 지 천천히 증가합니까? – FredMan

+0

느린 속도로 부동합니다. AddForce()를 수행하면 속도가 느려집니다. – YourWorstNightmare

답변

3

강체의 속도의 y 성분을 0으로 강제하고 있기 때문입니다.

힘을 추가 할 때 을 추가합니다. 바꾸지 않습니다.

속도를 설정하면 특히 y 값이 0 인 Vector2로 설정하면 고정 된 업데이트 사이클에서 중력이 발생하고 약간의 중력이 추가되어 플레이어가 천천히 떨어집니다. 그러면 Update가 다시 발생하고 y 값을 다시 0으로 강제합니다.