게임 개발
[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