inflearn logo
강의

Course

Instructor

[Unity 3D] Real-life! Creating a Survival Game - Advanced

Pig's field of vision

시야각 구현이 제대로 안되는데 어떻게 해결해야하나요.

598

Lucyna

6 asked

0

시야각 구현이 잘 안됩니다..

ViewAngle값을 아무리 많이 줘도 첫번째 스크린샷처럼 정면, 정면에서 진짜 살짝 벗어난정도 뺴고는 인식을 못합니다.

영상의 돼지들은 레이로 표시한 시야각만큼 플레이어를 인식 해주는것같은데 말이죠.. 코드를 어떻게 수정해야 제 문제를 해결할 수 있을까요?

현재 FOV의 코드는 다음과 같습니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class FieldOfViewAngle : MonoBehaviour
{

    [SerializeField] private float viewAngle; // 시야각
    [SerializeField] private float viewDistance; // 시야거리
    [SerializeField] private LayerMask targetMask; // 타겟 마스크 (플레이어)

    private TPSCharacterController thePlayer;
    private NavMeshAgent nav;

    void Start()
    {
        thePlayer = FindObjectOfType<TPSCharacterController>();
        nav = GetComponent<NavMeshAgent>();
    }

    public Vector3 GetTargetPos()
    {
        return thePlayer.transform.position;
    }

    private Vector3 BoundaryAngle(float _angle)
    {
        _angle += transform.eulerAngles.y;
        return new Vector3(Mathf.Sin(_angle * Mathf.Deg2Rad), 0f, Mathf.Cos(_angle * Mathf.Deg2Rad));
    }

    public bool View()
    {
        Vector3 _leftBoundary = BoundaryAngle(-viewAngle * 0.5f);
        Vector3 _rightBoundary = BoundaryAngle(viewAngle * 0.5f);

        Debug.DrawRay(transform.position + transform.up + transform.forward, _leftBoundary, Color.red);
        Debug.DrawRay(transform.position + transform.up + transform.forward, _rightBoundary, Color.red);

        Collider[] _target = Physics.OverlapSphere(transform.position, viewDistance, targetMask);

        for (int i = 0; i < _target.Length; i++)
        {
            Transform _targetTf = _target[i].transform;
            if (_targetTf.name == "Character")
            {
                Vector3 _direction = (_targetTf.position - transform.position).normalized;
                float _angle = Vector3.Angle(_direction, transform.forward);

                if(_angle < viewAngle * 0.5f)
                {

                    if (Physics.Raycast(transform.position + transform.up + transform.forward, _direction, out RaycastHit _hit, viewDistance))
                    {
                        Debug.Log(_hit);
                        if (_hit.transform.name == "Character")
                        {
                            Debug.Log("플레이어가 소 시야내에 있습니다.");
                            Debug.DrawRay(transform.position + transform.up + transform.forward, _direction, Color.blue);
                            return true;
                        }
                    }
                }
            }

            if (thePlayer.GetRun())
            {
                if(CalcPathLength(thePlayer.transform.position) <= viewDistance)
                {
                    Debug.Log("동물이 주변에서 뛰고있는 플레이어의 움직임을 파악했습니다.");
                    return true;
                }
            }
        }
        return false;
    }

    private float CalcPathLength(Vector3 _targetPos)
    {
        NavMeshPath _path = new NavMeshPath();
        nav.CalculatePath(_targetPos, _path);

        Vector3[] _wayPoint = new Vector3[_path.corners.Length + 2];

        _wayPoint[0] = transform.position;
        _wayPoint[_path.corners.Length + 1] = _targetPos;


        float _pathLength = 0;
        for (int i = 0; i < _path.corners.Length; i++)
        {
            _wayPoint[i + 1] = _path.corners[i]; // 웨이포인트에 경로를 넣음.
            _pathLength += Vector3.Distance(_wayPoint[i], _wayPoint[i + 1]); // 경로 길이 계산.
        }

        return _pathLength;
    }
}

케이디 unity

Answer 1

0

hyeon

영상 속 돼지들과 똑같이 구현하길 원하시면

transform.position + transform.up + transform.forward

transform.position + transform.up

로 바꿔보세요

코드 파일

0

100

1

currentFireRate 질문

0

107

0

thePlayerController의 값이 갑자기 null로 바뀌는 현상이 발생합니다

0

223

1

인벤토리 끄고 퀵슬롯 아이템 드래그앤 드랍시 공격

0

256

1

멀티로 개발하고 싶으면 어떤것을 알아야할까요?

0

360

1

유니티 3d 터레인 브러쉬 문제

0

527

1

moveposition 문제

0

361

2

navigation bake한 후 오류

0

290

1

무기 교체 오류

0

521

1

gun애니메이션이 손만 작동하고 총은 가만히 있어요

0

313

1

34:49 내용 생략 부분

0

500

0

고화질 서비스 안되나요..

0

371

1

바닥에 있는 아이템이 사라지지 않습니다

0

334

1

전체 프로젝트 파일 받을 수 있을까요?

0

412

1

질문 있습니다

0

285

0

움직이며 정조준을 하니까 총의 포지션 값이 이상해지네요;; 어떻게 해결해야되나요?

0

240

0

Quaternion 값은 왜 곱하나요?

0

312

0

Hand를 main camera에 넣으면 오류가 생깁니다.

0

242

0

웨폰 매니저 강의중 똑같은 내용 영상 중복됨

0

266

0

공격성을 띄고있는 동물이 죽어도 계속 쫓아옵니다.

0

323

1

크로스헤어 문제

1

744

7

재장전을 하고나면 정조준 값은 똑같은데 위치가 바꿔저요

0

359

0

효과음 넣을 때 오류

0

447

1

강의 잘 듣고 있는데 질문거리가 많네요 ㅠㅠ

0

192

0