지난 포스팅에서는 GameController가 가진 Score(int)의 값으로 Canvas 위에 해당 값을 표시하는 내용까지 다뤘습니다.
그러면 이제 Score(int)의 값을 변화시키려면 GameController의 GetScore 함수를 호출 해야합니다.
public void GetScore() {
score += 100; SetText();
}
우선 Gem, 우리의 점수를 올려줄 오브젝트를 준비해봅시다.
Gem의 sprite파일은 Sunnyland -> artwork -> Sprites -> Items -> gem폴더에 있습니다.
제가 포스팅한 글을 참고하면 쉽게 만들수 있을겁니다.
단순히 Gem폴더안의 sprite를 무한루프하며 재생하는 Animator를 만드시면 됩니다.
자 그리고 이렇게 만든 Gem 오브젝트에 Box Collider 2D 컴포넌트를 추가한 뒤, Is Trigger를 체크 해줍니다.
여기서 Collider의 Trigger 속성을 넣어주면
Collider를 가진 게임 오브젝트 간의 물리적 연산을 하지 않고 충돌을 감지하게 됩니다.
즉, 서로 밀려나지 않고, 그냥 통과하게 됩니다. 그래서 Trigger는 주로 특정 구역에 들어가는 경우, 충돌은 필요하지만 물리적 연산은 필요하지 않을 경우 사용합니다.
저는 캐릭터가 Gem을 획득하길 원하고 Gem 위에 올라타는 것을 원하지 않기 때문에 Trigger속성을 사용했습니다.
그리고 캐릭터에게도 Box Collider 2D를 하나 더 추가해 줍니다.
마찬가지로 Trigger를 지정해주었습니다. 그 이유는,
1. 기존에 캐릭터가 가지고 있던 Box Collider 2D는 발판을 감지하기 위해 물리적 충돌만을 생각하고 만듬
2. 캐릭터 이미지 크기와 크기가 맞는 영역을 지정해서 Gem과 충돌을 감지하기 위함
현재 저희의 캐릭터와 Gem은 충돌을 감지하고 있을 것입니다. 하지만, 어떤 물체인지 판단하기 위해서 Tag를 사용하도록 하겠습니다
Gem 오브젝트를 선택하고, 인스펙터 창의 Tag -> Add Tag를 통해 Gem Tag를 새로 만들어줍니다.
이제 Tag를 이용한 충돌 오브젝트 판단을 해보겠습니다.
PlayerController를 살펴봅시다.
public class PlayerController : MonoBehaviour
{
private PlayerInput playerInput;
private Rigidbody2D playerRigidBody;
public Collider2D footCollider;
public float moveSpeed;
public float jumpForce;
bool island = true;
GameController gameController;
void Start()
{
playerInput = GetComponent<PlayerInput>();
playerRigidBody = GetComponent<Rigidbody2D>();
gameController = FindObjectOfType<GameController>();
}
우선 GameController의 GetScore함수에 접근하기 위해서 gameController변수를 하나 선언하고 초기화합니다.
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.tag == "Gem")
{
gameController.GetScore();
GameObject.Destroy(collision.gameObject);
}
}
그리고 OnTriggerEnter2D함수를 추가해줍니다.
OnTriggerEnter함수는 게임 오브젝트가 Collider를 가지고 있을 때, Trigger에 Collision(다른 충돌 오브젝트)가 충돌하면 자동으로 호출됩니다.
매개변수로는 충돌한 오브젝트가 전달됩니다.(collision)
그리고 if문으로 collision.tag가 Gem인지 확인해서 GetScore()를 호출하고, 충돌한 오브젝트는 Destroy합니다.
이제, 캐릭터를 조종하여 Gem을 획득하면, Score가 갱신되고 Gem은 사라지는 효과를 만들었습니다.
'유니티(Unity) > 2D 게임 만들기' 카테고리의 다른 글
2D 게임 만들기 (8) 프리팹(Prefab)으로 작업 줄이기 (0) | 2021.06.17 |
---|---|
2D 게임 만들기 (6) 점수 시스템(Canvas) (0) | 2021.05.27 |
2D 게임 만들기 (5) 캐릭터 움직이기 (0) | 2021.05.11 |
2D 게임 만들기 (4) 캐릭터를 움직이기 위한 준비, 키 입력 받기 (0) | 2021.05.10 |
2D 게임 만들기 (3) 유한 상태 머신, 전이(Transition) 설정 (0) | 2021.05.01 |