본문 바로가기
공부/유니티

유니티3D 공부(Part 1-3) 동전 만들기(팩맨 만들기)

by 라이티아 2024. 9. 25.

운동을 마치고 바로 컴퓨터에 앉는 나의 모습

오늘도 즐거운 유니티 공부시간이다

 

이전 글에서 캐릭터를 움직이는 것 까지 했으니, 이제 움직이는 동기를 만들어 주어야 한다

 

책에서는 그 동기를 동전 줍기로 구현하려는 것 같다

3D오브젝트에서 Sphere를 생성해 준다

 

색깔이 변별력이 없으니 변경해주자

 

3D오브젝트에 표면을 변경할려면 meterial을 수정해주어야 한다

 

이때, 기본 오브젝트에는 디폴트인 흰색 메테리얼이 들어가 있다

이를 노란색으로 변경해보자

 

순서대로 메테리얼 생성, RGB 색상 부여, 오브젝트에 메테리얼 수정

의 과정을 거쳐, 구에 색깔을 부여했다

 

이제 이 구를 캐릭터가 충돌시 먹을 수 있도록 구현해보자

책에서는 IsTrigger을 사용해서 구현하는 것 같다

 

    void OnTriggerEnter(Collider other)
    {
        {Destroy(other);}
    }

플레이어의 스크립트에 이런 코드를 추가한다

 

충돌한 물체가 istrigger가 true일시 other에 넣은뒤, 처리된다

여기에서는 그 물체를 파괴하도록 설계되어 있다

 

이 광경을 보고 있는 나의 모습

근데 왜 파괴가 안되지? 뭔가 이상하게 처리된 것 같다

 

    void OnTriggerEnter(Collider other)
    {
        Debug.Log("TTTT");
        {Destroy(other);}
    }

로그를 찍어보자

???? 잘나온다

 

Destroy(other);

그렇다. 게임오브젝트를 빼먹었다

그냥 other만 삭제하라고 해서는 컴퓨터는 알아먹지 못한다

.gameobject를 넣어주어야 한다

 

이딴 당연한걸 틀리고 성장했다고 말하는 나...

 

 

 

이제 정상적으로 destroy되는 것을 확인할 수 있다

 

이제 이 동전이 여러개 있을때 전부 먹었는지 확인하는 방법을 구현한다

 

책에서는 tag를 넣어서 count하는 방식을 사용한다

 

 


코인 tag를 Coin오브젝트에 넣어준다

 

이제 이걸 확인할 코드를 추가해주자

 

        if(GameObject.FindGameObjectsWithTag("Coin").Length == 0)
        {
            Application.LoadLevel(Application.loadedLevel);
        }

오우..... 옛날 유니티의 향기가 나는 코드이다...

 

예전에 씬을 reload할때 사용하던 방식같다. 지금도 작동은 하지만 더 좋은 방법이 많다

using UnityEngine.SceneManagement;
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);

최근 사용하는 방법이라고 필자는 알고 있다. 즉, 유니티쪽에서 따로 만들어 두었다는 이야기.

일단은 구버전으로 사용하는데, 프로젝트시에는 최근 문법을 따르는게 좋다

 

Debug.Log("scence reload");

디버그도 추가해서 확인한다

씬이 무사히 reload 되는걸 확인할 수 있다