문제 상황

게임에서 생성된 카드 인스턴스에 붙은 CardOpen 메소드가 작동하지 않는 문제가 발생했습니다.

진행한 과정과 결과

Raycast로 현재 찍고 있는 것이 무엇인지 파악

  • 결과: 레이가 출력되지 않았습니다.

DrawRay로 확인

  • 결과: Scene View에서 레이가 출력되지 않았습니다.

Sorting Layout 및 Order in Layer 순서 조정

  • 결과: 문제 해결에 도움이 되지 않았습니다.

해결

문제 원인

2D 게임이기 때문에 Physics2D.Raycast를 사용해야 하는데,
3D용 Physics.Raycast를 사용해서 문제가 발생했습니다.

해결 방법

Physics.RaycastPhysics2D.Raycast로 변경했습니다.

RaycastHit = Physics.Raycast(rayPos, Vector2.zero, 0f);

 => RaycastHit2D hit = Physics2D.Raycast(rayPos, Vector2.zero, 0f);
using System.Collections;  
using System.Collections.Generic;  
using UnityEngine;  
using UnityEngine.UI;  
using System.Linq;  
  
public class Card : MonoBehaviour  
{  
	public Animator anim;  
  
	void Update()  
	{  
		if (Input.GetMouseButtonDown(0)) // left mouse button  
		{  
			Vector2 rayPos = 
			Camera.main.ScreenToWorldPoint(Input.mousePosition);  
			// RaycastHit = Physics.Raycast(rayPos, Vector2.zero, 0f);
			RaycastHit2D hit = Physics2D.Raycast(rayPos, Vector2.zero, 0f);  
		  
			if (hit.transform.gameObject == gameObject)  
			{  
				Debug.Log("You clicked on: " + hit.transform.name);  
				OpenCard();  
			}  
		}  
	}  
  
	public void OpenCard()  
	{  
		Debug.Log("Click");
		anim.SetBool("CardOpen", true);  	  
		transform.Find("Front").gameObject.SetActive(true);  
		transform.Find("Back").gameObject.SetActive(false);  
	}   
}

2D / 3D 에 있어서 Raycast의 차이점

RaycastHit2DRaycastHit, Physics2D.RaycastPhysics.Raycast는 Unity의 2D와 3D 물리 엔진 각각에 사용됩니다.

다음은 둘의 주요 차이점입니다

사용되는 공간

  • Physics.Raycast: 3D 공간에서 사용됩니다.
  • Physics2D.Raycast: 2D 공간에서 사용됩니다.

콜라이더

  • Physics.Raycast: 3D 콜라이더 (Collider, MeshCollider 등)에 반응합니다.
  • Physics2D.Raycast: 2D 콜라이더 (Collider2D, BoxCollider2D 등)에 반응합니다.

반환 타입

  • Physics.Raycast: RaycastHit 객체를 반환하여 충돌 정보를 제공합니다.
  • Physics2D.Raycast: RaycastHit2D 객체를 반환하여 충돌 정보를 제공합니다.

레이어 마스크

  • 둘 다 레이어 마스킹을 지원하지만, 각각의 레이어 마스크 설정은 2D와 3D에 따라 다릅니다.

충돌 정보

  • RaycastHit은 3D 공간의 좌표, 표면의 노멀 벡터, 충돌한 콜라이더 등의 정보를 포함합니다.
  • RaycastHit2D은 2D 공간의 좌표, 표면의 노멀 벡터, 충돌한 콜라이더 등의 정보를 포함합니다.

성능

  • Physics2D.Raycast는 일반적으로 2D 연산에 최적화되어 있어서 같은 조건에서 더 빠를 수 있습니다.

스크립트 내 사용법

  • Physics.Raycast는 일반적으로 3D 게임 오브젝트와 상호작용할 때 사용됩니다.
  • Physics2D.Raycast는 2D 게임 오브젝트와 상호작용할 때 사용됩니다.

이러한 차이점들은 각각의 물리 엔진이 다르게 동작하도록 설계되었기 때문에 나타납니다.

따라서, 개발하고 있는 게임이 2D인지 3D인지에 따라 적절한 함수를 선택해야 합니다.