- Home /
Problem with TD script.
Hi guys. I'm making Tower Defence game and i stuck in scrip which i translated from java to c#. i dont know how to do for loops could you help me? (and also i use ngui free) using UnityEngine; using System.Collections;
public class INGAme : MonoBehaviour {
//GUI
public bool buildPanelOpen =false;
public TweenPosition BuildPanelTweener;
public TweenRotation BuildPanelArrowTweener;
//Placement
public Transform placementPlanesRoot;
public Material hoverMat;
public LayerMask placementLayrerMask;
private Material originalMat;
public GameObject lastHitObj;
// build
public Color onColor;
public Color offColor;
public GameObject[] allStructures;
public UISlicedSprite[] buildBtnGraphics;
private int structureIndex = 0;
void Start()
{
structureIndex = 0;
ApdateGUI();
}
void ToggleBuildPanel() {
if(buildPanelOpen)
{
//ray
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray, hit, 1000, placementLayerMask));
{
if(lastHitObj)
{
lastHitObj.renderer.material = originalMat;
}
lastHitObj = hit.collider.gameObject;
originalMat = lastHitObj.renderer.material;
lastHitObj.renderer.material = hoverMat;
}
BuildPanelTweener.Play(false);
BuildPanelArrowTweener.Play(false);
buildPanelOpen = false;
}
else
{
if(lastHitObj);
{
lastHitObj.renderer.material = originalMat;
lastHitObj = null;
}
BuildPanelTweener.Play(true);
BuildPanelArrowTweener.Play(true);
buildPanelOpen = true;
}
if(Input.GetMouseButtonDown(0) && lastHitObj)
{
if(lastHitObj.tag == "PlacementPlane_Open")
{
GameObject newStructure = instantiane(allStructures[structureIndex], lasHitObj.transform.position, Quaternion.identity);
newStructure.transform.localEulerAngles.y = ( Random.Range ( 0, 360 ) );
lastHitObj.tag = "PlacementPlane_Taken";
}
}
}
void UpdateGUI () {
//Go through all structure buttons (buttons in the build panel). and set them to “off”
for(UISlicedSprite theBtnGraphic )//in buildBtnGraphics
{
theBtnGraphic.color = offColor;
}
//set the selected build button to “on”
buildBtnGraphics[structureIndex].color = onColor;
}
void SetBuildChoice ( GameObject btnObj )
{
string btnName = btnObj.name;
if ( btnName == "Btn_Canoon")
{
structureIndex = 0;
}
else if ( btnName == "Btn_Missle" )
{
structureIndex = 1;
}
UpdateGUI ();
}
}
Answer by bompi88 · Dec 01, 2013 at 05:40 PM
C# has foreach loops, so you could do:
foreach (UISlicedSprite theBtnGraphic in buildBtnGraphics) {
theBtnGraphic.color = offColor;
}
or you can do a regular for loop:
for (int i = 0; i < buildBtnGraphics.Length; i++) {
buildBtnGraphics[i].color = offColor;
}
Oh god thanks i used foreach in my last project and i forgot about it ...
Answer by Sebulec · Dec 08, 2013 at 03:16 PM
I made few correct but still there are three errors. I have no ide whats wrong... using UnityEngine; using System.Collections; public class InGAmeGUI : MonoBehaviour { //NGU items public bool buildPanelOpen = false; public TweenPosition BuildPanelTweener; public TweenRotation BuildPanelArrowTweener; //Placement Plane Items public Transform placementPlanesRoot; // attach the placement plane root public Material hoverMat; // attach the hover material to this slot public LayerMask placementLayerMask; // calls up the layer mask selection private Material originalMat; private GameObject lastHitObj; //Build Selection Items public Color onColor; public Color offColor; public GameObject[] allStructures; public UISlicedSprite[] buildBtnGraphics; private int structureIndex = 0; void Start () { //reset the structure index, refresh the GUI structureIndex = 0; UpdateGUI(); } void Update () { if ( buildPanelOpen ) { var ray = Camera.main.ScreenPointToRay ( Input.mousePosition ); RaycastHit hit; if ( Physics.Raycast ( ray,out hit, 1000, placementLayerMask ) ) { if ( lastHitObj ) { lastHitObj.renderer.material = originalMat; } lastHitObj = hit.collider.gameObject; originalMat = lastHitObj.renderer.material; lastHitObj.renderer.material = hoverMat; // sets the planes material to the highlighted material } else // if the raycast didn’t hit anything { if ( lastHitObj ) // if we had previously hit something { lastHitObj.renderer.material = originalMat; // visually de select that object lastHitObj = null; // nullify the plane selection } } // drops a turrent on click if ( Input.GetMouseButtonDown(0) && lastHitObj ) //left mouse button was clicked and there is a last hitObject // if left mouse button (0) is clicked and we have something selected { if(lastHitObj.tag =="PlacementPlane_Open") { // drop the chosen structure exactly at the tile’s position and rotation of Zero. See how the “index” comes into play here? GameObject newStructure = Instantiate( allStructures[structureIndex], lastHitObj.transform.position, Quaternion.identity ); // set the new structure to have a random rotation. just for looks newStructure.transform.localEulerAngles.y = (Random.Range(0, 360)); //newStructure.transform.localEulerAngles.y = ( Random.Range ( 0, 360 ) ); // set this tile’s tag to “Taken” so we can’t double place a structure lastHitObj.tag = "PlacementPlane_Taken"; } } } } void UpdateGUI () { //Go through all structure buttons (buttons in the build panel). and set them to “off” foreach(UISlicedSprite theBtnGraphic in buildBtnGraphics )//in buildBtnGraphics { theBtnGraphic.color = offColor; } //set the selected build button to “on” buildBtnGraphics[structureIndex].color = onColor; } // this happens whenever the build arrow is clicked void ToggleBuildPanel () { if ( buildPanelOpen ) { // hide all build tiles foreach(Transform thePlane in placementPlanesRoot) { thePlane.gameObject.renderer.enabled =false; } // plays the build panel tweener script backward ( false ) buildPanelTweener.Play ( false ); // sets the boolean to false ( closed ) buildPanelOpen = false; } else // the build panel was closed, so instead do this… { BuildPanelTweener.Play(true); BuildPanelArrowTweener.Play(true); foreach ( Transform thePlane in placementPlanesRoot ) { thePlane.gameObject.renderer.enabled = true; } } } // Called whenever a structure choice is clicked ( the button in the build panel ) void SetBuildChoice ( GameObject btnObj ) { string btnName = btnObj.name; if ( btnName == "Btn_Farmer") { structureIndex = 0; } else if ( btnName == "Btn_Cow" ) { structureIndex = 1; } else if ( btnName == "Btn_Alien") { structureIndex = 2; } UpdateGUI (); } }
Unity answers is not a forum, please post a new question (not answer) and at least show us which errors you got. It's a lots of lines of code you got there.
Your answer

Follow this Question
Related Questions
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Instantiate script crashes unity 3 Answers
How to make spaces in between Gui boxes being made in for loops? 1 Answer
How to import the object from server to unity 2 Answers
Can someone help me fix my Javascript for Flickering Light? 6 Answers