2024년 12월 09일 TIL

John Jean·2024년 12월 10일

Lazy Sweeper

목록 보기
6/9

예비군 갔다와서 여태 쉬었음. 진짜 너무 빠졌다. 시간이 아까우니까 열심히 달려야돼.

크로스헤어 추가 및 조준시 색상 변경

using UnityEngine;
using UnityEngine.UI; // UI를 제어하기 위해 필요

public class CrosshairRaycaster : MonoBehaviour
{
    public Camera playerCamera; // 플레이어 카메라
    public Image crosshair;     // 크로스헤어 이미지
    public Color defaultColor = Color.white; // 기본 색상
    public Color highlightColor = Color.red; // 쓰레기를 감지했을 때 색상
    public float rayDistance = 100f;         // 레이캐스트 최대 거리

    void Update()
    {
        // 크로스헤어와 카메라가 올바르게 설정되었는지 확인
        if (playerCamera == null || crosshair == null)
        {
            Debug.LogError("Camera or Crosshair is not assigned!");
            return;
        }

        // 화면 중심에서 레이 발사
        Ray ray = playerCamera.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0));
        RaycastHit hit;

        // 레이캐스트 실행
        if (Physics.Raycast(ray, out hit, rayDistance))
        {
            Debug.Log($"Hit Object: {hit.collider.name}, Tag: {hit.collider.tag}");

            // 감지한 오브젝트가 지정된 태그인지 확인
            if (IsTrash(hit.collider.tag))
            {
                crosshair.color = highlightColor; // 크로스헤어를 빨간색으로 변경
            }
            else
            {
                crosshair.color = defaultColor; // 기본 색상으로 복구
            }
        }
        else
        {
            crosshair.color = defaultColor; // 레이캐스트가 아무것도 감지하지 못했을 때
        }
    }

    // 쓰레기 태그인지 확인하는 헬퍼 메서드
    private bool IsTrash(string tag)
    {
        return tag == "Food" || tag == "Recycle" || tag == "Disposable";
    }
}

브로콜리를 조준했을 때만 작동하고 나머지 쓰레기는 작동이 안한다..

--> Spawn Area 콜라이더가 쓰레기 콜라이더를 덮고 있었다..!
비교적 크기가 큰 브로콜리만 스폰구역 콜리이더를 뚫고 감지가 되고있었던것.
해결은 간단히 됐음. 레이어에 Ignore Raycast있길래 설정해줬더니 해결됐다.

추가로 조준시 press 'E' to pickup메시지 추가.

애니메이션의 특정 프레임에서 메서드 호출하는법

현재 idle - pickup - throw 상태 중 플레이어의 몸을 카메라가 따라가는 방식은 pickup, throw 애니메이션이 나올때만 사용된다. 던지기 애니메이션이 끝나면 pickup camera에서 main camera로 전환되어야 하는데, 이 때 애니메이션 창에서 내가 원하는 프레임에 메서드를 추가해 줄 수 있다.

스크립트에 해당되는 메서드를 구현하고,

애니메이션 윈도우의 특정 프레임에서 이벤트를 추가하면 된다.

profile
크래프톤 6기 정글러

0개의 댓글