공부/Unity

[Unity] 특정 물체를 바라보게 만들기

굴러다니다니 2025. 5. 30. 16:53
var dir = m_target.position - transform.position
eye.transform.localposition = transform.InverseTransformDirection(dir.normalized);

수박게임 구현중 아래 사이트처럼 클릭한 곳을 바라보게 만들고 싶었다.

위의 코드를 이용해 만들 수 있었다

https://poki.com/kr/g/kawaii-fruits-3d

 

KAWAII FRUITS 3D - 무료로 온라인 게임을 플레이하세요! | Poki (포키)

무료 온라인 게임의 가장 인기 있는 웹사이트에서 Kawaii Fruits 3D을(를) 플레이하세요! Poki (포키)은(는) 모바일, 태블릿 또는 컴퓨터에서 작동합니다. 다운로드도 로그인도 필요 없습니다. 지금 플

poki.com

 

    private void OnMouseDown()
    {
        m_isDragging = true;
        if (m_isGameOver) return;
        for (int i = 0; i < m_container.childCount; i++)
        {
            m_container.GetChild(i).GetComponent<KirbyFace>()?.SetTarget(m_dropPoint);
        }
    }

    public void OnMouseUp()
    {
        if (m_kirby != null && !m_isGameOver)
        {
            m_kirby.transform.SetParent(m_container);
            m_kirby.StartPhysics();
            m_dropEvent.Invoke();
            m_kirby = null;
        }
        for (int i = 0; i < m_container.childCount; i++)
        {
            m_container.GetChild(i).GetComponent<KirbyFace>()?.ClearTarget();
        }
        m_isDragging = false;
    }
using UnityEngine;
using static UnityEngine.GraphicsBuffer;

public class KirbyFace : MonoBehaviour
{
    Transform face;
    [SerializeField] float maxOffset = 0.7f;
    [SerializeField] float moveSpeed = 7f;

    Vector3 velocity = Vector3.zero;
    Transform m_target = null;

    private void Start()
    {
        face = transform.GetChild(1);
    }

    void Update()
    {
        if (m_target != null)
        {
            Vector3 worldDir = (m_target.position - transform.position).normalized;
            Vector3 localDir = transform.InverseTransformDirection(worldDir);

            Vector3 targetLocalPos = localDir * maxOffset;

            face.localPosition = Vector3.SmoothDamp(face.localPosition, targetLocalPos, ref velocity, 1f / moveSpeed);
        }
        else
        {
            // 타겟 없으면 제자리 복귀
            face.localPosition = Vector3.SmoothDamp(face.localPosition, Vector3.zero, ref velocity, 1f / moveSpeed);
        }
    }

    public void SetTarget(Transform target)
    {
        m_target = target;
    }

    public void ClearTarget()
    {
        m_target = null;
    }
}

바빠서 대충 씀

 

728x90
반응형