Проблемы с "OnCollisionEnter2D" в Unity2D - PullRequest
0 голосов
/ 01 августа 2020

Я использую этот код:

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

 public class CollisionPlayer : MonoBehaviour
 {
     public bool alreadyDied = false;
 
     public GameObject player;
 
     public float timeDeath;
 
     public ParticleSystem particles;
 
     public GameObject explosionGO;
 
     private SpriteRenderer sr;
 
     private BoxCollider2D bc;
 
     private PlayerController walkScript;
 
     void Start()
     {
         sr = GetComponent<SpriteRenderer>();
 
         bc = GetComponent<BoxCollider2D>();
 
         walkScript = GetComponent<PlayerController>();
     }
 
     void OnCollisionEnter2D (Collision2D collide)
     {
         if (collide.gameObject.CompareTag("Dead"))
         {
             Instantiate(particles, player.transform.position, Quaternion.identity);
 
             Instantiate(explosionGO, player.transform.position, Quaternion.identity);
 
             CinemachineShake.Instance.ShakeCamera(30f, .1f);
 
             alreadyDied = true;
         }
     }


 void Update()
 {
     if(alreadyDied == true)
     {
         timeDeath -= Time.deltaTime;
         sr.enabled = false;
         bc.enabled = false;
         walkScript.enabled = false;
     }

     if(timeDeath <= 0)
     {
         SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
     }
 }
  }

Это код пули:

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

 public class LeftBulletScript : MonoBehaviour
 {
 // Start is called before the first frame update
 public float speed;
 public float destructionLeftTime;

 public ParticleSystem particles;

 private GameObject thisGameObject;

 void Start()
 {
     thisGameObject = this.gameObject;
     Destroy(gameObject, destructionLeftTime);
 }

 void Update()
 {
     transform.Translate(Vector2.left * speed * Time.deltaTime);

     if(destructionLeftTime > 0.05f)
     {
         destructionLeftTime -= Time.deltaTime;
     }
     else 
     {
         Instantiate(particles, thisGameObject.transform.position, Quaternion.identity);
     }
 }
}

Этот код должен порождать некоторые частицы и звуковой эффект, когда игрок получает удар что-то с тегом "Мертвый". Но этого не происходит. У меня есть бокс-коллайдер 2D как на пуле (которая должна убить меня), так и на игроке. Мой Rigidbody2D - это динамическое c на плеере с зависанием z. У пули нет твердого тела. Я удостоверился, что у пули действительно есть тег «Dead», написанный точно так же, как я написал в сценарии. Самое странное, что я использовал этот код в другой игре, и ничего не изменилось (только название скрипта). И игрок, и пуля находятся на одном слое. Кто-нибудь мог сказать мне, что могло случиться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...