게임 개발

[unity] raycast 사용하기

Heeyeon Choi 2022. 8. 7. 11:29
728x90
728x90
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RayInteraction : MonoBehaviour
{
    private Camera playerCam;
    public float distance = 100f;
    public LayerMask whatIsTarget;
    private Transform moveTarget;
    private float targetDistance;

    // Start is called before the first frame update
    void Start()
    {
        playerCam = Camera.main;
    }

    // Update is called once per frame
    void Update()
    {
        Vector3 rayOrigin = playerCam.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 0f)); //화면상의 점이 월드에서 어딘지 표시
        Vector3 rayDir = playerCam.transform.forward;
        Ray ray = new Ray(rayOrigin, rayDir); //광선
        Debug.DrawRay(ray.origin, ray.direction * 100f, Color.green);
        if (Input.GetMouseButtonDown(0))
        {
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, distance, whatIsTarget))
            {
                GameObject hitTarget = hit.collider.gameObject;
                hitTarget.GetComponent<Renderer>().material.color = Color.red;
                moveTarget = hitTarget.transform;
                targetDistance = hit.distance;

            }
        }
        if (Input.GetMouseButtonUp(0))
        {
            if(moveTarget != null)
            {
                moveTarget.GetComponent<Renderer>().material.color = Color.white; 
            }
            moveTarget = null;
        }
        if(moveTarget != null)
        {
            moveTarget.position = ray.origin+ray.direction*targetDistance;
        }
    }

}

 

 

728x90