public override void Awake() { base.Awake(); layerCollisionsDict.Clear(); List <string> layerNamesList = new List <string>(); for (int i = 0; i < layerCollisions.Length; i++) { LayerCollision layerCollision = layerCollisions[i]; layerCollisionsDict.Add(layerCollision.layerName, layerCollision.collidingLayers); layerNamesList.Add(layerCollision.layerName); } int realLayerCount = Mathf.Min(32, layerNamesList.Count); realLayerNames = layerNamesList.ToArray().GetCopy(realLayerCount); for (int i = 0; i < realLayerCount; i++) { string realLayerName = realLayerNames[i]; string[] collidingRealLayers = layerCollisionsDict[realLayerName]; for (int i2 = 0; i2 < realLayerCount; i2++) { string realLayerName2 = realLayerNames[i2]; Physics2D.IgnoreLayerCollision(i, i2, !collidingRealLayers.Contains(realLayerName2)); } } }
private void OnTriggerEnter2D(Collider2D otherCollider2d) { if (!collisionDetectionEnabled) { Debug.LogWarning(this.ToString() + " Collision Detection disabled!"); } // if (CheckIfCollisionShouldBeIgnored (otherCollider2d)) if (CheckIfCollisionShouldBeIgnoredWithLayerMaskCompare(otherCollider2d)) { // generic, alle Collisionen werden gleich behandelt/verarbeitet #if UNITY_EDITOR // Debug.LogError (this.ToString () + " ignore Collision with " + otherCollider2d.gameObject.name + " in Layer " + LayerMask.LayerToName(otherCollider2d.gameObject.layer)); #endif } else { // Collision is not Ignored -> Start Triggering CollisionDamageTrigger otherCollisionTrigger = otherCollider2d.GetComponent <CollisionDamageTrigger>(); if (otherCollisionTrigger != null) { float otherSendDamageValue = otherCollisionTrigger.GetDamageValue(); float myDamageValue = sendDamageValue * sendDamageMulti; float receiveDamageValue = receiveDamageMulti * otherSendDamageValue; #if UNITY_EDITOR // Debug.Log (this.ToString() + " Collision is not Ignored -> Start Triggering "); // Debug.Log (this.ToString() + " otherSendDamageValue " + otherSendDamageValue); // Debug.Log (this.ToString() + " myDamageValue " + myDamageValue); // Debug.Log (this.ToString() + " receiveDamageValue " + receiveDamageValue); #endif // de-coupling LayerCollision currentLayerCollision = GetLayerCollision(otherCollider2d); if (currentLayerCollision != null) { // Kollisionpartner-Ebene ist in layerCollision aufgelistet if (!currentLayerCollision.IgnoreCollision) { // Trigger Layer specific Collision Event currentLayerCollision.TriggerCollisionEvent(); if (receiveDamageEnabled) { // Trigger Layer spzefic Collision Damage Event currentLayerCollision.TriggerCollisionEvent(receiveDamageValue); } } } else { // Kollisionpartner-Ebene ist NICHT in layerCollision aufgelistet } // Trigger global Collision Event NotifyCollision(); // Trigger global CollisionDamage Event if (receiveDamageEnabled) { NotifyCollisionDamage(receiveDamageValue); } // else // NotifyCollisionDamage (0f); // // coupling // healthManager.ReceiveHealthDamage (otherSendDamageValue); } else { #if UNITY_EDITOR // Debug.LogError (this.ToString () + " can't find CollisionTriggerScript @ " + otherCollider2d.gameObject.name + " in Layer " + LayerMask.LayerToName(otherCollider2d.gameObject.layer)); #endif } } // // additional collisionbehaviour // if (otherCollider2d.gameObject.layer == LayerMask.NameToLayer ("Enemy")) // { // // to this... // // } // else if (otherCollider2d.gameObject.layer == LayerMask.NameToLayer ("Player")) // { // // do that.. // } // // // problem htis is a generic model, can // // additional collisionbehaviour with seperation if this object is player or enemy or... (better with Polymorphism // // CollisionDamageTrigger <|- EnemyCollisionDamageTrigger // // CollisionDamageTrigger <|- PlayerCollisionDmageTrigger // if (this.gameObject.layer == "Player") // { // if (otherCollider2d.gameObject.layer == LayerMask.NameToLayer ("Enemy")) // { // // to this... // // } // else if (otherCollider2d.gameObject.layer == LayerMask.NameToLayer ("Player")) // { // // do that.. // } // } // else if ("Enemy") // { // if (otherCollider2d.gameObject.layer == LayerMask.NameToLayer ("Enemy")) // { // // to this... // // } // else if (otherCollider2d.gameObject.layer == LayerMask.NameToLayer ("Player")) // { // // do that.. // } // } }