플레이어 스크립트에 들어가자.
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에서 파괴해야 하기 때문에 이렇게 만들었다.
코인을 잘 먹었다면 파괴도 되고, 코인을 먹었다고 나왔을 것이다.
'유니티' 카테고리의 다른 글
유니티 코인 먹기 게임 만들기 - 7 승리 판정과 재시작 (0) | 2025.03.28 |
---|---|
유니티 코인 먹기 게임 만들기 - 6 점수증가 (0) | 2025.03.27 |
유니티 코인 먹기 게임 만들기 - 4 코인 회전하기 (0) | 2025.03.27 |
유니티 코인 먹기 게임 만들기 - 3 코인 프리맵 만들기 (0) | 2025.03.27 |
유니티 코인 먹기 게임 만들기 - 2 캐릭터 움직이기 (0) | 2025.03.27 |