a15714ab041eb360be3335625683746f0153452cd6a4ea89d73066f09e16cd6efee00566202ed88466654d5da6

일단 게임엔진은 유니티고요 Raycast 방식으로 시야각을 만들었는데요.
씨발 시야각이 반대로 나옵니다 가려진 부분은 투명하고 가려지지 않아야 할 부분은 가려져요.
진짜 너무 힘들어서 AI한테도 물어봤는데 별로 쓸모있는 답변이 나오지가 않습니다.
심지어 영어로 검색해봤는데도 별로 유용한 답변이 나오지가 않아요.

일단 제가 생각하기로는 일단 먼저 전부 어떤 걸로 화면을 가리고 시야각으로 Mesh를 그려서
그 Mesh가 그려진 부분은 투명해지게 하고 다른 부분은 원래대로 가려지면 되는 것 같습니다.
그런데 문제는 그게 진짜 너무 힘듭니다.
제발 도와주세요 진짜로 더 정보 필요하시면 드리겠습니다.


코드도 올리라고 해서 코드도 올립니다.

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

public class FieldOfView  : MonoBehaviour
{
    public float viewRadius = 5f;
    public int rayCount = 60;
    public LayerMask obstacleMask;

    private Mesh mesh;
    private Vector3 origin;
    private List<Vector3> vertices;
    private List<int> triangles;

    void Start()
    {
        mesh = new Mesh();
        GetComponent<MeshFilter>().mesh = mesh;
        origin = Vector3.zero;
    }

    void LateUpdate()
    {
        this.transform.position = GameObject.FindWithTag("Player").transform.position;
        GenerateFieldOfView();
    }

    void GenerateFieldOfView()
    {
        float angle = 0f;
        float angleIncrease = 360f / rayCount;
        vertices = new List<Vector3>();
        triangles = new List<int>();

        vertices.Add(Vector3.zero); // 중심점

        for (int i = 0; i <= rayCount; i++)
        {
            Vector3 dir = DirFromAngle(angle);
            RaycastHit2D hit = Physics2D.Raycast(this.transform.position, dir, viewRadius, obstacleMask);
            Vector3 endPointWorld = hit.collider ? (Vector3)hit.point : this.transform.position + dir * viewRadius;
            Vector3 endPointLocal = transform.InverseTransformPoint(endPointWorld);
            vertices.Add(endPointLocal);

            if (i > 0)
            {
                triangles.Add(0);
                triangles.Add(i);
                triangles.Add(i + 1);
            }

            angle -= angleIncrease;
        }

        mesh.Clear();
        mesh.vertices = vertices.ToArray();
        mesh.SetTriangles(triangles.ToArray(), 0);
    }

    Vector3 DirFromAngle(float angle)
    {
        float rad = angle * Mathf.Deg2Rad;
        return new Vector3(Mathf.Cos(rad), Mathf.Sin(rad));
    }

    public void SetOrigin(Vector3 pos)
    {
        origin = transform.InverseTransformPoint(pos);
    }
}


a15714ab041eb360be3335625683746f0153452cd6a4ea89d73367f29f15cd6e5cb15cfe0b82ddd0088bc3d17d


부디 도움이 되었으면 합니다.

그리고 아래의 저 AI의 답변을 이해하면 될 것 같은데 도통 뭔 말인지 모르겠습니다.

a15714ab041eb360be3335625683746f0153452cd6a4ea89d73262f79c10cd6ec6104ee54c165aa2bfed396965

그리고 shader 이녀석을 어케 하면 될 것 같기는 한데 제가 이녀석에 대해서는 조금도 아는 바가 없어서 미치겠습니다.