Quantcast
Viewing latest article 1
Browse Latest Browse All 20

Can I call a function on a behavior attached to a prefab from it's spawner object?

I am making a falling block game. The blocks can be red, orange, yellow, green, or blue. Besides just having different materials, each color has other properties I'll need to implement later. I also want it to be possible for other objects to change the color of each individual instance of Box later on. I'm not sure if this is formed correctly, but I don't get any errors with this code: public class BoxProperties : MonoBehaviour { public Material RedMat; public Material OrangeMat; public Material YellowMat; public Material GreenMat; public Material BlueMat; public enum BoxType { Red, Orange, Yellow, Green, Blue } public BoxType myType; ////snipped Start() and Update() public void setType(BoxType newtype) { switch (newtype) { case BoxType.Red: renderer.material = RedMat; break; case BoxType.Orange: renderer.material = OrangeMat; break; case BoxType.Yellow: renderer.material = YellowMat; break; case BoxType.Green: renderer.material = GreenMat; break; case BoxType.Blue: renderer.material = BlueMat; break; } myType = newtype; } } I made setType() public so other objects can use it to change the type of any given instance. Additionally, I have a non-renderable cube that represents a spawn volume. I am able to get the Box instances to spawn at random points in the cube and fall, but I am not sure how I can get at the prefab instance's setType method to set the type of box after spawning. public class SpawnBoxes : MonoBehaviour { private Vector3 nextpos; //Randomly picked new spawn position private float collecttime; //Counts how long has passed since the last spawn private GameObject nextbox; public float spawntime; public GameObject spawnee; //Box object goes here // Use this for initialization void Start () { collecttime = 0; } // Update is called once per frame void Update () { collecttime += Time.deltaTime; if (collecttime > spawntime) { nextpos = randPos(renderer.bounds.size, transform.position); collecttime = 0; nextbox = Instantiate(spawnee,nextpos,Random.rotation) as GameObject; //Set type of nextbox, not sure how to access that function, but it's part of a component script attached to the Box prefab nextbox.GetComponent("BoxProperties").setType(BoxType.Green); //Doesn't work. } } //snipped randPos() } I realize there are some other approaches, like making separate prefabs for each Box type and spawning one randomly, but I wonder if there is a way to make this call work?

Viewing latest article 1
Browse Latest Browse All 20

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>