- Home /
Raycast Tag of Hit GameObject
I have recently been having issues with finding the tag of an object hit via Raycast. I have an object named Cube with a script "Enemy" attached to it that handles the "Damage" message. Cube also has an empty GameObject with collider parented to it with a tag called "Headshot". Currently firing any gun throws up a MissingFieldException: UnityEngine.RaycastHit.colliderS. If the whole error is necessary, it is below. My code is this:
function SemiAutoFire () {
var fwd = transform.TransformDirection(Vector3.forward);
var hit : RaycastHit;
Debug.DrawRay(transform.position, fwd, Color.red);
if(Input.GetButtonDown ("Fire1") && Time.time > nextFire && boolet > 0 && SemiAuto == true){
nextFire = Time.time + fireRate;
boolet = boolet - 1;
AutoReload();
AudioSource.PlayClipAtPoint(gunShot, Camera.main.transform.position, 1);
for(var i : int = 0; i < myBullets; i++){
fwd.x += Random.Range(-accuracy, accuracy);
fwd.y += Random.Range(-accuracy, accuracy);
fwd.z += Random.Range(-accuracy, accuracy);
if (Physics.Raycast(transform.position, fwd, hit, BRange)){
Instantiate(bulletTex[Random.Range(0,3)], hit.point, Quaternion.FromToRotation(Vector3.up, hit.normal));
if (hit.colliderS.compareTag("Headshot") && headshots == true){
print ("Nice shot, mate.");
hit.collider.SendMessage("Damage", damage * headshotMulti, SendMessageOptions.DontRequireReciever);
}
if (!hit.collider.compareTag("Headshot") || headshots == false){
print ("Nice bodyshot and/or miss, NOOB!");
hit.collider.SendMessage("Damage", damage, SendMessageOptions.DontRequireReciever);
}
if (hit.rigidbody !=null) {
hit.rigidbody.AddForceAtPosition(fwd * power, hit.point);
}
}
}
}
}
Thank you for your time. This is the full error just in case:
ctory) Boo.Lang.Runtime.RuntimeServices.GetProperty (System.Object target, System.String nameMissingFieldException: UnityEngine.RaycastHit.colliderS Boo.Lang.Runtime.DynamicDispatching.PropertyDispatcherFactory.FindExtension (IEnumerable`1 candidates) Boo.Lang.Runtime.DynamicDispatching.PropertyDispatcherFactory.Create (SetOrGet gos) Boo.Lang.Runtime.DynamicDispatching.PropertyDispatcherFactory.CreateGetter () Boo.Lang.Runtime.RuntimeServices.DoCreatePropGetDispatcher (System.Object target, System.Type type, System.String name) Boo.Lang.Runtime.RuntimeServices.CreatePropGetDispatcher (System.Object target, System.String name) Boo.Lang.Runtime.RuntimeServices+c_AnonStorey17.<>m_C () Boo.Lang.Runtime.DynamicDispatching.DispatcherCache.Get (Boo.Lang.Runtime.DynamicDispatching.DispatcherKey key, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory) Boo.Lang.Runtime.RuntimeServices.GetDispatcher (System.Object target, System.String cacheKeyName, System.Type[] cacheKeyTypes, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory) Boo.Lang.Runtime.RuntimeServices.GetDispatcher (System.Object target, System.Object[] args, System.String cacheKeyName, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory fa) UnityScript.Lang.UnityRuntimeServices.GetProperty (System.Object target, System.String name)
If you know the gameobject you are working with there is absolutely no need to use sendmessage, it's very slow. Use getcomponent ins$$anonymous$$d.
Thank you, YoungDeveloper, but I think I'd really rather use Send$$anonymous$$essage, because I may not know the GameObject whenever the raycast hits.
Answer by hbalint1 · Apr 15, 2015 at 03:35 PM
in this line you have an S at the end of 'collider':
if (hit.colliderS.compareTag("Headshot") && headshots == true){
just delete it.