반응형



- 적 장애물을 만들기 위해서 스프라이트 이미지를 애니메이션으로 만들어줍니다.
- 하이어리키 창에 Delivery_0 ~ 2 까지 드래그&드롭으로 옮겨서 Motorbike 이름으로 애니메이션을 생성하였습니다.
- 전체 게임 비율에 맞춰서 크기를 세부 조정하였습니다.


- 장애물에 이전 만들어 둔 Mover, Destroyer 스크립트를 적용하였습니다.
- 플레이어와 충돌 감지를 위해서 콜라이더를 적용하였습니다.
- 폴리곤 콜라이더는 이미지에 정교한 콜라이더를 적용하는게 가능하며 Edit 으로 직접 수정할 수 있습니다.
- 폴리곤 콜라이더 적용과 함께 생성된 Rigidbody를 삭제합니다.
- 충돌 감지는 할 수 있지만 플레이어가 통과해야 하기 때문에 Is Trigger를 체크해줍니다.


- 동일하게 두번째 할머니 장애물도 설정하겠습니다.
- 할머니는 폴리곤 콜라이더 말고 캡슐 콜라이더를 적용하였습니다.
- 두 장매물을 프리팹으로 만들어주었습니다.
(이미지에서 BoxCollider 2D를 해야 하는데 BoxCollider 를 적용되어 있습니다. 수정이 필요합니다.)

- 빌딩 건물과 마찬가지로 Enemy Spawner를 생성하여 오브젝트를 등록하여 설정하였습니다.
- 게임에 맞춰서 생성되는 속도와 생성 위치, 각 장애물의 속도를 세부 조정 하였습니다.


- 충돌 구분을 위하여 장애물 오브젝트에 Enemy Tag를 만들어서 적용하였습니다.


- 아이템을 만들기 위해서 아이템 스프라이트에 장애물과 동일한 스크립트를 적용하고 박스 콜라이더를 설정하였습니다.
- 설정을 마친 각 아이템은 프리팹으로 만들었습니다.
(이미지에서 BoxCollider 2D를 해야 하는데 BoxCollider 를 적용되어 있습니다. 수정이 필요합니다.)


- 아이템도 마찬가지로 충돌 확인을 위하여 "food" 이름의 Tag를 설정하였습니다.
- 아이템이 생성되는 장소를 만들기 위해 Food Spawner 를 만들고 아이템 프리팹을 적용하였습니다.


- 특별한 아이템도 동일한 방식으로 만들었습니다.
- 별도로 관리하기 위하여 Tag와 생성 위치는 따로 만들었습니다.
using UnityEngine;
public class Player : MonoBehaviour
{
[Header("Settings")]
public float JumpForce;
[Header("References")]
public Rigidbody2D PlayerRigidBody;
public Animator PlayerAnimator;
public BoxCollider2D PlayerCollider;
private bool isGrounded = true;
private int lives = 3;
private bool isInvincible = false;
void Start()
{
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
{
PlayerRigidBody.AddForceY(JumpForce, ForceMode2D.Impulse);
isGrounded = false;
PlayerAnimator.SetInteger("state", 1);
}
}
void KillPlayer()
{
PlayerCollider.enabled = false;
PlayerAnimator.enabled = false;
PlayerRigidBody.AddForceY(JumpForce, ForceMode2D.Impulse);
}
void Hit()
{
lives -= 1;
if(lives == 0)
{
KillPlayer();
}
}
void Heal()
{
lives = Mathf.Min(3, lives + 1);
}
void StartInvincible()
{
isInvincible = true;
Invoke("StopInvincible", 5f);
}
void StopInvincible()
{
isInvincible = false;
}
private void OnCollisionEnter2D(Collision2D collision)
{
if(collision.gameObject.name == "Platform")
{
if (!isGrounded)
{
PlayerAnimator.SetInteger("state", 2);
}
isGrounded =true;
}
}
private void OnTriggerEnter2D(Collider2D collider)
{
if(collider.gameObject.tag == "enemy")
{
if(!isInvincible)
{
Destroy(collider.gameObject);
}
Hit();
}
else if(collider.gameObject.tag == "food")
{
Destroy(collider.gameObject);
Heal();
}
else if(collider.gameObject.tag == "golden")
{
Destroy(collider.gameObject);
StartInvincible();
}
}
}


반응형
'Unity Project > Unity6 Challenge (김치-런)' 카테고리의 다른 글
| [Unity 6 Challenge] 게임 점수와 UI (3) | 2024.12.26 |
|---|---|
| [Unity 6 Challenge] 게임 매니저(Game Manager) (1) | 2024.12.26 |
| [Unity 6 Challenge] 장애물 만들기(1) (2) | 2024.12.19 |
| [Unity 6 Challenge] 캐릭터 플레이어 애니메이션 (0) | 2024.12.18 |
| [Unity 6 Challenge] 캐릭터 플레이어(Player) Jump. (2) | 2024.12.18 |