Method not being called from another script
I honestly have no clue why this is happening, but the method from UIManager class SetSelected() isn't isnt getting called when I call it from the Cast script. I have confirmed that the if statements in Update do pass as true. I know the SetSelected() isn't getting called because the debugging print functions never printed.
UIManager.cs using UnityEngine; using System.Collections;
public class UIManager : MonoBehaviour {
public Transform[] spellBoxes;
public Sprite fireballSelected;
public Sprite iceballSelected;
public void SetSelected(int x)
{
switch(x)
{
case (0) :
spellBoxes[x].GetComponent<SpriteRenderer>().sprite = fireballSelected;
break;
case (1) :
spellBoxes[x].GetComponent<SpriteRenderer>().sprite = iceballSelected;
break;
default :
break;
}
}
}
Cast.cs
using UnityEngine;
using System.Collections;
public class Cast : MonoBehaviour {
public float fireRate = 0;
public int damage = 10;
public Transform Fireball;
public Transform Iceball;
static public Transform selection;
private UnitySampleAssets._2D.PlatformerCharacter2D character;
private UIManager selectedBox;
float timeToFire = 0;
void Update ()
{
if(Input.GetKeyDown(KeyCode.Alpha1))
{
selection = Fireball;
selectedBox.SetSelected(0);
}
if(Input.GetKeyDown(KeyCode.Alpha2))
{
selection = Iceball;
selectedBox.SetSelected(1);
}
}
}
Try selectedBox.Send$$anonymous$$essage("SetSelected", 0);
Answer by habsi70 · May 14, 2016 at 11:18 AM
It looks as if your selectedBox is null. There are multiple ways to connect objects. One easy way would be to add a public Transform which stores the Object holding your UIManager.cs Script. To call SetSelected you have to get the script component. It could look something like this:
using UnityEngine;
using System.Collections;
public class Cast : MonoBehaviour {
public float fireRate = 0;
public int damage = 10;
public Transform Fireball;
public Transform Iceball;
static public Transform selection;
private UnitySampleAssets._2D.PlatformerCharacter2D character;
public Transform managerObject; // the owner of your UIManager Script
private UIManager selectedBox;
float timeToFire = 0;
void Start() {
// you have to get the Script to be able to call its functions
selectedBox = managerObject.GetComponent<UIManager>();
}
void Update ()
{
if(Input.GetKeyDown(KeyCode.Alpha1))
{
selection = Fireball;
selectedBox.SetSelected(0);
}
if(Input.GetKeyDown(KeyCode.Alpha2))
{
selection = Iceball;
selectedBox.SetSelected(1);
}
}
}
In the Inspector you have to connect your UIManager Object to managerObject.