C#:Unity:Having trouble reference Rigidbody2d from different script

Hello!

My scene has a main character, balloon and tether. I have a spring joint 2d connected to the balloon and i want to be able to change the connected body to the object the player clicks on. So far i have the following 2 scripts, one for the balloon and one for the connecting body:

Balloon:

using UnityEngine;
using System.Collections;

public class BalloonTethering : MonoBehaviour {

    public SpringJoint2D theSpringJoint;
    public Rigidbody2D theTether;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        theSpringJoint.connectedBody = theTether;
    }
}

Connecting Body:

using UnityEngine;
using System.Collections;

public class TetherAny : MonoBehaviour {

    public GameObject mainBalloon;
    public Rigidbody2D iAmATether = new Rigidbody2D();

    // Use this for initialization
    void Start () {
        mainBalloon.GetComponents<BalloonTethering>();
        iAmATether = this.gameObject.GetComponents<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update () {

    }

    void OnMouseDown(){
        BalloonTethering.theTether = iAmATether;
    }
}

I keep getting the following two errors on the TetherAny script:

(12,17): error CS0029: Cannot implicitly convert type UnityEngine.Rigidbody2D’ toUnityEngine.Rigidbody2D’

(21,34): error CS0120: An object reference is required to access non-static member `BalloonTethering.theTether’

If anyone could tell me where I’m going wrong it would be much appreciated :slight_smile:

Thank you!

iAmATether = this.gameObject.GetComponents();

This function returns an array of RigidBody2D. iAmATether is not an array.
Try GetComponent<>() or use GetComponents()[0];

There are a few errors in this,

Lets address error 1:
GetComponents returns an array of components of the desired data type.
Using GetComponent(); Will do what you want.

Error 2:
This is due to you trying to access the variable in the class itself instead of an instance of the class.
So in the ConnectingBody C# code, do this instead:

mainBalloon.GetComponent<Balloon>().theTether = iAmATether;

This will retrieve the object that has the Balloon component, access the instance of Balloon component and assign iAmATether to theTether.

On a side note

void Start () {
        mainBalloon.GetComponents<BalloonTethering>();
        iAmATether = this.gameObject.GetComponents<Rigidbody2D>();
    }

mainBalloon.GetComponents(); isn’t going to be doing anything since you aren’t assigning the returned data to a variable.