Detect if Raycast hits a game object
Hi all,
I am new to Unity, this is my 2nd post.
I am basically shooing out a Raycast from the barrel of my gun, and I am trying to get the animated "enemy" NPC to detect when he is hit.
From my BasicAmmoRayCast class, I am shooting out a RayCast, but I am getting errors when I attempt to use hit.collider.gameObject.tag on my animated character ("MaleCharacterAnimation")
[CODE] { protected override void OnUpdate ()
{
base.OnUpdate ();
RaycastHit hit = new RaycastHit();
Ray ray = new Ray(CachedTransform.position,transform.TransformDirection (Vector3.forward));
if (!_hit && _hitPrefab != null && Physics.Raycast (ray,out hit,_fireDistance)){
SpawnHit(hit.collider,hit.point,Quaternion.FromToRotation (Vector3.forward, hit.normal));
_hit = true;
// Echo the Raycast transform
Vector3 forward = transform.TransformDirection(Vector3.forward) * 50;
Debug.DrawRay(transform.position, forward, Color.green);
// Tell me what object is hit
if (Physics.Raycast(ray, out hit)) {
print(hit.collider.gameObject.name);
}
// Detect if my enemy character is hit
if (Physics.Raycast(ray, out hit))
if (hit.collider.gameObject.tag("MaleCharacterAnimation")) {
print("HIT TARGET");
}
}
}
I am getting the error "Non-invocable member 'UnityEngine.GameObject.tag' cannot be used like a method" on this line
if (hit.collider.gameObject.tag("MaleCharacterAnimation"))
How would I refer to my game object? Or what would be the best way to go about this?
Basically, I want to be able to detect the hit on the NPC and then make him go through a transition of dying etc...
I don't currently have a script on the NPC as yet, as I thought it would be better to script it from the player end. Furthermore, I am not actually sure how I would detect a hit from a raycast on that NPC Character.
Any information or suggestions would be most appreciative.
Thankyou in advance,
An eager new Unity user.... (and C# noob).
Answer by JedBeryll · May 26, 2016 at 05:34 AM
if (hit.collider.gameObject.tag == "MaleCharacterAnimation")
As for detecting the hit, you could do it all from the player controller script, but usually it's better to have an enemy controller script on them. So if you put an EnemyController script on them you can notify him that he's being hit. Suppose you have a method in the EnemyController called Kill(). You can call it like
EnemyController enemy = hit.collider.GetComponent<EnemyController>();
enemy.Kill();
Then the enemy can execute it's death and whatever methods it needs to call or whatever variables it needs to set.
If it doesn't need to do anything other than play an animation though you can do it from the player script, in that case you just get the Animator with the GetComponent and play the animation.
Answer by TeslasGhost · May 26, 2016 at 07:19 AM
Thanks so much JedBeryll, that helped and is now working!!!
Your answer
Follow this Question
Related Questions
How would I project a Gameobject onto the surface of another? 0 Answers
Advanced AI sight? AI can detect you if part of you is visible to them. Is it Possible? 1 Answer
Remove Object from Game after Collision with Player (Unity 5.2.3f1) 1 Answer
Problem dealing with RaycastHit.normal on collider edges 0 Answers
C# Error while trying to set up shot damage and headshots 0 Answers