public override void Update(PlayerController pc) { if (!pc.lineRenderer.gameObject.activeSelf) { pc.lineRenderer.gameObject.SetActive(true); } Vector3 endRaycastPos = Vector3.forward * pc.playerModel.laserDistance; RaycastHit hit; if (Physics.Raycast(new Ray(pc.lineRenderer.transform.position, pc.lineRenderer.transform.forward), out hit, pc.playerModel.laserDistance, pc.shootLayerMask.value)) { endRaycastPos = Vector3.forward * hit.distance; GroundEnemy gEnemy = hit.collider.GetComponent <GroundEnemy>(); if (gEnemy != null) { gEnemy.TakeDamage(pc.playerModel.laserDamage); } else { FlyingEnemy fEnemy = hit.collider.GetComponent <FlyingEnemy>(); if (fEnemy != null) { fEnemy.TakeDamage(pc.playerModel.laserDamage); } } } pc.lineRenderer.SetPosition(1, endRaycastPos); time -= Time.deltaTime; pc.Move(); pc.Aim(); pc.CheckHabilities(); }
private void Explode() { hasExploded = true; //Instantiate(explosionEffect, transform.position, transform.rotation); Collider[] colliders = Physics.OverlapSphere(transform.position, explosionRadius); foreach (Collider nearbyObject in colliders) { /*Rigidbody rgb = nearbyObject.GetComponent<Rigidbody>(); * if (rgb != null) * { * rgb.AddExplosionForce(force, transform.position, explosionRadius); * }*/ GroundEnemy gEnemy = nearbyObject.GetComponent <GroundEnemy>(); if (gEnemy != null) { gEnemy.TakeDamage(damage); } else { FlyingEnemy fEnemy = nearbyObject.GetComponent <FlyingEnemy>(); if (fEnemy != null) { fEnemy.TakeDamage(damage); } } Destroy(gameObject); } Destroy(gameObject); }
void OnTriggerEnter(Collider other) { FlyingEnemy enemy = other.GetComponent <FlyingEnemy>(); if (enemy != null) { enemy.TakeDamage(); Destroy(gameObject); } }
void OnTriggerEnter(Collider col) { if (col.gameObject.layer == LayerMask.NameToLayer("Enemy")) { GroundEnemy gEnemy = col.GetComponent <GroundEnemy>(); if (gEnemy != null) { gEnemy.TakeDamage(damage); } else { FlyingEnemy fEnemy = col.GetComponent <FlyingEnemy>(); if (fEnemy != null) { fEnemy.TakeDamage(damage); } } Destroy(gameObject); } }
// Update is called once per frame void Update() { duration -= Time.deltaTime; if (duration <= 0) { Destroy(gameObject); } previousPosition = transform.position; transform.Translate(Vector3.forward * speed * Time.deltaTime); RaycastHit[] hits = Physics.RaycastAll(previousPosition, (transform.position - previousPosition).normalized, (transform.position - previousPosition).magnitude, GameManager.instance.player.shootLayerMask); for (int i = 0; i < hits.Length; i++) { LayerMask layer = hits[i].collider.gameObject.layer; //Debug.Log(hits[i].collider.name); if (layer == LayerMask.NameToLayer("Enemy")) { GroundEnemy gEnemy = hits[i].collider.GetComponent <GroundEnemy>(); if (gEnemy != null) { gEnemy.TakeDamage(damage); } else { FlyingEnemy fEnemy = hits[i].collider.GetComponent <FlyingEnemy>(); if (fEnemy != null) { fEnemy.TakeDamage(damage); } } Destroy(gameObject); } if (layer == LayerMask.NameToLayer("Geometry")) { Destroy(gameObject); } } }
public void Shoot() { switch (actualWeapon) { case Weapon.rifle: actualARShootCooldown = playerModel.shootARCooldown; GameObject bulletAR; RaycastHit hitAR; if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hitAR, Mathf.Infinity, shootLayerMask)) { Vector3 dir = hitAR.point - bulletSpawner.transform.position; dir.Normalize(); bulletAR = Instantiate(bulletARPrefab, bulletSpawner.transform.position, bulletSpawner.transform.rotation); bulletAR.transform.forward = dir; //bulletAR.GetComponent<Rigidbody>().AddForce(dir * playerModel.shootForceAR * bulletAR.GetComponent<Rigidbody>().mass, ForceMode.Impulse); } else { bulletAR = Instantiate(bulletARPrefab, bulletSpawner.transform.position, Camera.main.transform.rotation); //bulletAR.GetComponent<Rigidbody>().AddForce(bulletSpawner.transform.forward * playerModel.shootForceAR * bulletAR.GetComponent<Rigidbody>().mass, ForceMode.Impulse); } actualOverheat += playerModel.bulletOverheat; gc.uiController.ChangeAROverheat(actualOverheat); if (actualOverheat >= playerModel.maxOverheatAR) { actualOverheat = playerModel.maxOverheatAR; saturatedAR = true; } break; case Weapon.shotgun: /*muzzleFlash.Play(); * muzzleFlash.GetComponentInChildren<WFX_LightFlicker>().StartCoroutine("Flicker");*/ for (int i = 0; i < pellets.Count; i++) { pellets[i] = Random.rotation; Quaternion rot = Quaternion.RotateTowards(bulletSpawner.transform.rotation, pellets[i], playerModel.shotgunSpreadAngle); RaycastHit hit; if (Physics.Raycast(Camera.main.transform.position, rot * Vector3.forward, out hit, playerModel.rangeShotgun, shootLayerMask)) { Debug.DrawRay(Camera.main.transform.position, rot * Vector3.forward, Color.red); //GameObject impact = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal)); GameObject impactHoleGO = Instantiate(impactHole, new Vector3(hit.point.x, hit.point.y + 0.1f, hit.point.z), Quaternion.LookRotation(hit.normal)); impactHoleGO.transform.parent = hit.transform; GroundEnemy gEnemy = hit.collider.GetComponent <GroundEnemy>(); if (gEnemy != null) { gEnemy.TakeDamage(playerModel.shotgunDamage); } else { FlyingEnemy fEnemy = hit.collider.GetComponent <FlyingEnemy>(); if (fEnemy != null) { fEnemy.TakeDamage(playerModel.shotgunDamage); } } /*imitHoles.Add(impactHoleGO); * * if (limitHoles.Count == 25) * { * Destroy(limitHoles[0]); * limitHoles.Remove(limitHoles[0]); * } * * GameController.instance.destroyObjects.Add(impactHoleGO);*/ //Destroy(impact, 2f); Destroy(impactHoleGO, 20f); } actualShotgunShootCooldown = playerModel.shootShotgunCooldown; shotgunShotted = true; } break; case Weapon.launcher: GameObject grenade = Instantiate(grenadePrefab, bulletSpawner.transform.position, bulletSpawner.transform.rotation); grenade.GetComponent <Rigidbody>().AddForce(bulletSpawner.transform.forward * playerModel.shootForceLauncher * grenade.GetComponent <Rigidbody>().mass, ForceMode.VelocityChange); ChangeGrenadeAmmo(); break; } }