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.
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                