У меня есть простая игра, в которой игрок защищает центральную базу от нападения врагов. В настоящее время, когда игрок касается базы, враги все прекращают атаковать. Атаки обрабатываются в соответствии с сценарием Enemy. Я разместил здесь скрипты противников и базы. ВРАГ SCRIPTCollision останавливает врагов от нападения - Unity3D
using UnityEngine;
using System.Collections;
public class Enemy : MonoBehaviour {
public static float Damage = 10.0f;
public float Health = 20.0f;
public Transform target;
public float Speed;
public bool isAttacking = false;
//If the player collides with the enemy
void OnTriggerEnter2D(Collider2D col)
{
if(col.gameObject.tag == "Player")
{
Debug.Log("Player hits enemy");
Health -= PlayerController.Damage;
Debug.Log("Enemy health at: " + Health);
}
}
// Use this for initialization
void Start() {
}
// Update is called once per frame
void Update() {
//Destroy the enemy if it's health reaches 0
if(Health <= 0){
isAttacking = false;
Debug.Log ("Is attacking: " + isAttacking);
Destroy(this.gameObject);
Debug.Log ("Enemy Destroyed!");
}
//Constantly move the enemy towards the centre of the gamespace (where the base is)
float step = Speed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, target.position, step);
}
}
БАЗА SCRIPT
using UnityEngine;
using System.Collections;
public class Base : MonoBehaviour {
public float Health = 100f;
public float AttackSpeed = 2f;
//VOID AWAKE - START . contains getcomponent code
public Enemy enemy;
void awake(){
enemy = GetComponent<Enemy>();
}
//VOID AWAKE - END
//If enemy touches the base
void OnCollisionEnter2D(Collision2D col){
Debug.Log ("Base touched");
if(col.gameObject.tag == "Enemy" && Health > 0f){
enemy.isAttacking = true;
Debug.Log ("Enemy attacking base");
StartCoroutine("enemyAttack");
}
else{
enemy.isAttacking = false;
}
}
//Coroutine that deals damage
public IEnumerator enemyAttack(){
while(Health > 0f){
if(enemy.isAttacking == true){
yield return new WaitForSeconds(2f);
Health -= Enemy.Damage;
Debug.Log ("Base health at: " + Health);
}else{
yield break;
}
}
}
// Use this for initialization
void Start() {
}
// Update is called once per frame
void Update() {
//Load Lose Screen when Base health reaches 0
if (Health <= 0){
Application.LoadLevel("Lose Screen");
}
}
}
так что у вас вопрос .. также я спрошу, вы установили точки останова в текущем коде, который вы опубликовали, и шаг за шагом? – MethodMan
Немного сложно говорить, но в основном, когда игрок касается базы, он останавливает врагов от нападения. Я не хочу, чтобы это произошло. Теперь я добавляю точки останова и немного вторгаюсь в код, но просто хотел указать некоторые указатели, если бы это было что-то очевидное. – lucasRHCP
Никто не успевает пробираться через огромный свалку кода. Вам нужно сузить проблему самостоятельно, используя обычный процесс отладки. Сделайте это * первым *, а затем опубликуйте, если у вас все еще есть проблемы. –