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