private void OnCollisionEnter(Collision collision) { Transform hitObj = collision.transform; UnitCombat combat = hitObj.gameObject.GetComponent <UnitCombat>(); if (combat == owner) { return; } if (combat != null) { if (owner.isBuffed == 1) { combat.Damage(Damage + 3.0f); } else { combat.Damage(Damage); } } else { var parentComb = hitObj.parent.gameObject.GetComponent <ShieldUnit>(); if (parentComb != null && (parentComb.TeamIndex == owner.TeamIndex || (parentComb.transform.position - startPos).magnitude < parentComb.Radius)) { Physics.IgnoreCollision(collision.collider, col, true); return; } } if (OnImpact != null) { OnImpact.Invoke(); } if (explosionPrefab != null) { var obj = Instantiate(explosionPrefab, transform.position, Quaternion.identity) as GameObject; } Destroy(gameObject); }
// Update is called once per frame void Update() { RaycastHit hit; Physics.Raycast(camera.transform.position, camera.transform.forward, out hit, 1000f, LayerMask.GetMask("Default")); if (hit.transform) { cursor.position = hit.point; } else { cursor.position = camera.transform.position + camera.transform.forward * 1000f; } if (lazersOn) { FaceLazers[0].SetPosition(0, transform.position - transform.right * lazerOffset); FaceLazers[1].SetPosition(0, transform.position + transform.right * lazerOffset); FaceLazers[0].SetPosition(1, cursor.position); FaceLazers[1].SetPosition(1, cursor.position); if (count++ % perframes == 0) { Instantiate(lazerExplosion, cursor.position, Quaternion.identity); } var hits = Physics.SphereCastAll(camera.transform.position, 1, camera.transform.forward, 1000f, LayerMask.GetMask("Units")); foreach (var h in hits) { if (hit.transform) { UnitCombat comb = h.transform.GetComponent <UnitCombat>(); UnitBase unit = h.transform.GetComponent <UnitBase>(); print(hit); print(comb); print(unit); if (unit != null && comb != null && unit.TeamIndex == 1 && unit as UnitProducer == null) { comb.Damage(lazerDamage); } } } } if (Input.GetMouseButtonDown(0)) // Did the player just click down the left mouse? { clickStartPos = Input.mousePosition; } if (Input.GetMouseButtonUp(0)) // Did the player just click down the left mouse? { if (Vector2.Distance(clickStartPos, Input.mousePosition) > dragThreshold) { OnBoxSelect(clickStartPos, Input.mousePosition); } else { OnLeftClick(camera.ScreenPointToRay(Input.mousePosition)); } } if (Input.GetMouseButtonDown(1)) // Did the player just click down the right mouse? { OnRightClick(camera.ScreenPointToRay(Input.mousePosition)); } }