convert GameObject to Rigidbody type

Hi,

When I find a game Object like this:

GameObject.Find("physics_body")

If I try to assign it to a variable that is typed as Rigidbody, it fails.

There is a rigidbody component applied to this model yes, and If I use the inspector it all works fine.

I get the following:

BCE0022: Cannot convert 'UnityEngine.GameObject' to 'UnityEngine.Rigidbody'.

Note that it works very well within the inspector, but how can I do the same via script? there is a conversion going on somewhere but I fail to find how to do that within a script.

How should I go about it?

thanks,

Jean

2 Answers

2

A GameObject and a Rigidbody are two entirely different types, so you cannot assign one to the other. As you find out, you have to get the Rigidbody component from the GameObject instead, ie:

`joint.connectedBody = GameObject.Find("physics_body").rigidbody;`

The reason you can do this in the inspector is that the inspector is smart, and if you drag a GameObject onto a component reference, it will automatically search the GameObject for matching components to assign. As you cannot drag a component itself, this is also needed to have an easy way to assign component references in the editor.

Found it after messing around desperately

you actually pass the component reference itself.

something like this:

<joint>.connectedBody = <GameObject>.GetComponent(Rigidbody);

Simple. Maybe it's in the doc somewhere, but I would say it would deserve a bit more explanation or examples on this.

Oddly enough, passing the right value solved other problems that at first seemed unrelated, I was getting errors about the connectedBody function itself, not the fact that the value passed was of the wrong type. see http://answers.unity3d.com/questions/18378/connectedbody-error-when-used-in-script

Jean

How could I use this in C#?