How would I make a variable equal a variable but only its past value?
Hey all, I'm currently trying to implement a basic inventory into my game though there is one problem I can't get past.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Slot : MonoBehaviour {
public GameObject invObj;
public string contains = "Nothing";
public Sprite thisSprite;
public Sprite NothingSprite;
public Sprite SwordSprite;
// Use this for initialization
void Start ()
{
invObj = GameObject.Find("InvObj");
GetComponent<Image>().sprite = thisSprite;
}
// Update is called once per frame
void Update ()
{
GetComponent<Image>().sprite = GetType().GetField(contains + "Sprite").GetValue(this) as Sprite;
if(invObj.GetComponent<Inventory>().transferring != "Nothing")
{
GetComponent<Button>().onClick.AddListener(() => PlacingOntoSlot());
}
else
{
GetComponent<Button>().onClick.AddListener(() => PickingFromSlot());
}
}
void PlacingOntoSlot()
{
contains = invObj.GetComponent<Inventory>().transferring;
invObj.GetComponent<Inventory>().transferring = "Nothing";
}
void PickingFromSlot()
{
invObj.GetComponent<Inventory>().transferring = contains;
contains = "Nothing";
}
}
This script goes onto each individual UI Button and then there is a inventory script that only contains the transferring string.
What should be happening is that when you press on a button that contains an item the transferring variable should equal the contains variable and then when you click onto another slot the transferring variable should equal Nothing and the contains should equal what transferring was originally. Though what appears to be happening is that for example in the PickingFromSlot() void transferring equals contains but then straight after contains equals Nothing so unity thinks that transferring should equal Nothing
Any ideas on how to fix this? Thanks.
Answer by Sqeemin · Apr 12, 2017 at 05:17 AM
If anyone wishes for a solution to this here is the code that I wrote that fixes the problem, not sure if there is a more practical way around this problem but this works for me
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Slot : MonoBehaviour {
public GameObject invObj;
public string contains = "Nothing";
public Sprite thisSprite;
public Sprite NothingSprite;
public Sprite SwordSprite;
// Use this for initialization
void Start ()
{
invObj = GameObject.Find("InvObj");
GetComponent<Image>().sprite = thisSprite;
}
// Update is called once per frame
void Update ()
{
GetComponent<Image>().sprite = GetType().GetField(contains + "Sprite").GetValue(this) as Sprite;
if(invObj.GetComponent<Inventory>().transferring != "Nothing")
{
GetComponent<Button>().onClick.AddListener(() => PlacingOntoSlot());
}
else
{
GetComponent<Button>().onClick.AddListener(() => PickingFromSlot());
}
}
void PlacingOntoSlot()
{
if (invObj.GetComponent<Inventory>().transferring != "Nothing")
{
contains = invObj.GetComponent<Inventory>().transferring;
}
if (contains == invObj.GetComponent<Inventory>().transferring)
{
contains = contains;
invObj.GetComponent<Inventory>().transferring = "Nothing";
}
}
void PickingFromSlot()
{
if (contains != "Nothing")
{
invObj.GetComponent<Inventory>().transferring = contains;
}
if (invObj.GetComponent<Inventory>().transferring == contains)
{
invObj.GetComponent<Inventory>().transferring = invObj.GetComponent<Inventory>().transferring;
contains = "Nothing";
}
}
}
Your answer
Follow this Question
Related Questions
Problem with the Inspector and Script 1 Answer
Calling variables from other script 0 Answers
Script error and no Variables showing 0 Answers
Calling variables from other script 1 Answer
Object reference not set to an instance of an object (C#) 2 Answers