기능
기본 좀비맛 스프라이트 이용하여 애니메이션 설정, 쿠키 슬라이드 기능
점프, 슬라이드, 걷기 모두 애니메이션 설정함
점프는 스페이스바 누를때
슬라이드는 아래방향키 누르고 있을때 실행되게
코드
PlayerController.cs
using System.Collections;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public Rigidbody2D rb;
public float jumpHeight = 3f;
float highestJumpHeight;
bool grounded = false;
bool invincible = false;
public GameObject normalObject;
public GameObject jumpObject;
public GameObject doubleJumpObject;
public GameObject slideObject;
private bool isSliding = false;
void Start()
{
if (!rb)
{
rb = GetComponent<Rigidbody2D>();
}
}
void Update()
{
bool slideInput = Input.GetKey(KeyCode.DownArrow);
bool jumpInput = Input.GetKeyDown(KeyCode.Space);
if (slideInput && grounded)
{
// 슬라이드 중일 때
isSliding = true;
ActivateSlide();
}
else
{
// 슬라이드 중이 아닐 때
isSliding = false;
DeactivateSlide();
if (grounded)
{
// 땅에 있을 때
OnTheGround(jumpInput);
}
else
{
// 땅에 없을 때
NotOnTheGround(jumpInput);
}
}
}
// 땅에 있을 때의 입력 처리
void OnTheGround(bool jumpInput)
{
normalObject.SetActive(true);
jumpObject.SetActive(false);
doubleJumpObject.SetActive(false);
if (jumpInput)
{
Jump();
}
}
// 땅에 없을 때의 입력 처리
void NotOnTheGround(bool jumpInput)
{
if (jumpObject.activeSelf && jumpInput)
{
DoubleJump();
}
}
// 점프
void Jump()
{
rb.velocity = Vector3.zero;
rb.AddForce(Vector2.up * jumpHeight, ForceMode2D.Impulse);
grounded = false;
jumpObject.SetActive(true);
normalObject.SetActive(false);
doubleJumpObject.SetActive(false);
// 최고 높이 갱신
highestJumpHeight = rb.position.y + jumpHeight;
}
// 더블 점프
void DoubleJump()
{
float doubleJumpForce = jumpHeight;
rb.velocity = Vector3.zero;
rb.AddForce(Vector2.up * doubleJumpForce, ForceMode2D.Impulse);
jumpObject.SetActive(false);
doubleJumpObject.SetActive(true);
normalObject.SetActive(false);
}
// 충돌 감지
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Obstacle") && !invincible)
{
Debug.Log("충돌!");
StartCoroutine(InvincibleTime());
collision.collider.enabled = false;
}
else if (collision.gameObject.CompareTag("Ground"))
{
grounded = true;
highestJumpHeight = rb.position.y;
}
}
// 무적상태
IEnumerator InvincibleTime()
{
invincible = true;
yield return new WaitForSeconds(1f);
invincible = false;
}
// 슬라이드 활성화
void ActivateSlide()
{
slideObject.SetActive(true);
normalObject.SetActive(false);
jumpObject.SetActive(false);
doubleJumpObject.SetActive(false);
}
// 슬라이드 비활성화
void DeactivateSlide()
{
slideObject.SetActive(false);
}
}
저는 영어를 못하기때문에 최대한 쉬운 함수명을 사용합니다.. 헤헤 문법에 안맞을 수도 있음..
어려웠거나 알게된 점

애니메이션을 어떻게 넣어야 자연스러울지 고민하는게 제일 어려웠습니다.... 스프라이트가 일정하게 나뉜 이미지파일이 아니였기에 랜덤으로 붙여넣으면서 열심히 고민했습니다.
실제로는 저만큼 다 넣으니 애니메이션이 조금 길어져서 비슷한 부분 몇개 뺐습니동.
그리고 상황별 이미지 변경을 이렇게 하는게 아닐 것 같다는 생각이 듭니다.
오브젝트를 여러개 둬서 활성화 비활성화 하는걸로 했는데 아직은 조금 부족한 듯 ㅜㅜ
그리고 1단 점프 높이에 따라 2단점프의 높이가 달라지는것도 수정함!!
계획
[ 개발 일정 계획표 ]2024-04-09- 플레이어 점프 기능, 그라운드 스크롤, 배경 스크롤 2024-04-10- 더블 점프 기능, 장애물 설치(csv파일로 연결해서 장애물 생성), 장애물 충돌 이벤트 설정2024-04-11- 로딩화면(스플래시) 제작 및 설정, 전체적인 씬 UI 구현2024-04-12- 기본 좀비맛 스프라이트 이용하여 애니메이션 설정, 쿠키 슬라이드 기능
2024-04-13
- 점수 기능, 맵 제작(배경, 바닥)
2024-04-14
- 화폐 관리, 뽑기 기능
2024-04-15
- 내 쿠키 확인 기능
> 이전글
https://milkyquartz.tistory.com/202
[Unity] step3. 좀비런: UI와 로딩화면 제작
로딩화면 아이패드로 그릴까~ 했는데 아이패드로 유튜브 틀고있어서 일러스트로 그렸다. 일러스트를 잘 만지는게 아니라서 좀 많이 노가다 제작한듯.. 버튼 UI 이것들을 돌려쓸 것이기때문에...
milkyquartz.tistory.com
'Unity > Project' 카테고리의 다른 글
[Unity] step5-1. 좀비런: 찌끄만 버그들 픽스와 맵 디자인^^ - 계획을 지키지 못한 바보의 일기 (3) | 2024.04.14 |
---|---|
[Unity] step5. 좀비런: 점수 기능, 맵 제작(배경, 바닥) (2) | 2024.04.13 |
[Unity] step3. 좀비런: UI와 로딩화면 제작 (2) | 2024.04.11 |
[Unity] step2. 좀비런: 더블 점프 기능, 장애물 설치 (Feat. 내배캠 - TIL) (2) | 2024.04.10 |
[Unity] step1. 좀비런: 플레이어 점프 기능, 바닥 스크롤, 배경 스크롤 (Feat. 내배캠 - TIL) (0) | 2024.04.09 |