In Unity, the clipping planes of a camera component determine the range of distances from the camera at which objects will be rendered.
void Update()
{
Ray ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward);
RaycastHit hit;
Debug.DrawRay(ray.origin, ray.direction * rayLength, Color.red);
if (Physics.Raycast(ray, out hit, rayLength, targetLayer))
{
// 머테리얼 변경을 위해 현재 보고 있는 오브젝트 식별 및 함수 호출 (문은 아무 일도 안 일어남)
if (curLookObj != hit.collider.gameObject)
{
curLookObj?.GetComponent<IRaycastNonGame>().OnEndLooking();
curLookObj = hit.collider.gameObject;
curLookObj.GetComponent<IRaycastNonGame>().OnStartLooking();
}
if (Input.GetMouseButtonDown(0))
{
curLookObj.GetComponent<IRaycastNonGame>().OnClicked(transform);
}
}
else
{
curLookObj?.GetComponent<IRaycastNonGame>().OnEndLooking();
curLookObj = null;
}
}
raycast_nonGame.cs
public void OnStartLooking()
{
if (captured) return;
propBlock.SetFloat("_Scale", 1.1f);
meshRenderer.SetPropertyBlock(propBlock, 1);
}
public void OnEndLooking()
{
if (captured) return;
propBlock.SetFloat("_Scale", 0);
meshRenderer.SetPropertyBlock(propBlock, 1);
}
Cake.cs
Getcomponent<IRaycastReceiver>()가 하던 검증 로직을 대체하고,1 << 붙이거나 GetMask 쓰거나.

/// <summary>
/// 클릭했으면 케이크를 눈 앞으로 가져옴
/// </summary>
public void OnClicked(Transform player)
{
// 두 번 실행되지 않도록, 그리고 집었으면 다른 함수들 실행되지 않도록
if (captured) return;
captured = true;
propBlock.SetFloat("_Scale", 0);
meshRenderer.SetPropertyBlock(propBlock, 1);
Transform camera = player.GetChild(0);
transform.SetParent(camera);
StartCoroutine(MoveToPlayer(camera));
}
private IEnumerator MoveToPlayer(Transform camera)
{
Vector3 startPos = transform.localPosition;
float elapsed = 0f;
while (elapsed < duration)
{
elapsed += Time.deltaTime;
Vector3 endPos = camera.InverseTransformPoint(camera.position + camera.forward * forward_distance + Vector3.down * down_distance);
transform.localPosition = Vector3.Lerp(startPos, endPos, elapsed / duration);
yield return null;
}
transform.localPosition = camera.InverseTransformPoint(camera.position + camera.forward * forward_distance + Vector3.down * down_distance);
}