void OnCollisionEnter2D(Collision2D collision) { if (collision.collider.isTrigger) { return; } Collider2D col; int layerMask = ~(1 << LayerMask.NameToLayer("Projectile")); RaycastHit2D hit; if (collision.collider.gameObject.CompareTag("Player")) { hit = Physics2D.Raycast(transform.position, (collision.collider.transform.position - transform.position).normalized, transform.lossyScale.magnitude / 2 + 0.1f, layerMask); col = playerCollider; } else { hit = Physics2D.Raycast(transform.position, velocity.normalized, transform.lossyScale.magnitude / 2 + 0.1f, layerMask); col = hit.collider; } if (hit && !hit.collider.isTrigger && hit.collider.IsTouching(thisCollider))//has hit { col.gameObject.SendMessage("FirstWaveHit", SendMessageOptions.DontRequireReceiver); if (col.gameObject.CompareTag("BounceableWall") && reflectionWall == Vector3.zero) { MultiTag wallTag = col.gameObject.GetComponent <MultiTag>(); if (wallTag)//////////////////////////////////////////////////////////////////Need To Change to check for wallreflectalongX { reflectionWall = col.transform.right; } else { reflectionWall = hit.normal; } TailSection wallBounce = new TailSection(); wallBounce.Pos = hit.point; wallBounce.distFromStart = Vector3.Distance(wallBounce.Pos, transform.position); wallBounce.wavePart = Instantiate <GameObject>(wavePartPrefab); wallBounce.wavePart.GetComponent <WavePart>().myWave = this; wallBounce.wavePart.GetComponent <WavePart>().player = playerController; wallBounce.wavePart.tag = "Projectile"; wallBounce.wavePart.layer = LayerMask.NameToLayer("Projectile"); myTail.Add(wallBounce); } else if (col.gameObject.CompareTag("Player")) { CollideWithPlayer(col); } else if (!col.CompareTag("Projectile") && !col.CompareTag("BounceableWall")) { //DestroySelf(); despawningAgainstWall = true; //Destroy(gameObject); } } }
public void InitializeTail() { TailSection tailEnd = new TailSection { Pos = transform.position, direction = transform.right, distFromStart = 0 }; tailEnd.wavePart = Instantiate <GameObject>(wavePartPrefab); tailEnd.wavePart.GetComponent <WavePart>().myWave = this; tailEnd.wavePart.tag = "Projectile"; tailEnd.wavePart.layer = LayerMask.NameToLayer("Projectile"); tailEnd.wavePart.GetComponent <WavePart>().player = playerController; if (ignoringCollision) { playerController.itemsICantCollideWith.Add(tailEnd.wavePart.GetComponent <Collider2D>()); Physics2D.IgnoreCollision(playerCollider, tailEnd.wavePart.GetComponent <Collider2D>(), true); } myTail.Add(tailEnd); }