이거 왜 이럼
아랜 코드임
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour { public float speed = 5; public float jumpSpeed = 10; int jumpCount = 0; public Transform currentFloor = null; Rigidbody2D rigid; Collider2D col; private void Awake() { rigid = GetComponent<Rigidbody2D>(); col = GetComponent<Collider2D>(); } void Update() { if (Input.GetKeyDown(KeyCode.Space)) { if (Input.GetKey(KeyCode.DownArrow)) { List<ContactPoint2D> contacts = new List<ContactPoint2D>(); rigid.GetContacts(contacts); foreach (var obj in contacts) { if (obj.collider.CompareTag("Platform")) { obj.collider.GetComponent<Platform>().ExcludeLayerForFrames(gameObject, 25); } } } else { if (jumpCount > 0) { jumpCount--; rigid.velocity = new Vector2(rigid.velocity.x, jumpSpeed); } } } } private void FixedUpdate() { float x = Input.GetAxisRaw("Horizontal"); transform.position += Vector3.right * (x * Time.fixedDeltaTime * speed); currentFloor = null; if (rigid.velocity.y == 0) { List<ContactPoint2D> contacts = new List<ContactPoint2D>(); rigid.GetContacts(contacts); foreach (var obj in contacts) { if (obj.collider.CompareTag("Platform") || obj.collider.CompareTag("Floor")) { jumpCount = 2; currentFloor = obj.collider.transform; } } } } } | cs |
이동은 transform으로 하고 점프는 velocity로 하고 있음
왜이러는지 감도 안오네 velocity 내부 연산 이슈인가
흔한 문제일거 같아서 검색해봤는데 모르겠네
normalize된 방향에 speed를 곱해주지 않아서 그런듯
뭐 말하는건지 몰르겠음
아깐 짤 없어서 걍 대각선이야기인줄 플랫포머 안만들어봐서 모르겠는데 땅에 착지 외에 최고점일때에도 y속도 0이 될 수도 있으니 그것때문에 currentFloor 설정되다보니 생기는 문제아님? 그거아니면 모르겠음
아무것도 안닿는 곳에서 좌우로흔들면서 점프해도 동일문제면 이 이유는 아닐듯
애초에 다른 코드 문제는 아님 나머지 코드 다 날리고 해도 똑같음. 개인적인 생각으론 rigidbody 내부 velocity 값이 좌표에 적용되는 과정에 좌표 변환 일어나면 좌표 갱신이 한번 더 되거나 해서 velocity 값이 두번 적용되고 그러는거같은 느낌인데 실험해 볼 수도 없고 모르겠네
아 찾았음 rigidbody에 interpolate를 extrapolate로 해놔서 뭐가 보간된듯
https://www.youtube.com/shorts/0cYjreg7dpg
이건 점프 높이가 늘어나는 문제가 아니지 않음? 이동 거리가 늘어나는거지.. 영상 인코딩 안끝나서 움짤로 쪄와봤음
음.. 컴퓨터 입장에선 같은 x, y축 이동임 그저 초당 일정 속도로 -y축으로 이동하면서 중력을 흉내낼 뿐이지 코드에 정규화 부분이 없는 거 봐선 이 문제 맞을 것 같은데... 뭐 다른 고수들이 알려줄 거임
애초에 가로축 이동이랑 세로축 이동을 서로 다른 방식으로 짜서 정규화 할 것도 없긴 한데..
음... 그럼 하나의 업데이트로 옮겨보는 건 어떰
해결함 rigidbody에 interpolate를 extrapolate로 해놔서 뭐 연산이 더 들어간듯..
영상이 인코딩중이라 못보지만, velocity가 계속 jumpspeed로 초기화 되서 그런거같은데, 중력 먹은다음 -> jumpspeed 초기화 이거 반복 되는거 아님?
움짤로 올림
움짤보니까 맞는거같은데 jumpCount-- 이 부분 주석처리하고 한번 좌우 계속 눌러보셈 그럼 계속 올라가지 않음?
안그럼 velocity 바꿔주는건 스페이스바 입력한 프레임에서만 작동하는거임