OnCollisionEnter不工作Unity3D

我正在尝试构建一个你需要躲避掉落物体的游戏。 我做了一个危险但似乎危险’克隆’表现得很差。

当危险袭击需要消失的平台时,我已经制作了一个碰撞脚本。 这适用于危险对象,但不适用于坠落的危险克隆对象。

  • 正如您在第一个屏幕截图中看到的那样,红色圆圈块的行为类似于它。 但蓝色的圆圈一次(克隆)直接穿过物体。
  • 正如你在第二个截图中看到的那样,红色圆圈的一个消失了,因为它击中了平台。 但是,蓝色曾经一度落空。

提前致谢!

在此处输入图像描述 在此处输入图像描述

您将在下面找到碰撞脚本,下面是Hazard Spawn脚本:

using System.Collections; using System.Collections.Generic; using UnityEngine; public class HazardCollisionFunctions : MonoBehaviour { #region Variables //Public //Private #endregion #region UnityFunctions void Start() { } void Update() { } #endregion private void OnCollisionEnter(Collision collision) { if(collision.gameObject.tag == "platform") { this.gameObject.SetActive(false); } if(collision.gameObject.tag == "Player") { } } } 

 using System.Collections; using System.Collections.Generic; using UnityEngine; public class SpawnHazards : MonoBehaviour { #region Variables //Public //Private [SerializeField] public float minX = 0.0f; [SerializeField] public float maxX = 0.0f; [SerializeField] private GameObject[] hazards; //potential array of hazards [SerializeField] private float timeBetweenSpawns = 0.0f; private bool canSpawn = false; private int amountOfHazardsToSpawn = 0; private int hazardToSpawn = 0; #endregion #region UnityFunctions public void Start() { canSpawn = true; //Temp start } public void Update() { if(canSpawn == true) { StartCoroutine("GenerateHazard"); } } #endregion private IEnumerator GenerateHazard() { canSpawn = false; timeBetweenSpawns = Random.Range(0.5f, 2.0f); //Testing values amountOfHazardsToSpawn = Random.Range(1, 5); //Testing values for(int i = 0; i < amountOfHazardsToSpawn; i ++) { Vector3 spawnPos = new Vector3(Random.Range(minX, maxX), 8.0f, 0.0f); //Gen spawnpoint for the hazard Instantiate(hazards[hazardToSpawn], spawnPos, Quaternion.identity); //Spawn the hazard } yield return new WaitForSeconds(timeBetweenSpawns); canSpawn = true; } } 

OnCollisionEnter

OnCollisionEnterCollision对象作为参数,它要求附加的Collider组件的isTrigger属性为FALSE

 void OnCollisionEnter(Collision collision) { foreach (ContactPoint contact in collision.contacts) { Debug.DrawRay(contact.point, contact.normal, Color.white); } } 

OnTriggerEnter

OnTriggerEnterCollider对象作为参数,并且它要求附加的Collider组件的isTrigger属性为TRUE

 void OnTriggerEnter(Collider other) { if (other.CompareTag("CheckPoint")) { Destroy(other.gameObject); } } 

  1. 如果要从prefab中实例化对象,请确保prefab具有所需的组件( rigidbody / collider )和属性以实现所需的行为。

  2. 要检测碰撞/触发,至少有一个对象必须具有物理组件( Rigidbody

  3. 刚体必须连接到移动物体上。


希望这可以帮助 :)