- Home /
Reseting materials color after mass selecting them during run time?
In my game I have it so that the player can select a unit and then select a tile in my grid for it to move to. I am showing that it is selected by changing the color of the tile and the unit clicked on. What I can't figure out is how to deselect(change the color) the tile after the unit has been deselected or a new tile selected.
using UnityEngine;
using System.Collections;
public class MousePower : MonoBehaviour {
//Raycasting Variables
private bool RayHit;
private Ray ray;
RaycastHit hit;
//Selection variables
private bool unitSelect=false;
public void mousePosRay(){ // Finds the object the user is mousing over
ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RayHit = Physics.Raycast (ray.origin, ray.direction, out hit);
Debug.DrawRay (ray.origin, ray.direction * 1000);
}
public void unitTileSelect(){
if (hit.collider.gameObject.tag == "Unit"&&Input.GetButtonDown("Fire1")) {
if(unitSelect==false){//Selecting
hit.transform.gameObject.renderer.material.color=Color.red;
unitSelect=true;
}
else if(unitSelect==true){//deselecting
hit.transform.gameObject.renderer.material.color=Color.white;
unitSelect=false;
}
}
if (hit.collider.gameObject.tag == "Ground" && Input.GetButtonDown ("Fire2") && unitSelect == true) {
hit.transform.gameObject.renderer.material.color=Color.blue;//shows tile selection
}
}
void Update () {
mousePosRay ();//Executes mouse position finding
unitTileSelect ();// Executes tile selection
}
}
Answer by Andres-Fernandez · Jun 27, 2014 at 07:31 AM
Just keep a reference to the unit and the tile selected (like currentUnit and currentTile). When nothing is selected keep them as null (or any other default value). Whenever you select a new unit just check if the object your ray collides with is different from the reference unit. If different, turn currentUnit and currentTile back to normal color and update currentUnit. Whenever you select a new tile check it against currentTile. If different, turn currentTile back to normal color and update currentTile to the new tile selected.
Once I assign a value to the tiles or units selected how can I access their gameObjects from the value.
What do you mean "from their value"? If you store the reference to the gameobject when you select a unit/tile you don't need to know the value. You can just have a currentTileSelected and currentUnitSelected object. Just one of each (and check against them when you select a new unit/tile).
If you have a reference to a component, just use
referenceToComponent.gameObject
to get the GameObject.
I'm sorry, after just thinking about it for about 5 additional $$anonymous$$utes I realized how foolish of a question it was.
Your answer
![](https://koobas.hobune.stream/wayback/20220613152621im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Change Transparency 1 Answer
Optimize script or Other way get material name (js) 2 Answers
Something like OnTriggerExit for Raycasts? 2 Answers
Skyboxes, GetPixel and Raycast Directions 1 Answer
Make a selection 0 Answers