error CS1061: Are you missing an assembly reference?
Hello,
The Console is giving the error:
error CS1061: Type UnityEngine.Component' does not contain a definition for attachedRigidbody' and no extension method attachedRigidbody' of type UnityEngine.Component' could be found. Are you missing an assembly reference?
Here is the script:
 using System;
 using UnityEngine;
 
 namespace UnityStandardAssets.Effects
 {
     public class WaterHoseParticles : MonoBehaviour
     {
         public static float lastSoundTime;
         public float force = 1;
 
 
         private ParticleCollisionEvent[] m_CollisionEvents = new ParticleCollisionEvent[16];
         private ParticleSystem m_ParticleSystem;
 
 
         private void Start()
         {
             m_ParticleSystem = GetComponent<ParticleSystem>();
         }
 
 
         private void OnParticleCollision(GameObject other)
         {
             int safeLength = m_ParticleSystem.GetSafeCollisionEventSize();
 
             if (m_CollisionEvents.Length < safeLength)
             {
                 m_CollisionEvents = new ParticleCollisionEvent[safeLength];
             }
 
             int numCollisionEvents = m_ParticleSystem.GetCollisionEvents(other, m_CollisionEvents);
             int i = 0;
 
             while (i < numCollisionEvents)
             {
                 if (Time.time > lastSoundTime + 0.2f)
                 {
                     lastSoundTime = Time.time;
                 }
 
                 var col = m_CollisionEvents[i].colliderComponent;
 
                 if (col.attachedRigidbody != null)
                 {
                     Vector3 vel = m_CollisionEvents[i].velocity;
                     col.attachedRigidbody.AddForce(vel*force, ForceMode.Impulse);
                 }
 
                 other.BroadcastMessage("Extinguish", SendMessageOptions.DontRequireReceiver);
 
                 i++;
             }
         }
     }
 }
 
 
               attachedRigidbody and attachedRigidbody.AddForce appear red in the script on Mono.
Any ideas how to fix it, maybe how I can provide the missing assembly reference?
Thanks!
Answer by Matthewj866 · Apr 17, 2017 at 01:24 AM
@damouss Hi there, and welcome to Unity Answers.
For clarification, attachedRigidBody lives on Collider and not GameObject: https://docs.unity3d.com/ScriptReference/Collider-attachedRigidbody.html
The issue here is that GameObject does not have any property called attachedRigidbody. In this instance, you're better off doing other.GetComponent<Rigidbody>() rather than trying to use Collider.attachedRigidBody as this will lead to longer code that (probably) does the exact same thing.
Whenever an error says X does not contain a definition for Y, this means that whatever X is, Y does not exist within it so it can never compile. This is just for future reference.
Hope this helps!
Hi. Iam having same issue. What wrong am i doing?
here is the script:
 using System;
 using UnityEngine;
 
 namespace UnityStandardAssets.Effects
 {
     public class WaterHoseParticles : $$anonymous$$onoBehaviour
     {
         public static float lastSoundTime;
         public float force = 1;
 
 
         private ParticleCollisionEvent[] m_CollisionEvents = new ParticleCollisionEvent[16];
         private ParticleSystem m_ParticleSystem;
 
 
         private void Start()
         {
             m_ParticleSystem = GetComponent<ParticleSystem>();
         }
 
 
         private void OnParticleCollision(GameObject other)
         {
             int safeLength = m_ParticleSystem.GetSafeCollisionEventSize();
 
             if (m_CollisionEvents.Length < safeLength)
             {
                 m_CollisionEvents = new ParticleCollisionEvent[safeLength];
             }
 
             int numCollisionEvents = m_ParticleSystem.GetCollisionEvents(other, m_CollisionEvents);
             int i = 0;
 
             while (i < numCollisionEvents)
             {
                 if (Time.time > lastSoundTime + 0.2f)
                 {
                     lastSoundTime = Time.time;
                 }
 
                 var col = m_CollisionEvents[i].colliderComponent;
 
                 if (other.GetComponent<Rigidbody> != null)
                 {
                     Vector3 vel = m_CollisionEvents[i].velocity;
                     other.GetComponent<Rigidbody>.AddForce(vel*force, Force$$anonymous$$ode.Impulse);    
                 }
 
                 other.Broadcast$$anonymous$$essage("Extinguish", Send$$anonymous$$essageOptions.DontRequireReceiver);
 
                 i++;
             }
         }
     }
 }
 
                 Answer by Budgieboy · Jan 14, 2018 at 09:02 PM
 using System;
 using UnityEngine;
 using System.Collections;
 
 namespace UnityStandardAssets.Effects
 {
     public class WaterHoseParticles : MonoBehaviour
     {
         public static float lastSoundTime;
         public float force = 1;
         public Rigidbody attachedRigidbody;
 
         private ParticleCollisionEvent[] m_CollisionEvents = new ParticleCollisionEvent[16];
         private ParticleSystem m_ParticleSystem;
 
 
         private void Start()
         {
             m_ParticleSystem = GetComponent<ParticleSystem>();
         }
 
 
         private void OnParticleCollision(GameObject other)
         {
             int safeLength = m_ParticleSystem.GetSafeCollisionEventSize();
 
             if (m_CollisionEvents.Length < safeLength)
             {
                 m_CollisionEvents = new ParticleCollisionEvent[safeLength];
             }
 
             int numCollisionEvents = m_ParticleSystem.GetCollisionEvents(other, m_CollisionEvents);
             int i = 0;
 
             while (i < numCollisionEvents)
             {
                 if (Time.time > lastSoundTime + 0.2f)
                 {
                     lastSoundTime = Time.time;
                 }
 
                 var Collider = m_CollisionEvents[i].colliderComponent;
 
                 if (GetComponent<Collider>().attachedRigidbody != null)
                 {
                     Vector3 vel = m_CollisionEvents[i].velocity;
                     GetComponent<Collider>().attachedRigidbody.AddForce(vel*force, ForceMode.Impulse);
                 }
 
                 other.BroadcastMessage("Extinguish", SendMessageOptions.DontRequireReceiver);
 
                 i++;
             }
         }
     }
 }
 
 
              Answer by eipok · Oct 20, 2017 at 07:00 PM
