Skip to main content

On Sale: GamesAssetsToolsTabletopComics
Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

Code from Coder

Also, here's some code for enemy line of sight that detects players and makes it a boolean


using UnityEngine;


public class LineOfSight : MonoBehaviour


{


    public float viewRadius;


    public float viewAngle;


    public LayerMask obstacleMask;


    public bool canSeePlayer;


    private GameObject playerObject;


    private Transform player;


    private Hiding playerhide;


    void Start()


    {


        playerObject = GameObject.FindGameObjectWithTag("Player");


        playerhide = playerObject.GetComponent<Hiding>();


        player = playerObject.transform;


    }


    void Update()


    {


        DetectPlayer();


    }


    void DetectPlayer()


    {


        canSeePlayer = false;


        if (player != null)


        {


            Vector3 dirToPlayer = (player.position - transform.position).normalized;


            float distToPlayer = Vector3.Distance(transform.position, player.position);


            if (distToPlayer < viewRadius)


            {


                float angleBetween = Vector3.Angle(transform.up, dirToPlayer);


                if (angleBetween < viewAngle / 2f)


                {


                    if (!Physics2D.Raycast(transform.position, dirToPlayer, distToPlayer, obstacleMask))


                    {


                        if (!playerhide.hiding)


                        {


                            canSeePlayer = true;


                        }


                    }


                }


            }


        }


    }


    void OnDrawGizmos()


    {


        Gizmos.color = Color.yellow;


        Gizmos.DrawWireSphere(transform.position, viewRadius);


        Vector3 rightBoundary = DirFromAngle(viewAngle / 2f, false);


        Vector3 leftBoundary = DirFromAngle(-viewAngle / 2f, false);


        Gizmos.color = Color.blue;


        Gizmos.DrawLine(transform.position, transform.position + rightBoundary * viewRadius);


        Gizmos.DrawLine(transform.position, transform.position + leftBoundary * viewRadius);


        if (Application.isPlaying && canSeePlayer)


        {


            Gizmos.color = Color.red;


            Gizmos.DrawLine(transform.position, player.position);


        }


    }


    Vector3 DirFromAngle(float angleInDegrees, bool angleIsGlobal)


    {


        if (!angleIsGlobal)


            angleInDegrees += transform.eulerAngles.z;


        angleInDegrees += 90f;


        return new Vector3(Mathf.Cos(angleInDegrees * Mathf.Deg2Rad), Mathf.Sin(angleInDegrees * Mathf.Deg2Rad), 0);


    }


}