实际效果:
此时有两个菜品,你可以修改他们的菜名,修改按钮和菜名是一体的。
点击修改按钮是这样:
原本输入框是没有任何东西的,我们可以让他存在菜名,方便我们进行小修改。
主要思路:
因为这个是小项目,所以变量需求很少,我就命名得很随意,都是一些abc,你们可以命名更规则的变量名字,不要学我0.0
后面就为修改按钮编写了一个脚本:
GameObject a;//原本的菜名
public GameObject b;
GameObject a1;
InputField inputField;
public void xiugai()//赋值要修改的物体并打开修改面板
{
a = transform.GetChild(0).gameObject;
b.SetActive(true);
//复制原有文本到输入框
a1 = b.transform.GetChild(0).gameObject;//找到Inputfield;
inputField = a1.GetComponent<InputField>();
inputField.text = a.GetComponent<Text>().text;//菜名传到输入框
}
修改面板一般是这个层级:输入框,取消,确定,就三个功能。
该脚本主要功能是,点击修改按钮,首先先将获取文本
a = transform.GetChild(0).gameObject;
这句的意思是,将从该脚本挂载的物体的第一个子物体赋值给a
这个a就是这个(脚本放在button):
然后把该修改面板打开,
也就是b.SetActive(true);让xiugaimianban激活
a1 = b.transform.GetChild(0).gameObject;//找到Inputfield;
这句的意思是从b(也就是xiugaimianban)的位置开始获取它的第一个子物体,就是Input了。
本来默认是inputfield的,我改成input了
获取该子物体后,input的组件有很多,我们要的只有这个inputfield。
然后为inputfield赋值,inputField = a1.GetComponent<InputField>();
这时候,使用inputfield.text=“你想要的字符串”,直接写就可以了
因为我们已经获取了wenben物体,所以可以直接获取它的组件text进行赋值
也就是:inputField.text = a.GetComponent<Text>().text;//菜名传到输入框
这样就简单完成了一个方便的小功能。
如果还想完成修改功能,要做的就多了
给你们讲一下主要思路,或许有些人想知道
1.建立一个单例模式的类,在xiugai函数里面就保存wenben物体
2.在xiugaimianban输入要改的菜名时,确定按钮的函数功能与xiugai函数写在一起
3.提取单例模式存储的物体,与xiugai函数反过来赋值即可,大概例子是这样:
public void SetText()
{
//这个是获取信息
a1 = transform.parent.GetChild(0).gameObject;//获取该脚本物体的父物体,然后该父物体的第一个子物体
xinxi = Xinxizhongzhuanzhan.Instance();
inputField = a1.GetComponent<InputField>();//赋值InputField组件
xinxi.a.GetComponent<Text>().text = inputField.text;
b = transform.parent.gameObject;//回到修改面板
b.SetActive(false);
}
上面代码放在yesbtn,xinxi就是那个存储数据的类,是一个单例模式,必须单例模式,不然数据是传不到的
以上代码仅供参考0.0
加油!
单例模式例子:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.TextCore.Text;
using UnityEngine.UI;
public class Xinxizhongzhuanzhan
{
private static Xinxizhongzhuanzhan _instance = null;
public GameObject a;
private Xinxizhongzhuanzhan()
{
}
public static Xinxizhongzhuanzhan Instance()
{
if (_instance == null)
{
_instance = new Xinxizhongzhuanzhan();
}
return _instance;
}
public void Seta(GameObject a)
{
this.a = a;
}
}