상세 컨텐츠

본문 제목

유니티 마우스 타겟 고정 하기

유니티/기능

by MJ_119 2024. 10. 12. 02:35

본문

- 마우스 타겟 고정 하기

- Lock on 락온 기능

 

-
- 적에 Enemy 레이어를 설정하고, 비어있는 Target 스크립트를 추가해서 레이캐스트로 마우스로 이 오브젝트에 닿으면 Target 스크립트가 있는지 확인후 있으면 총알이 날아가는 목표인 Aim.position을 Target.position으로 바꾼다.

 

Lock On 기능 동작 요약

  1. Lock On 토글: L 키를 누르면 Lock On 상태가 켜지거나 꺼집니다 (isLockingToTarget 플래그).
  2. 타겟 확인: 마우스로 레이캐스트를 쏘아 Target 컴포넌트가 있는 오브젝트를 탐지합니다 (Target() 메서드).
  3. 조준점 고정: isLockingToTarget이 true라면 탐지된 타겟의 위치에 조준점 (aim.position)이 고정됩니다.
  4. Lock On 비활성화 시: 타겟이 없거나 Lock On이 비활성화된 경우, 마우스 힛 정보를 기반으로 조준점을 설정합니다.
public RaycastHit GetMouseHitInfo()
    {
        Ray ray = Camera.main.ScreenPointToRay(aimInput);

        if(Physics.Raycast(ray, out var hitInfo, Mathf.Infinity, aimLayerMask))
        {
            //Debug.Log("Raycast hit: " + hitInfo.point); // 레이캐스트로 맞춘 위치 확인
            lastKnownMouseHit = hitInfo;
            return hitInfo;
        }

        return lastKnownMouseHit;
    }
    
    
    private void UpdateAimPosition()
    {
        Transform target = Target();

        if( target != null && isLockingToTarget )
        {
            aim.position = target.position;
            return;
        }

        aim.position = GetMouseHitInfo().point;

        if (!isAimingPrecisely)
        {
            aim.position = new Vector3(aim.position.x, transform.position.y + 1, aim.position.z);
        }
        //aim.position = new Vector3(GetMousePosition().x, transform.position.y + 1, GetMousePosition().z);
    }
    
    
    public Transform Target()
    {
        Transform target = null;

        if(GetMouseHitInfo().transform.GetComponent<Target>() != null)
        {
            target = GetMouseHitInfo().transform;
        }

        return target;
    }

 

 Target() 메서드: 타겟 탐지

  • 이 메서드는 레이캐스트(Raycast)를 사용하여 마우스 포인터로 가리키는 물체가 Target 컴포넌트를 가지고 있는지 확인합니다. Target 컴포넌트가 있다면 그 오브젝트를 타겟으로 간주하고, 그 위치에 조준점을 고정합니다.

 

 

 

관련글 더보기