Witam,
Tworzę grę 2D, platformówkę, gdzie przeciwnicy gonią gracza gdy ten zbliży się na odpowiednią odległość. Potrzebuję pomocy w kodzie. Otóż cały kod ogólnie działa i przeciwnik goni gracza, a gdy gracz jest poza zasięgiem przeciwnik wraca do swoich waypointów. Chciałam dodać niewidzialną ścianę, która działa na trigger. Jeśli przeciwnik jej dotknie to przestaje gonić gracza i wraca do swoich waypointów (zrobiłam to po to aby przy platformach przeciwnik nie spadał w dół ponieważ póżniej nie ma jak wrócić) niestety trigger nie działa, nie wyświetla mi się tez Debug.Log który dałam aby sprawdzić czy działa. Ściana ma Tag Granica, a przeciwnik dwa collidery, jeden na trigger aby jeśli gracz go dotknie był cofany do respawnu a drugi zwykły collider bez triggera który jest bardziej w środku, ktory miał działać na ścianę.
Poniżej kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ChasingEnemy: MonoBehaviour {
public Transform[] patrolPoints;
public float moveSpeed;
public int patrolDestination;
public Transform playerTransform;
public bool isChasing;
public float chaseDistance;
void Start() {
}
void Update() {
if (isChasing) {
moveSpeed = 4;
if (transform.position.x > playerTransform.position.x) {
transform.localScale = new Vector3(1, 1, 1);
transform.position += Vector3.left * moveSpeed * Time.deltaTime;
}
if (transform.position.x < playerTransform.position.x) {
transform.localScale = new Vector3(-1, 1, 1);
transform.position += Vector3.right * moveSpeed * Time.deltaTime;
}
if (Vector2.Distance(transform.position, playerTransform.position) > 6) {
isChasing = false;
moveSpeed = 2;
}
} else {
if (Vector2.Distance(transform.position, playerTransform.position) < chaseDistance) {
isChasing = true;
}
Walking();
}
void Walking() {
if (patrolDestination == 0) {
transform.position = Vector2.MoveTowards(transform.position, patrolPoints[0].position, moveSpeed * Time.deltaTime);
if (Vector2.Distance(transform.position, patrolPoints[0].position) < .2 f) {
patrolDestination = 1;
transform.localScale = new Vector3(-1, 1, 1);
}
}
if (patrolDestination == 1) {
transform.position = Vector2.MoveTowards(transform.position, patrolPoints[1].position, moveSpeed * Time.deltaTime);
if (Vector2.Distance(transform.position, patrolPoints[1].position) < .2 f) {
patrolDestination = 0;
transform.localScale = new Vector3(1, 1, 1);
}
}
}
void OnTriggerEnter2D(Collider2D other) {
if (other.CompareTag("Granica")) {
Debug.Log("Przecwinik przestaje biec");
isChasing = false;
Invoke("ResumeChasing", 3 f);
}
}
void ResumeChasing() {
isChasing = true;
}
}
}