16NGUI之商店(shop)购物系统
2017-02-13 本文已影响43人
_谭小坤
制作商品的UI显示###
效果展示一、商品铺的搭建##
商品铺的搭建二、点击一个具体的商品,显示具体信息的搭建##
并且设置为不可见,但满足我的逻辑条件的时候才可显示出来
显示框的搭建
三、商品铺满Shop里面##
通过加载预制物的方法,制作预制物.
预制物的制作
加载脚本的显示:
public class ShopTest : MonoBehaviour {
public GameObject two;//获取预制物
public GameObject[] cells;//获取格子
//public string[] equpimentsName;
void Start () {
int num = 0;
for (int i = 0; i < cells.Length; i++)
{
num++;
GameObject clone = Instantiate(two, Vector3.zero, Quaternion.identity) as GameObject;//加载预支物
clone.transform.parent = cells[i].transform;
clone.transform.localPosition = Vector3.zero;
clone.transform.localScale = new Vector3(1, 1, 1);
clone.transform.GetComponent<UISprite>().spriteName =num.ToString();
//这是通过改变预制物的名字,让系统自动去找到我们所要在商店展示的物品信息
clone.transform.GetComponent<UISprite>().height = 40;
clone.transform.GetComponent<UISprite>().width = 40;
}
}
void Update () {
}
}
四、给商品添加配置文件,不同的商品不同信息##
给每个商店里面的物品一个自己的信息脚本展示:获取text文件信息
public class EveryThing : MonoBehaviour {
public string price;//价格
public string thingName;//商品名字
public string shouMing;//效果作用
public string spriteNum;//在NGUI里面的物品名字
GameObject buy;
void Start () {
buy = GameObject.FindGameObjectWithTag("Buybtn");//找到Buybtn这个按钮物体
spriteNum = this.GetComponent<UISprite>().spriteName;
TextAsset thingtext = (TextAsset)Resources.Load("ui");//文本文件的加载
string str = thingtext.text;
string[] thingname= str.Split(',');//分离不同物品的不同信息
// print("123");
for (int i = 0; i < thingname.Length; i++)
{
//print(thingname[i]);
//print(spriteNum);
if (thingname[i]==spriteNum)
{
price = thingname[i+1];
thingName = thingname[i+2];
shouMing = thingname[i+3];
print(price + " " + thingName + " " + shouMing);
break;
}
}
}
// Update is called once per frame
void Update () {
}
public void ClickTwo()
{
buy.GetComponent<Buybtn>().two = this.gameObject;
}
}
五、各种点击事件方法,逻辑##
各种点击事件的先对应,逻辑。tag的合理使用,如何在不同的脚本获取其他脚本的方法..
脚本展示
public class Buybtn : MonoBehaviour {
//挂载在Buybtn的脚本
//各种点击事件的方法
public GameObject sureBuyWindow;
UIButton btn;
public GameObject two;//通过tag值获取
int num = 1;
void Start () {
btn = GetComponent<UIButton>();
}
void Update () {
}
public void BuyWindow()
{
//只有选中格子里面的物品,才可以进行点击购买显示框的弹出
if (two!=null) {
if (sureBuyWindow.activeSelf == false)
{
sureBuyWindow.SetActive(true);
}
else
{
//btn.enabled = true;
sureBuyWindow.SetActive(false);
}
btn.enabled = false;
GameObject.FindGameObjectWithTag("money").GetComponent<UILabel>().text = two.GetComponent<EveryThing>().price;
}
}
public void AgainClick()//从新选物品点击展示效果
{
if (two != null)
{
num = 1;
GameObject.FindGameObjectWithTag("number").GetComponent<UILabel>().text = num.ToString();
GameObject.FindGameObjectWithTag("money").GetComponent<UILabel>().text = (num * int.Parse(two.GetComponent<EveryThing>().price)).ToString();
}
else
{
sureBuyWindow.SetActive(false);
}
//btn.enabled = false;
}
public void OnSubmitLabel()//在输入文本框里面进行数据的输入提交
{
//GameObject.FindGameObjectWithTag("number").GetComponent<UILabel>().text = num.ToString();
GameObject.FindGameObjectWithTag("money").GetComponent<UILabel>().text = (int.Parse(GameObject.FindGameObjectWithTag("number").GetComponent<UILabel>().text) * int.Parse(two.GetComponent<EveryThing>().price)).ToString();
num = int.Parse(GameObject.FindGameObjectWithTag("number").GetComponent<UILabel>().text);
}
public void AddGameObject()//点击添加按钮的事件,把相应的数据改变
{
num = int.Parse(GameObject.FindGameObjectWithTag("number").GetComponent<UILabel>().text);
//num=PlayerPrefs.GetInt("+",0);
num++;
// PlayerPrefs.SetInt("+", num);
//GameObject.FindGameObjectWithTag("number").GetComponent<UILabel>().text = PlayerPrefs.GetInt("+").ToString();
GameObject.FindGameObjectWithTag("number").GetComponent<UILabel>().text = num.ToString();
// GameObject.FindGameObjectWithTag("money").GetComponent<UILabel>().text = (PlayerPrefs.GetInt("+") * int.Parse(two.GetComponent<EveryThing>().price)).ToString();
GameObject.FindGameObjectWithTag("money").GetComponent<UILabel>().text = (num * int.Parse(two.GetComponent<EveryThing>().price)).ToString();
}
}
六、重难点的理解##
1.预制物名字的改变系统之自动帮我们寻找改变后的物体.
2.理清各种逻辑,符合我们的需求.
3.在不同的脚本之间各种变量的获取.
4.在UI制作过程中,不同物体Widgt的Depth(深度)不同,显示不同。数值越小,在底层。