public float jumpPower;
void Update()
{
//Jump
if (Input.GetButtonDown("Jump")){
rigid.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);
}
}
공기저항 때문에 낙하 속도가 조금 느립니다. 이를 빠르게 낙하하도록 조정해보겠습니다.
점프 낙하 속도 빠르게 조절
1. Project Setting -> Gravity y
Default 값은 -9.81로 값이 커질 수록 중력이 세집니다.
2. Gravity Scale
중력을 몇배로 받을 것인지 값으로 정합니다.
점프 애니메이션
1. 애니메이션 Transition 연결
2. 애니메이션 변경 조건이 될 변수 생성(bool 타입)
3. Conditons 추가
4. 스크립트 작성
public float jumpPower;
void Update()
{
//Jump
if (Input.GetButtonDown("Jump")){
rigid.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);
anim.SetBool("isJump", true);
}
}
5. Loop와 Speed 수정
점프의 경우 Loop 해제
이중점프 방지
GetBool 함수로 isJump변수의 bool값을 가져왔을때, true라면 점프중이니, false일때만 점프가능하게 조정.
public float jumpPower;
void Update()
{
//Jump
if (Input.GetButtonDown("Jump") && !anim.GetBool("isJump")){
rigid.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);
anim.SetBool("isJump", true);
}
}
바닥 착지 후 isJump를 false로 되돌리기
Raycast로 바닥 착지 인식하기
RayCast : 오브젝트 검색을 위해 Ray를 쏘는 방식
DrawRay() : 에디터 상에서만 Ray를 그려주는 함수
RayCastHit : Ray에 닿은 오브젝트
LayerMask : 물리 효과를 구분하는 정수값
GetMask() : 레이어 이름에 해당하는 정수값을 리턴하는 함수
distance : Ray에 닿았을 때의 거리
DrawRay(Ray 그려지기 시작하는 위치, Ray가 그려지는 방향, 색상)
Raycast(Ray 그려지기 시작하는 위치, Ray가 그려지는 방향, 길이, 정수 타입 레이어 필터링 넘버)
스크립트
void FixedUpdate(){
//Landing Platform
if(rigid.velocity.y < 0) // 플레이어가 낙하중일 때 == velocity.y가 음수
{
Debug.DrawRay(rigid.position, Vector3.down, new Color(0, 1, 0)); //ray를 그리기
RaycastHit2D rayHit = Physics2D.Raycast(rigid.position, Vector3.down, 1, LayerMask.GetMask("Platform")); //ray 쏘기
if (rayHit.collider != null) { // RayCastHit 변수의 콜라이더로 검색 확인 가능
if (rayHit.distance < 0.5f) { // ray가 0.5 이상 들어갔을 때
anim.SetBool("isJump", false); // 애니메이션 되돌리기
}
}
}
}
Layer 만들기
Add Layer -> Layer 이름 작성 -> 사용
결과
'유니티 2D 기본(Platformer Game)' 카테고리의 다른 글
5. 몬스터 AI 구현하기 (0) | 2021.11.30 |
---|---|
4. TileMap으로 플랫폼 만들기 (0) | 2021.11.26 |
3. 2D에서 플레이어 이동 구현 (0) | 2021.11.25 |
2. 아틀라스와 애니메이션 (1) | 2021.11.24 |
1. 2D 프로젝트 생성 (0) | 2021.11.23 |