How do I make it so if a raycast hits an object with a certain tag it will instantiate an effect?
So I'm making a game where you have a sword, when it hits something it creates a little spark effect (this is done with Raycast), this works well, however I want to make it so that when it hits an object with the tag "Enemy" it instantiates a blood effect (which I have). Heres the script:
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Sword01 : MonoBehaviour {
private Animator anim;
public float fireRate = 1f;
public float damage = 10f;
public float range = 100f;
public GameObject impactEffect;
public GameObject bloodEffect;
public float impactforce = 30f;
private float nextTimeToFire = 0f;
public Camera fpsCam;
// Start is called before the first frame update
void Start()
{
anim = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButton(0) && Time.time >= nextTimeToFire)
{
Attack();
nextTimeToFire = Time.time + 1f / fireRate;
anim.SetTrigger("Attack");
}
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.D))
{
anim.SetBool("isWalking", true);
}
else
{
anim.SetBool("isWalking", false);
}
void Attack()
{
RaycastHit hit;
if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
{
Debug.Log(hit.transform.name);
Target target = hit.transform.GetComponent<Target>();
if (target != null)
{
target.TakeDamage (damage);
}
if (hit.rigidbody != null)
{
hit.rigidbody.AddForce(-hit.normal * impactforce);
}
GameObject impactGo = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));
Destroy(impactGo, 2f);
if (target.tag == "Enemy")
{
Instantiate(bloodEffect, hit.point, Quaternion.LookRotation(hit.normal));
}
}
}
}
}
it works well without the:
if (target.tag == "Enemy")
{
Instantiate(bloodEffect, hit.point, Quaternion.LookRotation(hit.normal));
}
part of the script, but with it it just makes the sparks instantiate constantly when I click to attack, all I want is for it to instantiate the spark effect (impactEffect) when it hits any object and instantiate the bloodEffect when it hits an object with tag "Enemy".
Thanks for any help.
if (hit.transform.CompareTag("Enemy"))
{
[ Do blood splash stuff ]
} else {
[ Do spark effect ]
}
Your script looks pretty good, so the above is probably enough to help :)
Excellent :) could you $$anonymous$$ark this as best answer? N00b building my rep ;)