- Home /
How to make player hides from an enemy ?
Firstly, sorry for my poor English. I'm an amatuer. I'm trying to make a 2D hunting game. I trying to create an AI for my rabbit so he can runaway when my player get closer. i used Collider2D for this, But i don't know the way to make my player invisble from the rabbit when he get into a brush. I will verry appreciate if you can help me . Here is my code
public class Targetmovement_controller : MonoBehaviour
{
public float enemyspeed;
Animator enemyAnimator;
//facing
public GameObject enemyGraphic;
bool canFlip = true;
bool facingRight = true;
bool facingLeft = true;
float flipTime = 5f;
float nextFlipChance = 0f;
//attacking
public float chargeTime;
float startChargeTime;
bool charging;
Rigidbody2D enemyRB;
// Use this for initialization
void Start()
{
enemyAnimator = GetComponent<Animator>();
enemyRB = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update()
{
if (Time.time > nextFlipChance)
{
if (Random.Range(0, 10) >= 5) flip();
nextFlipChance = Time.time + flipTime;
}
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "Player")
{
if (facingRight && other.transform.position.x < transform.position.x) flip();
else if (!facingRight && other.transform.position.x > transform.position.x) flip();
canFlip = false;
charging = true;
startChargeTime = Time.time + chargeTime;
}
}
void OnTriggerStay2D(Collider2D other)
{
if (other.tag == "Player")
{
if (startChargeTime < Time.time + chargeTime)
{
if (!facingRight) enemyRB.AddForce(new Vector2(1, 0) * enemyspeed);
else enemyRB.AddForce(new Vector2(-1, 0) * enemyspeed);
enemyAnimator.SetBool("Running", charging);
}
}
}
void OnTriggerExit2D(Collider2D other)
{
if (other.tag == "Player")
{
canFlip = true;
charging = false;
enemyRB.velocity = new Vector2(0f, 0f);
enemyAnimator.SetBool("Running", charging);
}
}
void flip()
{ //dinh nghia cach xoay
if (!canFlip) return;
float facingX = enemyGraphic.transform.localScale.x;
facingX *= -1f;
enemyGraphic.transform.localScale = new Vector3(facingX, enemyGraphic.transform.localScale.y, enemyGraphic.transform.localScale.z);
facingRight = !facingRight;
}
}
In your Trigger functions, use other.gameObject.tag ins$$anonymous$$d of other.tag. Do you want to deactivate the player if it is in the trigger?
I wanted to achieve something similar for a game that I was working on. I used bools for it. $$anonymous$$y game had hiding areas and if the player entered these areas I would change the isHiding
bool to true. For the enemy that were following the player, the condition included this check. For example, Enemy class: if (player.isHiding != true && player.isDead!=true) { //do something}
Thanks for your help, i will try, i have the same idea , but like i said i'm amatuer so i don't know how to write a functions in the right way. actually i don't wanna deactivate the player , just wanna him invisble
That's good. You simply need one bool for it then. Change the tag of the player to "hidden" and make a condition check in the enemy script as if (other.collider.tag != hidden) {//your code}
Your answer
Follow this Question
Related Questions
Problem with "Bake" (Navigation) 1 Answer
Enemy is not chasing player. it is escaping. 1 Answer
Does anybody know how to make it to where the enemy just stops short? 2 Answers
A* Pathfinding Enemy AI, How to search for something else when no path to player available 0 Answers
Brackeys EnemyAi Script 0 Answers