반응형
움직이는 발판을 만들었을 때, 게임 캐릭터가 발판을 밟는 순간 굉장히 어색한 장면을 보게 되는 경우가 있습니다. 발판 위에서 마이웨이 주장하는 캐릭터...
이 글은 비전공 + 무경험 + 독학자로서 공부 및 기록을 겸하며 작성되고 있으므로, 전문적인 내용이 아님을 알려드립니다.
- 첫번째 시도
- 인터넷 서칭을 해보니 발판 오브젝트에 마찰력을 부여하라는 글이 있어서 따라 해 봤는데 실패했습니다. 2D라서 그런건지 잘은 모르겠습니다.
- 두번째 시도
- 발판에 리지드바디를 추가해 속력을 구한 다음 캐릭터에 동일한 속력을 대입해주려고 했는데, 또 뭘 잘못 한건지 캐릭터가 발판 위에서 소심하게 주춤주춤해 합니다. 머..머여... 내 마음인가...
- 세번째 시도
- 캐릭터가 발판을 밟는 순간의 캐릭터 위치, 발판 중앙의 위치, 그 두 위치의 거리를 각각의 변수에 저장 하고, 캐릭터에 이동 입력이 없는 한 그 거리를 유지하게 함
- 이것은 성공했습니다.
public class PlayerController : MonoBehaviour {
private bool isGrounded = false;
private GameObject contactPlatform;
private Vector3 platformPosition;
private Vector3 distance;
void Update() {
//움직이는 발판에서 같이 움직이기
if (contactPlatform != null) {
//바닥을 밟고 있고, 좌우로 움직이고 있지 않은 경우
if (isGrounded && playerInput.inputRight + playerInput.inputLeft == 0) {
//캐릭터의 위치는 밟고 있는 플랫폼과 distance 만큼 떨어진 위치
transform.position = contactPlatform.transform.position - distance;
}
}
}
private void OnCollisionEnter2D(Collision2D collision) {
//플랫폼이 45도 이내의 기울기일 때에만 바닥으로 판정
if (collision.contacts[0].normal.y > 0.7f) {
isGrounded = true;
//접촉한 오브젝트의 태그가 platform 일 때,
if (collision.gameObject.tag == "Platform") {
//접촉한 순간의 오브젝트 위치를 저장
contactPlatform = collision.gameObject;
platformPosition = contactPlatform.transform.position;
//접촉한 순간의 오브젝트 위치와 캐릭터 위치의 차이를 distance에 저장
distance = platformPosition - transform.position;
}
}
}
}
반응형
'1인개발 > 유니티' 카테고리의 다른 글
꾸역꾸역 유니티 점프 게임 만들기 - 4 (0) | 2020.07.18 |
---|---|
꾸역꾸역 유니티 점프 게임 만들기 - 3 (0) | 2020.07.17 |
꾸역꾸역 유니티 점프 게임 만들기 - 2 (0) | 2020.07.08 |
유니티 오디오 클립 Argument Null Exception: Value cannot be null 오류 (0) | 2020.07.08 |
유니티 애니메이션 만들기 (Multiple Sprite) (0) | 2020.07.08 |
댓글