- Home /
Question by
dfdfcgfgfgffhh · May 10, 2020 at 12:48 AM ·
damageexplosion
How can i access the Target script from the Explode function? This does not work for me
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Grenade : MonoBehaviour { float timer = 2; float countdown; float radius = 20; float force = 2000;
bool hasExploded;
public bool takeDamage = false;
[SerializeField] GameObject explosionParticles;
// Start is called before the first frame update
void Start()
{
countdown = timer;
}
// Update is called once per frame
void Update()
{
countdown -= Time.deltaTime;
}
private void OnTriggerEnter(Collider other)
{
if(other.tag == "Enemy" || other.tag == "Floor")
{
if (countdown <= 0 && !hasExploded)
{
Explode();
}
}
}
void Explode()
{
GameObject spawnedParticle = Instantiate(explosionParticles, transform.position, transform.rotation);
Destroy(spawnedParticle, 1);
Collider[] colliders = Physics.OverlapSphere(transform.position, radius); // Find objects with colliders within the radius
foreach (Collider nearbyObject in colliders)
{
Rigidbody rb = nearbyObject.GetComponent<Rigidbody>();
if (rb != null)
{
rb.AddExplosionForce(force, transform.position, radius);
}
**Target targetScript = nearbyObject.GetComponent<Target>();
if(targetScript != null)
{
targetScript.Health = targetScript.Health - 10;
}**
}
hasExploded = true;
Destroy(gameObject);
}
}
,
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Target : MonoBehaviour { public int Health = 10; public bool Alive { private set; get; } = true; private Animator anim = null;
public AudioClip ArrowImpact;
public float Volume;
public AudioSource Audio;
public bool alreadyPlayed = false;
SkinnedMeshRenderer msh;
GameObject spawner;
GroundSpawner Gspawner;
GameObject player;
ArenaPlayerHealth playerHealthScript;
private void Awake()
{
anim = GetComponent<Animator>();
Audio = GetComponent<AudioSource>();
SetupBodyParts();
msh = GetComponentInChildren<SkinnedMeshRenderer>();
msh.material.color = Color.blue;
spawner = GameObject.FindGameObjectWithTag("Spawner");
Gspawner = spawner.GetComponent<GroundSpawner>();
player = GameObject.FindGameObjectWithTag("Player");
playerHealthScript = player.GetComponent<ArenaPlayerHealth>();
}
private void Update()
{
}
private void SetupBodyParts()
{
BodyPart[] bodyparts = GetComponentsInChildren<BodyPart>();
foreach (BodyPart bodypart in bodyparts)
{
bodypart.Setup(this);
}
}
public void TakeDamage(int damage)
{
if (!Alive)
{
return;
}
Health -= damage;
StartCoroutine(ReturnBlack());
Audio.PlayOneShot(ArrowImpact, Volume);
alreadyPlayed = true;
if (Health<= 0)
{
Gspawner.killCount++;
Kill();
playerHealthScript.currentHealth ++;
}
}
public void Kill()
{
Alive = false;
anim.SetBool("IsDead", true);
Gspawner.enemiesKilled++;
StartCoroutine(DestroyWhenDead());
}
IEnumerator DestroyWhenDead()
{
yield return new WaitForSeconds(3);
Destroy(gameObject);
}
private void TurnRed()
{
msh.material.color = Color.yellow;
}
IEnumerator ReturnBlack()
{
TurnRed();
yield return new WaitForSeconds(0.1f);
msh.material.color = Color.blue;
}
}
Comment
Your answer
Follow this Question
Related Questions
Restricting horizontal slash attack 0 Answers
FPS Tutorial Rocket Launcher 4 Answers
How to I calculate damage when using AddExplosionForce? 0 Answers
Explosion damage script only deals damage in the first explosion and none afterwards 0 Answers
Decrease ExplosionForce and damage continously by distance 2 Answers