유니티

유니티 코인 먹기 게임 만들기 - 5 코인에 닿으면 코인 사라지게 하기

당혜성 2025. 3. 27. 22:23

플레이어 스크립트에 들어가자.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class palyer : MonoBehaviour
{
    public Rigidbody rbody;
    public Vector3 moveDir;
    public float moveSpeed;
    
    void Update()
    {
        moveDir = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
        moveDir.Normalize();
    }

    private void FixedUpdate()
    {
        rbody.MovePosition(rbody.position + moveDir * moveSpeed);
    }

    private void OnCollisionEnter(Collision collision)
    {
        print(collision.gameObject.name);
    }
}

밑에 OnCollistionEnter를 추가해 주고 저장 후 유니티에 가서 어떤 게 충돌되는지 확인하자

 

열심히 움직여서 놀았다면 이렇게 나왔을 것이다.

그런데 이름을 다 똗같이 했다면 어디에 있는 코인이 닿았는지 모를 수 있다. Tag나 이름을 바꿔서 사용하는 것도 좋은 방법이지만, 바뀔 수도 있으니  Coin 스크립트가 있는 것만 구별할 수 있도록 코드를 만들 것이다. 플레이어 스크립트로 가자.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class palyer : MonoBehaviour
{
    public Rigidbody rbody;
    public Vector3 moveDir;
    public float moveSpeed;
    
    void Update()
    {
        moveDir = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
        moveDir.Normalize();
    }

    private void FixedUpdate()
    {
        rbody.MovePosition(rbody.position + moveDir * moveSpeed);
    }

    private void OnCollisionEnter(Collision collision)
    {
        if(collision.gameObject.GetComponent<coin>() != null)
        {
            print("gotcoin");
        }
    }
}

코드는 이렇게 만들어준다. 저장 후 유니티에 가면 코인에 닿을때마다 got coin이 나온다.

 

그리고 게임매니저 스크립트에 들어가자. 

 

게입 매니저 스크립트

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    public GameObject coin;
    public Transform coinTranform;
    void Start()
    {

    }


    // Update is called once per frame
    void Update()
    {
        
    }

    public void Gotcoin()
    {
        print("got coin");
    }
}

 

그리고 가서 palyer 스크립트 가서 추가해야 한다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class palyer : MonoBehaviour
{
    public GameManager gameManager; //추가 된 것
    public Rigidbody rbody;
    public Vector3 moveDir;
    public float moveSpeed;
    
    void Update()
    {
        moveDir = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
        moveDir.Normalize();
    }

    private void FixedUpdate()
    {
        rbody.MovePosition(rbody.position + moveDir * moveSpeed);
    }

    private void OnCollisionEnter(Collision collision)
    {
        if(collision.gameObject.GetComponent<coin>() != null)
        {
            gameManager.Gotcoin(); //추가된 것
        }
    }
}

추가된 건 주석으로 해놨다. 이후 유니티로 돌아가서 palyer한테 gamemanger 스크립트를 넣자.

 

코인을 잘 먹었다면 나올 것이다.

 

닿은 코인 사라지기

 private void OnCollisionEnter(Collision collision)
 {
     if(collision.gameObject.GetComponent<coin>() != null)
     {
         gameManager.Gotcoin(); //추가된 것
         Destroy(collision.gameObject);
     }
 }

플레이어 스크립트에 가서 이렇게 해주면 된다. collistion이 닿은 정보를 가져와 주는 것이고, gameObject에서 파괴해야 하기 때문에 이렇게 만들었다.

 

코인을 잘 먹었다면 파괴도 되고, 코인을 먹었다고 나왔을 것이다.