OnCollision을 이용해 구현해보려 하였으나
코루틴이 매 프레임마다 점검하고
OnCollisionStay2D도 매 프레임마다 점검하다 보니 대실패!
레이를 추가해서 작성했다.
private bool OnGround()
{
//Todo : 캐릭터 스프라이트 정해지고 나서 레이 갯수를 늘려서 스프라이트 끝에서 끝까지
RaycastHit2D hit = Physics2D.Raycast(new Vector2(Player.transform.position.x, Player.transform.position.y - 1f), Vector2.down, 0.3f);
if (hit.collider?.gameObject != null)
{
return true;
}
else return false;
}
private bool OnPlatform()
{
RaycastHit2D hit = Physics2D.Raycast(new Vector2(Player.transform.position.x, Player.transform.position.y - 1f), Vector2.down, 0.3f);
if (hit.collider?.gameObject.layer == 7)
{
return true;
}
else return false;
}
private bool IsPassable()
{
RaycastHit2D[] detector =
{
Physics2D.Raycast(new Vector2(Player.transform.position.x, Player.transform.position.y - 0.8f), Vector2.up, 1.4f, Platform),
Physics2D.Raycast(new Vector2(Player.transform.position.x - 0.5f, Player.transform.position.y), Vector2.right, 1f, Platform)
};
bool passable = false;
for (int i = 0; i < detector.Length; i++)
{
if (detector[i].collider?.gameObject.layer == 7)
{
passable = true;
}
}
return passable;
}
디버그 레이로 확인해보자.
private void Update()
{
Debug.DrawRay(new Vector2(Player.transform.position.x, Player.transform.position.y - 1), Vector2.up * 1.5f, Color.red);
Debug.DrawRay(new Vector2(Player.transform.position.x - 0.5f, Player.transform.position.y), Vector2.right, Color.red);
Debug.DrawRay(new Vector2(Player.transform.position.x, Player.transform.position.y - 0.8f), Vector2.up * 1.4f, Color.red, 1f);
}
대충 이 정도 범위(가로선 너비, 세로선 잔상 높이)
옆의 잔상은 float값을 입력했기 때문에 존재한다.
이 범위 안에 레이어를 검출하여 플랫폼 레이어라면 투과가 가능하고 아니라면 투과가 불가능하게 설정했다.
private IEnumerator CoPlayerChecker()
{
while (true)
{
if (Player.Rigidbody.velocity.y > 0 && IsPassable() == true)
{
_collider.isTrigger = true;
}
else if (_downJump == true)
{
_animator.SetBool("Falling", true);
yield return wait;
_downJump = false;
}
else if (Player.Rigidbody.velocity.y < -1 && _downJump == false)
{
_animator.SetBool("Falling", true);
_collider.isTrigger = false;
}
else
{
_animator.SetBool("Falling", false);
}
yield return null;
}
}
땅은 디폴트 레이어고
플랫폼은 플랫폼 레이어로 준비해줬다.
실행해보자.
잘 실행되는 것 같아 보인다.
추후 개선점으로는 벽에 비비면 바닥에 안떨어지는 점을 수정하면 좋을 것 같다.
아니면 이대로 벽에 비비고 있는 상태를 추가해서 위나 아래 방향키를 통해 벽을 타게끔 하는것도 좋을 것 같다.
TTE
1129 TIL - 스크롤 뷰 (1) | 2024.11.29 |
---|---|
1120 TIL - 프로퍼티 (0) | 2024.11.20 |
1118 TIL - 플랫포머 2D 캐릭터 이동하기 (0) | 2024.11.18 |
1112 TIL - 개인 프로젝트 진행 중 (0) | 2024.11.12 |
1107 TIL - 팀 프로젝트 완료 (0) | 2024.11.07 |