- Home /
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 :)
Thank you!
Answer by smoggach · Aug 12, 2014 at 03:25 PM
iAmATether = this.gameObject.GetComponents();
This function returns an array of RigidBody2D. iAmATether is not an array. Try GetComponent() or use GetComponents()[0];
Answer by Joxno · Aug 12, 2014 at 04:19 PM
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.