본문 바로가기
공부/Unity 기초

3D FPS - 4 / 가리키는 대상 표시

by svcbn 2022. 5. 18.

마우스 커서가 가리키는 오브젝트의 이름을 출력한다.

 

 

// 마우스 커서의 좌표를 월드 좌표계로 변환하고, 그 월드좌표를 기준으로 Ray를 생성한다.
        Ray mouseRay = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit mouseInfo;

        // Ray를 쏴서 부딪힌 대상이 있다면
        if (Physics.Raycast(mouseRay, out mouseInfo))
        {
            print("가리키는 대상: " + mouseInfo.transform.name);
            logText.text = "가리키는 대상: " + mouseInfo.transform.name;

        }

        // Ray에 닿은 대상이 없다면
        else
        {
            print("가리키는 대상 없음");
            logText.text = "가리키는 대상 없음";
        }

Camera.main.ScreenPointToRay() : 스크린 좌표를 월드 공간의 좌표로 변환해서 Ray의 위치 및 방향으로 설정하는 함수

 

Input.mousePosition : 현재 마우스 커서의 스크린 좌표 값(X, Y)을 가진 속성 변수

 

 

 

 

UI에 LogText를 제작해 스크립트를 넣어준다.

 

 

Gun 전문

더보기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

// Ray를 이용해서 바라보고 닿은곳에 총을 쏘고싶다. (총알자국을 남기고싶다.)
public class Gun : MonoBehaviour
{
    // 총알자국
    public ParticleSystem bulletImpact;

    public Text logText;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        // 만약 마우스 왼쪽버튼을 누르면
        if (Input.GetButtonDown("Fire1"))
        {

            // 시선을 만들고
            Ray ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward);

            // 그 시선을 이용해서 바라봤는데 만약 닿은곳이 있다면?
            RaycastHit hitinfo;
            if (Physics.Raycast(ray, out hitinfo))
            {
                // 닿은곳에 총알자국을 가져다놓고싶다.
                bulletImpact.transform.position = hitinfo.point;

                // 총알자국 VFX를 재생하고싶다.
                bulletImpact.Stop();
                bulletImpact.Play();

                // 총알자국의 방향을 닿은곳의 Normal방향으로 회전하고싶다.
                // = 총알자국의 forward방향과 닿은곳의 Normal방향을 일치시키고 싶다.
                bulletImpact.transform.forward = hitinfo.normal;

            }

        }

        // 마우스 커서의 좌표를 월드 좌표계로 변환하고, 그 월드좌표를 기준으로 Ray를 생성한다.
        Ray mouseRay = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit mouseInfo;

        // Ray를 쏴서 부딪힌 대상이 있다면
        if (Physics.Raycast(mouseRay, out mouseInfo))
        {
            print("가리키는 대상: " + mouseInfo.transform.name);
            logText.text = "가리키는 대상: " + mouseInfo.transform.name;

        }

        // Ray에 닿은 대상이 없다면
        else
        {
            print("가리키는 대상 없음");
            logText.text = "가리키는 대상 없음";
        }

    }
}

'공부 > Unity 기초' 카테고리의 다른 글

3D FPS - 6 / 위치 복귀  (0) 2022.05.19
3D FPS - 5 / 상태머신 설계  (0) 2022.05.18
3D FPS - 3 / 무기 제작  (0) 2022.05.18
3D FPS - 2 / 시점 변화  (0) 2022.05.17
3D FPS - 1 / 이동과 회전, 점프  (0) 2022.05.17