(움짤임)
내가 한거라곤 moveObject 스트립트에 FixedUpdate만 아래로 고친거
public bool isPlayer;
void FixedUpdate()
{
if (isPlayer)
{
Vector2 vel = Vector2.zero;
if (Input.GetKey(KeyCode.W))
{
vel.y += 1;
}
if (Input.GetKey(KeyCode.S))
{
vel.y -= 1;
}
if (Input.GetKey(KeyCode.A))
{
vel.x -= 1;
}
if (Input.GetKey(KeyCode.D))
{
vel.x += 1;
}
if (vel != Vector2.zero)
{
_rigidbody.MovePosition((Vector2)transform.position + vel * Time.deltaTime);
}
}
else
_rigidbody.MovePosition((Vector2)transform.position + moveDir * Time.deltaTime);
}
물론 이렇게 고치기 전에도 비벼주면 조금씩 밀렸음
고친후에는 각도에 따라선 불도저처럼 밀고감
야스 하는 것도 아니고 왜 저러냐;
_rigidbody.velocity = vel 이렇개 하면 안됨까
기존 코드가 MovePosition이라서 이거에 맞춤
제 컴에선 안그러는데 이유가 뭔지 모르겠네.. 일단 논리적으로 틀린건 없는거 같은데 나중에 알게되면 공유 ㄱㄱ 혹시모르니 유니티 버전 남김 : 2019.3.13f1
저두 이론상으론 말이 된다 싶어서 해봤는데 아닌듯... 무조건 밀어지는건 아닌데 아주 높은 확률로 밀수 있고 느리게해서 보면 다이나믹 바디가 키네마틱을 뚫고 침투함
저가 쓴 유니티는 2019.4 LTS
FixedUpdate 는 물리 실시간 연 함수라서 Update랑 간격 차가 달라서 그런거 아냐?
Time.deltaTime은 마지막으로 Update 함수를 실행시킨지 얼마나 시간이 지났는지 반환하는 변수고, FixedUpdate는 무조건 1/50초에 한번씩 실행되니까 Time.deltaTime를 쓰면 마지막으로 FixedUpdate를 실행시킨 시간이 나오지 않고 Update 함수를 실행시킨 시간이 나와서 그런거 같은데
그러니 Time.fixedDeltaTime 쓰자 이거야
0.01을 곱하나 0.02를 곱하나 그것이 뚫고가는 이유를 설명할수 잇다고 생각한다면 해줄 말이 없음
뚫고가는건 모르겠는데, 2d 게임 대부분 프레임 500주위 되는데, Time.deltaTime 1/500이랑, Time.fixedDeltaTime 1/50 이랑 값이 10배이상 차이남
중요한건 시간을 얼마나 곱햇느냐 같은 쓰잘데기 없는 부분이 아니라 이론적으로 다이나믹이 키네마틱을 뚫을수 없어야 하는데 뚫고가는게 문제임, 여기서 fixedupdate를 update로 바꿔도, deltatime을 fixeddeltatime으로 고쳐도 결과는 당연히 같음
궁금하면 념글에 물리 어쩌고 글에 잇는 깃헙 받아보고 직접 테스트해보셈
아 다른 사람념글 니가 테스트 해준거구나. 도와줄려고 했는데 존나 싸가지 없게 말하길래 뭔가 했네ㅋㅋ
난 왜 저 캐릭터가 덜덜덜 떨리는지 물어보는건줄 알고 fixedUpdate Update 차이 말해준거엿음