Hi @Matthewj866 I still have that problem and that solution is not fixing it, it comes with following error:
'Assets/Standard Assets/ParticleSystems/Scripts/WaterHoseParticles.cs(43,15): error CS0019: Operator !=' cannot be applied to operands of type method group' and null''. And this other error; "Assets/Standard Assets/ParticleSystems/Scripts/WaterHoseParticles.cs(46,12): error CS0119: Expression denotes a method group', where a variable', value' or `type' was expected". code:
 using System;
 using UnityEngine;
 
 namespace UnityStandardAssets.Effects
 {
     public class WaterHoseParticles : MonoBehaviour
     {
         public static float lastSoundTime;
         public float force = 1;
 
 
         private ParticleCollisionEvent[] m_CollisionEvents = new ParticleCollisionEvent[16];
         private ParticleSystem m_ParticleSystem;
 
 
         private void Start()
         {
             m_ParticleSystem = GetComponent<ParticleSystem>();
         }
 
 
         private void OnParticleCollision(GameObject other)
         {
             int safeLength = m_ParticleSystem.GetSafeCollisionEventSize();
 
             if (m_CollisionEvents.Length < safeLength)
             {
                 m_CollisionEvents = new ParticleCollisionEvent[safeLength];
             }
 
             int numCollisionEvents = m_ParticleSystem.GetCollisionEvents(other, m_CollisionEvents);
             int i = 0;
 
             while (i < numCollisionEvents)
             {
                 if (Time.time > lastSoundTime + 0.2f)
                 {
                     lastSoundTime = Time.time;
                 }
 
                 var col = m_CollisionEvents[i].colliderComponent;
 
                 if (other.GetComponent<Rigidbody> != null)
                 {
                     Vector3 vel = m_CollisionEvents[i].velocity;
                     other.GetComponent<Rigidbody>.AddForce(vel*force, ForceMode.Impulse);    
                 }
 
                 other.BroadcastMessage("Extinguish", SendMessageOptions.DontRequireReceiver);
 
                 i++;
             }
         }
     }
 }
 
              Hey man, the problem is that you're using other.GetComponent and there's no such variable (other) in that script. Also you must use () after Rigidbody on lines 45-46. This should work:
 if (col.GetComponent<Rigidbody>() != null)
                 {
                     Vector3 vel = m_CollisionEvents[i].velocity;
                     col.GetComponent<Rigidbody>().AddForce(vel*force, Force$$anonymous$$ode.Impulse);
                 }
                 Your answer
 
             Follow this Question
Related Questions
Error That Doesn't Affect My Game Is Spammed Every Frame. 1 Answer
Creating multiple text components on a canvas 1 Answer
Need Help! (How to make a game series by brackeys [video 2] ) 1 Answer
When i type code to move my person i get errors 1 Answer
Can't re-parent GameObject with Text(script) component. 0 Answers