My Enemy Slime Object always chasing me even if statement says otherwise

30 Views Asked by At

I want my enemy only chasing me when its player and enemy in the same static (immovable) chamber but either way its always chasing player. Code, inspector and scene attachments below.

enter image description here

here behind slime chamber but my enemy still chasing player.

enter image description here

This is enemy inspector even it shows enemy not in the chamber.

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

public class EnemySlimeController : MonoBehaviour
{
    public SlimeScriptableObject Slime;
    public GameObject target;
    public GameObject chamber;
    public GameObject player;
    public float followDistance;
    [SerializeField]
    public bool _playerInSight;
    [SerializeField]
    private bool _targetInSight;
    [SerializeField]
    private bool _inChamber = true;
    private Rigidbody _rb;
    private Vector3 _difference;
    private Vector3 _direction;
    private Vector3 _velocity;
    void Start()
    {
        _rb = this.gameObject.GetComponent<Rigidbody>();
        InvokeRepeating("ControlMovement", 1, Slime.invokeTime);
    }
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            _playerInSight = true;
        }
        else if (other.CompareTag("Enemy"))
        {
            _targetInSight = true;
            target = other.gameObject;
        }
        else if ((other.CompareTag("EnemyChamber")))
        {
            _inChamber = true;
        }
    }
    private void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            _playerInSight = false;
        }
        else if (other.CompareTag("Enemy"))
        {
            _targetInSight = false;
        }
        else if ((other.CompareTag("EnemyChamber"))){
            _inChamber = false;
        }

    }

    private void OnCollisionEnter(Collision collision)
    {
        MoveBackward(_rb, chamber, Slime.speed);
    }

    public void ControlMovement()
    {
        if (_inChamber == true)
        {
            if (_playerInSight && _targetInSight) MoveTowardsEntity(_rb, target, Slime.speed);

            if (_playerInSight && !_targetInSight) MoveTowardsPlayer(_rb, player, Slime.speed);

            if (!_playerInSight && _targetInSight) MoveTowardsPlayer(_rb, player, Slime.speed);

            if (!_playerInSight && !_targetInSight) MoveTowardsPlayer(_rb, player, Slime.speed);
        }
        if (_inChamber == false)
        {
            MoveBackward(_rb,chamber, Slime.speed);
        }
    }

    protected void MoveTowardsEntity(Rigidbody entity, GameObject target, float speed)
    {
        Debug.Log("�nside Target mov");
        _difference = target.transform.position - entity.transform.position;
        if ((_difference.x <= followDistance && _difference.x >= -followDistance) && (_difference.z <= followDistance && _difference.z >= -followDistance)) return;
        _direction = _difference.normalized;
        _velocity = _direction * speed;
        entity.velocity = _velocity;
    }
    protected void MoveBackward(Rigidbody entity, GameObject target, float speed)
    {
        Debug.Log("�nside Backward mov");
        _difference = target.transform.position - entity.transform.position;
        if ((_difference.x <= followDistance && _difference.x >= -followDistance) && (_difference.z <= followDistance && _difference.z >= -followDistance)) return;
        _direction = _difference.normalized;
        _velocity = _direction * speed;
        entity.velocity = _velocity;
    }
    protected void MoveTowardsPlayer(Rigidbody entity, GameObject target, float speed)
    {
        Debug.Log("�nside Player mov");
        _difference = target.transform.position - entity.transform.position;
        if ((_difference.x <= followDistance && _difference.x >= -followDistance) && (_difference.z <= followDistance && _difference.z >= -followDistance)) return;
        _direction = _difference.normalized;
        _velocity = _direction * speed;
        entity.velocity = _velocity;
    }
}

i tried checking if statement but everything seems to me normal. But i dont understand my enemy chasing. I copy pasted my slime controller script and edited it. Here my slime controller script:

 public SlimeScriptableObject Slime;
    public GameObject target;
    public GameObject player;
    public float followDistance;
    [SerializeField]
    public bool _playerInSight;
    [SerializeField]
    private bool _targetInSight;
    private bool _isTouched = false;
    private Rigidbody _rb;
    private Vector3 _difference;
    private Vector3 _direction;
    private Vector3 _velocity;
    void Start()
    {
        _rb = this.gameObject.GetComponent<Rigidbody>();
        target = player;
        InvokeRepeating("ControlMovement", 1, Slime.invokeTime);
    }
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            _playerInSight = true;
        }
        else if(other.CompareTag("Enemy"))
        {
            _targetInSight = true;
            target = other.gameObject;
        }
    }
    private void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            _playerInSight = false;
        }
        else if(other.CompareTag("Enemy"))
        {
            _targetInSight = false;
        }

    }

    private void OnCollisionEnter(Collision collision)
    {
        _isTouched = true;
        MoveBackward(_rb, player , Slime.speed);
    }

    private void OnCollisionExit(Collision collision)
    {
        _isTouched = false;
    }

    public void ControlMovement()
    {
        if (_isTouched == false)
        {
            if (_playerInSight && _targetInSight) MoveTowardsEntity(_rb, target, Slime.speed);

            if (_playerInSight && !_targetInSight) MoveTowardsPlayer(_rb, player, Slime.speed);

            if (!_playerInSight && _targetInSight) MoveTowardsPlayer(_rb, player, Slime.speed);

            if (!_playerInSight && !_targetInSight) MoveTowardsPlayer(_rb, player, Slime.speed);
        }
        else
        {
            MoveBackward(_rb, player, Slime.speed);
        }
    }

    protected void MoveTowardsEntity(Rigidbody entity, GameObject target, float speed)
    {
        Debug.Log("Green İnside Target mov");
        _difference = target.transform.position - entity.transform.position;
        if ((_difference.x <= followDistance && _difference.x >= -followDistance) && (_difference.z <= followDistance && _difference.z >= -followDistance)) return;
        _direction = _difference.normalized;
        _velocity = _direction * speed;
        entity.velocity = _velocity;
    }
    protected void MoveBackward(Rigidbody entity, GameObject target, float speed)
    {
        Debug.Log("Green İnside Backward mov");
        _difference = target.transform.position - entity.transform.position;
        if ((_difference.x <= followDistance && _difference.x >= -followDistance) && (_difference.z <= followDistance && _difference.z >= -followDistance)) return;
        _direction = _difference.normalized;
        _velocity = _direction * speed;
        entity.velocity = _velocity;
    }
    protected void MoveTowardsPlayer(Rigidbody entity, GameObject target, float speed)
    {
        Debug.Log("Green İnside Player mov");
        _difference = target.transform.position - entity.transform.position;
        if ((_difference.x <= followDistance && _difference.x >= -followDistance) && (_difference.z <= followDistance && _difference.z >= -followDistance)) return;
        _direction = _difference.normalized;
        _velocity = _direction * speed;
        entity.velocity= _velocity;
    }```
0

There are 0 best solutions below