- Home /
Problem with scripts ignoring my variables/functions?
Hello! I know my title is a little misleading but I can't think of anything else :(
I have two major problems that I have no idea how to fix.
So my first problem is that I have a component that allows me to select an object. When this object is selected, it can do nothing else, except in this case, when my bool is true, it decides to ignore it?
Here is my code from the first script:
if (!selectionMade) {
if(Input.GetMouseButtonDown(0)) {
if (Physics.Raycast (ray, out hit, Mathf.Infinity)) {
if(hit.transform.gameObject.tag == "Building") {
pl = hit.transform.gameObject;
selectObj = pl.GetComponent<SelectionScript>();
selectObj.selected = true;
}
/*else {
if(pl != null) {
selectObj = pl.GetComponent<SelectionScript>();
selectObj.selected = false;
pl = null;
}
}*/
}
}
}
else {
Debug.LogError("Cannot select!");
}
And here's what I have in the script attached to my object:
gameController gC;
SelectionScript selectObj;
void Update() {
if (selectObj.selected) {
isMenu = true;
gC.selectionMade = true;
}
else {
isMenu = false;
gC.selectionMade = false;
}
}
When I test the game, if I place down Object A, then I place Object B, when I select Object A, I can still select Object B. But if I select Object B, I cannot select Object A. I don't know why this is the case, but the same still holds true if I place Object B first; if I select Object B, I can select Object A (because I placed it down second), but I can't select Object B when Object A is selected (which is how I want it for everything).
My second problem is that when I'm placing down an object, it checks for colliders, but my script doesn't work. My first script (again), gameController:
public void SetItem(GameObject b) {
isSelected = true;
hasPlaced = false;
currentBuilding = ((GameObject)Instantiate(b));
currentBuilding.name = b.name;
expenseObj = currentBuilding.gameObject.GetComponent<Expenses>();
currentBuilding.gameObject.layer = 2;
checker = currentBuilding.GetComponent<obj_Check>();
}
void Update() {
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
dayTotal = revenue - expenses;
LimCheck();
if (isSelected) {
if (!selectionMade) {
if (currentBuilding != null && !hasPlaced) {
obj_Check scriptDisable = currentBuilding.GetComponent<obj_Check>();
if(Physics.Raycast(ray, out hit, Mathf.Infinity)) {
currentBuilding.transform.position = new Vector3(hit.point.x, 0, hit.point.z);
if(Input.GetMouseButtonDown(0)) {
if (IsLegalPosition()) {
currentBuilding.gameObject.layer = 0;
hasPlaced = true;
currentCash -= expenseObj.buildCost;
isSelected = false;
}
else {
Debug.LogError ("Cannot place here!");
}
}
if (Input.GetKeyDown (KeyCode.Escape)) {
Destroy (currentBuilding);
isSelected = false;
}
}
}
}
else {
Debug.LogError ("Cannot select other!");
}
}
}
And my second script, obj_check:
public class obj_Check : MonoBehaviour {
SelectionScript selectObj;
gameController gC;
Expenses expenses;
public Material selectGlow;
public Material dfm;
public List<Collider> colliders = new List<Collider>();
RaycastHit hit = new RaycastHit();
Ray ray = new Ray();
// Use this for initialization
void Start () {
selectObj = gameObject.GetComponent<SelectionScript>();
expenses = gameObject.GetComponent<Expenses>();
gC = Camera.main.GetComponent<gameController>();
gC.expenses += expenses.expenseCost;
gC.revenue += expenses.revenue;
}
// Update is called once per frame
void Update () {
if (selectObj.selected) {
renderer.material = selectGlow;
}
else {
renderer.material = dfm;
}
}
void OnDestroy() {
gC.expenses -= expenses.expenseCost;
gC.revenue -= expenses.revenue;
}
void OnTriggerEnter(Collider c) {
if (c.tag == "Building") {
colliders.Add (c);
Debug.Log (colliders.Count);
}
}
void OnTriggerExit (Collider c) {
if (c.tag == "Building") {
colliders.Remove (c);
}
}
}
When I try to place an object inside of another object, I can do it, which is not what is supposed to happen. I know this is a lot of stuff, but I really need help. (sorry for the bulk of bugs I have :( sorry )
I don't understand how it can't Debug.Log the variable. That's not showing up on my console either.
Your answer
Follow this Question
Related Questions
I'm having problems with bools resetting within a function 0 Answers
Trigger and raycast error? 2 Answers
Finding a certain variable is failing 0 Answers
bug? with raycasts and booleans 1 Answer