1.canvas,screen模式和world模式区别:screen的绑定摄像机与canvas相对位置不会改变不可改变canvas,world模式下有个event camera相对位置可改变,canvas可改变,canvas就相当于一个3D物体。sorting,order layer规定canvas优先级。

2.富文本支持html标签。

3.控制image fill

public class imagetype : MonoBehaviour {
    public Image imagel;
    public float i = 0.0f;
}
void Update () {
        imagel.type = Image.Type.Filled;
        imagel.fillMethod = Image.FillMethod.Radial360;
        imagel.fillAmount = i;
        if (i >= 1.0f) { i = 0.0f; }
        i = i + 0.002f;
		
	}

4.控制按钮

public class button : MonoBehaviour {

    public Image image_sp;
    public Text text_sp;
    public Text text_btn;

    public void open_close(){
        if(text_btn.text == "打开图片"){
            image_sp.gameObject.SetActive(true);
            text_btn.text = "关闭图片";
            text_sp.text = "无敌是多么寂寞";
        }
        else {
            image_sp.gameObject.SetActive(false);
            text_btn.text = "打开图片";
            text_sp.text = "无敌?";
        }

5.控制按钮,内建图片数组

public class button1 : MonoBehaviour { 

    public Image image_sp;
    public Sprite[] image_sps;
    private string select_name;
    private int i;
    public void sp()
    {
        select_name = EventSystem.current.currentSelectedGameObject.name;
        if (select_name == "Button_left")
        {
            if (i <= 0) { i = image_sps.Length - 1; }
            image_sp.overrideSprite = image_sps[--i];
        }
        else
        {
            if (i >= image_sps.Length - 1) { i = 0; }
            image_sp.overrideSprite = image_sps[++i];
        }

6.锚点必须在他的父对象内设置,如果没有父对象或者父对象没有锚点那么他就没有锚点。

7.InputField。Navigation自动匹配发布导航信息。

public class input_js : MonoBehaviour {
    public Text text_jg;
    public InputField input1;
    public InputField input2;
    public InputField input_to;
    public GameObject panel_tc;

    public void js(){
        text_jg.text = (int.Parse(input1.text) - int.Parse(input2.text)).ToString();
    }
    public void tc()
    {
        panel_tc.SetActive(true);
    }
    public void yes()
    {
        text_jg.text = input_to.text;
        panel_tc.SetActive(false);
    }
    public void no()
    {
        
        panel_tc.SetActive(false);
    }

}

8.xml本地存储登录案例Application.OpenURL("http://wwww.4399.com");

  这里的涉及到未包含的库,需要引入一个dll文件,参考思考问题博客。登录窗口脚本,xml文件的创建。dll的引用。var隐式类型。

using System.IO;
using System.Xml;
public class dengl : MonoBehaviour
{
    public Image image_zc;
    public Text text_info;
    public Image image_ty_xxk;
    public Text text_ts;
    public InputField inputField_yhzh;
    public InputField inputField_yhmm;
    public InputField inputField_qrmm;
    public InputField inputField_yhdh;
    public InputField inputField_yhqq;
    public InputField inputField_zh;
    public InputField inputField_mm;
    private string _xmlpath;//yong hu wen jian,_xmlpath = Application.dataPath + "/user.xml";
    //获得date路径只能在主线程赋值,不能再moonbehaviour构造函数赋值如上
   /* public void text()
    {
        ty_xxk("用户名或密码不能为空");
    }*/
    void Start()
    {
        _xmlpath = Application.dataPath + "/user.xml";
        if (!File.Exists(_xmlpath))
        {
            XmlDocument xmlDoc = new XmlDocument();//xin jian xml shi li
            XmlElement root = xmlDoc.CreateElement("Root");//gen jie dian , zui shang ceng jie dian
            xmlDoc.AppendChild(root);//zhi jie dian
            XmlElement user = xmlDoc.CreateElement("User");//yong hu jie dian
            user.SetAttribute("user_name", "Admin");
            user.SetAttribute("user_pass", "123456");
            user.SetAttribute("user_tel", "18373290290");
            user.SetAttribute("user_qq", "1780585054");
            root.AppendChild(user);
            xmlDoc.Save(_xmlpath);
            Debug.Log("xml creat success");
        }
    }
    public void Quit()
    {
#if UNITY_EDITOR
        UnityEditor.EditorApplication.isPlaying = false;
#else
        Application.Quit();
#endif
    }
    public void open_zc()
    {
        image_zc.gameObject.SetActive(true);
    }
    public void close_zc()
    {
        image_zc.gameObject.SetActive(false);
    }
    public void ty_xxk(string str)
    {
        image_ty_xxk.gameObject.SetActive(true);
        text_info.text = str;
        text_ts.text = str;
    }
    public void ty_xxk_close(string str)
    {
        image_ty_xxk.gameObject.SetActive(false);

    }
    public void zc()
    {
        if(inputField_yhzh.text == ""|| inputField_yhmm.text == "" || inputField_qrmm.text == "" || inputField_yhdh.text == "" || inputField_yhqq.text == ""){
            ty_xxk("信息不完整!有空的项目!");
            return;
        }
        if (inputField_yhmm.text != inputField_qrmm.text)
        {
            ty_xxk("两次输入的密码不一致");
            return;
        }
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(_xmlpath);
        XmlNodeList nodeList = xmlDoc.SelectSingleNode("Root").ChildNodes;
        foreach (XmlElement xe in nodeList)
        {
            if (xe.GetAttribute("user_name") == inputField_yhzh.text)
                ty_xxk("该用户名已被占用!请更换用户名!");
            
        }
        //ty_xxk("恭喜该用户名可以使用");
        //qu de gen jie dian
        XmlNode root = xmlDoc.SelectSingleNode("Root");
        //chuang jian xin jie dian
        XmlElement user = xmlDoc.CreateElement("User");
        user.SetAttribute("user_name", inputField_yhzh.text);
        user.SetAttribute("user_pass", inputField_yhmm.text);
        user.SetAttribute("user_tel", inputField_yhdh.text);
        user.SetAttribute("user_qq", inputField_yhqq.text);
        //jiang xin jie dian jia ru gen jie dian
        root.AppendChild(user);
        //bao cun wen jian
        xmlDoc.Save(_xmlpath);
        ty_xxk("恭喜注册成功");
        inputField_yhzh.text = "";
        inputField_yhmm.text = "";
        inputField_qrmm.text = "";
        inputField_yhdh.text = "";
        inputField_yhqq.text = "";

    }
    public void denglu()
    {
        if (inputField_zh.text == "" || inputField_mm.text == "")
        {
            ty_xxk("用户名或者密码不能为空!");
            return;
        }
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(_xmlpath);
        XmlNodeList nodeList = xmlDoc.SelectSingleNode("Root").ChildNodes;
        foreach(XmlElement xe in nodeList)
        {
            if(xe.GetAttribute("user_name") == inputField_zh.text)
            {
                var mima = xe.GetAttribute("user_pass");
                if(inputField_mm.text == mima)
                {
                    ty_xxk("登录成功!");
                    Application.OpenURL("http://wwww.4399.com");
                    return;
                }else
                {
                    ty_xxk("登录失败!密码错误!");
                    return;
                }
            }
        }
        ty_xxk("此用户账号还没有注册!请注册!");
    }

9.Toggle。    GameObject.Find 是不是不能找到一个物体的子物体?bg1,2,3,4是bg的子物体。

public class qh_bj : MonoBehaviour {

    private GameObject root;
    private GameObject oldobj = null;
    private GameObject newobj = null;
	// Use this for initialization
	void Start () {
        root = GameObject.Find("bg");
        oldobj = root.transform.Find("bg1").gameObject;
        Debug.Log(oldobj.name);
	}
    public void print_name()
    {
        string s = EventSystem.current.currentSelectedGameObject.name;
        //Debug.log(str);
        switch (s)
        {
            case "Toggle1":
                newobj = root.transform.Find("bg1").gameObject;
                newobj.SetActive(true);
                oldobj.SetActive(false);
                oldobj = newobj;
                oldobj.SetActive(true);
                break;
            case "Toggle2":
                newobj = root.transform.Find("bg2").gameObject;
                newobj.SetActive(true);
                oldobj.SetActive(false);
                oldobj = newobj;
                oldobj.SetActive(true);
                break;
            case "Toggle3":
                newobj = root.transform.Find("bg3").gameObject;
                newobj.SetActive(true);
                oldobj.SetActive(false);
                oldobj = newobj;
                oldobj.SetActive(true);
                break;
            case "Toggle4":
                newobj = root.transform.Find("bg4").gameObject;
                newobj.SetActive(true);
                oldobj.SetActive(false);
                oldobj = newobj;
                oldobj.SetActive(true);
                break;
        }
    }

10.Toggle2   Find子物体

public class qh_wz : MonoBehaviour {
    public Text text1;
    public  void t_event2(bool xz)
    {
        string tt = transform.FindChild("Label").GetComponent<Text>().text;
        bool bl = GetComponent<Toggle>().isOn;
        if (bl)
        {
            text1.text = text1.text + tt + "真" + "\n";
        }else
        {
            text1.text = text1.text + tt + "假" + "\n";
        }
    }

FindChild改成Find也是可以的。

11.slider模拟血条

public class xuetiao : MonoBehaviour {
    public Text text1;
    public Slider slider2;
	public void dis_slider_value()
    {
        text1.text = slider2.value.ToString();
    }
    public void zx()
    {
        slider2.value = slider2.value + 60;
    }
    public void jx()
    {
        slider2.value = slider2.value - 60;
    }

12.slider,建立materia彩纸detail动态纹理 ,纹理偏移,   Time.time是从程序开始执行到现在的时间,,,,deltaTime=0.0166,要加Position As SUV1组件

public class mov : MonoBehaviour {
    public Light l1;
    Material mOriginal;
    Image mSprite;
    public Vector2 scrollPerSecond = Vector2.zero;
    public AudioSource myAudio;
    public Text text_ln;
    public Text text_vn;
	// Use this for initialization
	void Start () {
        mSprite = GetComponent<Image>();
        mOriginal = mSprite.material;
	}
		// Update is called once per frame
	void Update () {
		if (mOriginal != null){
            Texture tex = mOriginal.GetTexture("_DetailTex");
            if (tex != null)
            {
                mOriginal.SetTextureOffset("_DetailTex", scrollPerSecond * Time.time);
            }
        } 
	}
    public void light1(float v)
    {
        l1.intensity = v;
        text_ln.text = v.ToString();
    }
    public void vol(float v)
    {
        myAudio.volume = v;
        text_vn.text = v.ToString();
    }

 13.scrollbar。编写一个带浮点型参数的函数,scrollar传递过去

GetComponent.<RectTransform>().localPosition = new Vector3(1f,1f,1f);

GetComponent.<RectTransform>().localScale = new Vector3(1f,1f,1f);

14.Layout。child Force Expand与Flexible功能一样,文字和image自带适宜尺寸,raw image没有适宜尺寸。

15.模拟下拉组合框,迭代访问子物体

public class list : MonoBehaviour {
    public GameObject list_close;
    public InputField field1;
    public Text text_dis;
	// Use this for initialization
	void Start () {
		
	}
	public void combox()
    {
        for(int i = 0; i < this.transform.childCount; i++)
        {
            field1.text = this.transform.GetChild(i).GetComponent<Text>().text;
            text_dis.text = "你选择的是" + field1.text;
        }
    }
    public void combox_close()
    {
        list_close.SetActive(false);
        GameObject.Find("Toggle").GetComponent<Toggle>().isOn = false;
    }
}

 16.事件类!!!!!!!!!!!!!!!!!!!!!!!!!!接口

public class scroll : MonoBehaviour,IMoveHandler,IScrollHandler{
    //默认是事件 是Image 如果鼠标点击了别处 那么事件就变了 就不能控制Image了
    public Text text1;
    public Camera maincamera;
    private static float f1;

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}
    public void OnMove(AxisEventData eventData)
    {
        text1.text = eventData.moveDir.ToString();
    }
    public void OnScroll(PointerEventData eventData)
    {
        f1 = f1 + eventData.scrollDelta.y * 3f;
        maincamera.fieldOfView = Mathf.Clamp(f1, 1f, 179f);
        text1.text = eventData.scrollDelta.ToString();
    }
}

  

public class select : MonoBehaviour,ISelectHandler,ICancelHandler,IPointerDownHandler,IUpdateSelectedHandler,IDeselectHandler,ISubmitHandler{
    //物体身上必须有脚本才能 实现事件功能
    public Text text1;
    private int i = 0;
	public void OnSelect(BaseEventData eventData)
    {
        //text1.text = "我被选择了" + eventData.selectedObject;
    }
    public void OnCancel(BaseEventData eventData)//按esc取消事件
    {
        text1.text = "我被取消了选择" + eventData.selectedObject;
    }
    public void OnPointerDown(PointerEventData eventData)
    {
        text1.text = eventData.position.ToString();//position属性可通过查看PointerEventData/Variables改为其他属性
    }
    public void OnUpdateSelected(BaseEventData eventData)
    {
        ++i;
        //text1.text = "我被选择了" + eventData.selectedObject + "OnUpdateSelected" + i;
    }
    public void OnDeselect(BaseEventData eventData)
    {
        text1.text = "我被取消了选择" + eventData.selectedObject + "OnDeselect";
    }
    public void OnSubmit(BaseEventData eventData)
    {
        text1.text = "我被提交了" + eventData.selectedObject + "Onsubmit";
    }

 Canvas Group组

CanvasGroup group = m_DraggingIcon.AddComponent<CanvasGroup>();
        group.blocksRaycasts = false;

 复制拖动装备案例

public class drag_zb : MonoBehaviour,IBeginDragHandler,IDragHandler,IEndDragHandler{
    public Canvas cavs;
    private GameObject m_DraggingIcon;
    private RectTransform m_DraggingPlane;
	// Use this for initialization
	void Start () {
        m_DraggingPlane = cavs.transform as RectTransform;
	}
	
	// Update is called once per frame
	void Update () {
		
	}
    public void OnBeginDrag(PointerEventData eventData)
    {
        Debug.Log("OnBeginDrag:拖动开始事件:" + eventData.position);
        m_DraggingIcon = new GameObject("icon");
        m_DraggingIcon.transform.SetParent(cavs.transform, false);
        m_DraggingIcon.transform.SetAsLastSibling();
        var image = m_DraggingIcon.AddComponent<Image>();
        CanvasGroup group = m_DraggingIcon.AddComponent<CanvasGroup>();
        group.blocksRaycasts = false;
        image.sprite = GetComponent<Image>().sprite;
        image.SetNativeSize();
        if(m_DraggingIcon != null)
        {
            var rt = m_DraggingIcon.GetComponent<RectTransform>();
            Vector3 globalMousePos;
            if (RectTransformUtility.ScreenPointToWorldPointInRectangle(m_DraggingPlane, eventData.position, eventData.pressEventCamera, out globalMousePos)){
                rt.position = globalMousePos;
                rt.rotation = m_DraggingPlane.rotation;
            }
        }
    }
    public void OnDrag(PointerEventData eventData)
    {
        Debug.Log("OnDrag:拖动中事件" + eventData.position);
        if (m_DraggingIcon != null)
        {
            var rt = m_DraggingIcon.GetComponent<RectTransform>();
            Vector3 globalMousePos;
            if(RectTransformUtility.ScreenPointToWorldPointInRectangle(m_DraggingPlane,eventData.position,eventData.pressEventCamera,out globalMousePos))
            {
                rt.position = globalMousePos;
                rt.rotation = m_DraggingPlane.rotation;
            }
        }
    }
    public void OnEndDrag (PointerEventData eventData)
    {
        Debug.Log("OnEndDrag:拖动结束事件" + eventData.position);
        if (m_DraggingIcon != null)
        {
            Destroy(m_DraggingIcon);
        }
    }

 粘贴复制的装备

public class drop_zb : MonoBehaviour,IDropHandler,IPointerEnterHandler,IPointerExitHandler{
    public void OnDrop(PointerEventData data)
    {
        var originalObj = data.pointerDrag;
        if (originalObj == null)
            return;
        var srcImage = originalObj.GetComponent<Image>();
        if (srcImage == null)
            return;
        GetComponent<Image>().sprite = data.pointerDrag.GetComponent<Image>().sprite;
    }
    public void OnPointerEnter(PointerEventData eventData)
    {
        var originalObj = eventData.pointerDrag;
        if (originalObj != null) { 
        
            GetComponent<Image>().color = Color.yellow;
        }
    }
    public void OnPointerExit(PointerEventData eventData)
    {
        var originalObj = eventData.pointerDrag;
        if (originalObj == null)
        {
            return;
        }
        GetComponent<Image>().color = Color.white;
    }



}

选择事件提交事件

public class select : MonoBehaviour,ISelectHandler,ICancelHandler,IPointerDownHandler,IUpdateSelectedHandler,IDeselectHandler,ISubmitHandler{
    //物体身上必须有脚本才能 实现事件功能
    public Text text1;
    private int i = 0;
	public void OnSelect(BaseEventData eventData)
    {
        //text1.text = "我被选择了" + eventData.selectedObject;
    }
    public void OnCancel(BaseEventData eventData)//按esc取消事件
    {
        text1.text = "我被取消了选择" + eventData.selectedObject;
    }
    public void OnPointerDown(PointerEventData eventData)
    {
        text1.text = eventData.position.ToString();//position属性可通过查看PointerEventData/Variables改为其他属性
    }
    public void OnUpdateSelected(BaseEventData eventData)
    {
        ++i;
        //text1.text = "我被选择了" + eventData.selectedObject + "OnUpdateSelected" + i;
    }
    public void OnDeselect(BaseEventData eventData)
    {
        text1.text = "我被取消了选择" + eventData.selectedObject + "OnDeselect";
    }
    public void OnSubmit(BaseEventData eventData)
    {
        text1.text = "我被提交了" + eventData.selectedObject + "Onsubmit";
    }
}

代码生成按钮物体并添加监听器

public class dtai_event : MonoBehaviour {

    public Canvas cavs;
    public Text text1;
    public Font f1;
    public int counter;
	// Use this for initialization
	void Start () {
        counter = 0;
	}
	
	// Update is called once per frame
	void Update () {
        //Instantiate(pre, m_transform.position, m_transform.rotation);
		
	}
    public void create_btn()
    {
        if (counter > 4)
            return;
        ++counter;
        var m_DraggingIcon = new GameObject("btn_" + counter);
        m_DraggingIcon.transform.SetParent(cavs.transform, false);
        m_DraggingIcon.transform.localPosition = gameObject.transform.localPosition + new Vector3(0, 60 * counter, 0);
        m_DraggingIcon.AddComponent<Image>();
        m_DraggingIcon.transform.localScale = new Vector3(0.8f, 0.3f, 1f);
        m_DraggingIcon.transform.SetAsLastSibling();

        var btn = m_DraggingIcon.AddComponent<Button>();

        var tt = new GameObject("text_" + counter);
        var text2 = tt.AddComponent<Text>();
        text2.text = "按钮" + counter;
        text2.color = Color.blue;
        text2.resizeTextForBestFit = true;
        text2.font = f1;
        // text2.fontStyle = FontStyle.Bold;
        text2.alignment = TextAnchor.MiddleLeft;
        tt.transform.SetParent(m_DraggingIcon.transform, false);
        tt.transform.SetAsLastSibling();

        btn.onClick.AddListener(delegate ()
        {
            this.btn1click(m_DraggingIcon);
        });// 匿名方法 添加 监听函数
        
    }
    public void btn1click(GameObject e)
    {
        text1.text = "你点击了" + e.name;
    }

 delegate定义委托 订阅事件 类里定义一个类!!!!!!!!!!!!!!!!!public class类public viod函数

public class wtuo_dyue : MonoBehaviour {
    public Text text1;
    private int counter;
    private string disstr = "111111111111111111111111111";
    private bool toggle1;
    private int tt;
	// Use this for initialization
	void Start () {
        counter = 0;
        toggle1 = false;
        tt = 100;
		
	}
	
	// Update is called once per frame
	void Update () {
        if (toggle1)
        {
            tt -= 5;
            if (tt < 0)
            {
                timer_elapsed();
                tt = 100;
            }
        }
	}
    public void start_out()
    {
        toggle1 = false;
    }
    //1 定义一个委托
    public delegate void timearriveEventHandler(string str);
    //时间到达类
    public class Timer_arrived
    {
        //2 用委托定义事件 关键字event
        public static event timearriveEventHandler timearrived;
        public static void Start_time()
        {
            //触发事件
            timearrived("oookkkk");
        }
    }
    public void timer_elapsed()
    {
        if (counter < 1)
            //3 订阅事件
            Timer_arrived.timearrived += new timearriveEventHandler(WriteText);
        Timer_arrived.Start_time();
                
     
    }
    //4 编写事件处理方法
    public void WriteText(string s)
    {
        text1.text += disstr[counter++ % disstr.Length];
    }

 定义要发布的新闻

public class dingy_weit : MonoBehaviour {
    public InputField InputField_title;
    public InputField InputField_content;
    //定义要发布的新闻类 参数
    public class news_args
    {
        public string news_title = "news_title";
        public string news_content = "news_content";
    }
    // 定义委托用于定义事件
    public delegate void news_handler(object sender, news_args e);
    //定义事件
    public event news_handler News_build;
    //定义触发事件的方法
    public void build_news()
    {
        //生成触发事件参数
        news_args news = new news_args();
        news.news_title = InputField_title.text;
        news.news_content = InputField_content.text;
        if (News_build != null) ;//一定要检测  检测有人订阅
        News_build(this, news);   //this 当前脚本所在对象
    }
}

  接收或者取消订阅新闻

public class dingyue_wt : MonoBehaviour {
    public GameObject s_news_center;
    // Use this for initialization
    public InputField InputField_title;
    public InputField InputField_content;
	public void listener_news_start()
    {
        s_news_center.GetComponent<dingy_weit>().News_build += Listener;
    }
    public void listener_news_stop()
    {
        s_news_center.GetComponent<dingy_weit>().News_build -= Listener;
    }
    public void Listener(object sender,dingy_weit.news_args e)
    {
        InputField_title.text = e.news_title;
        InputField_content.text = e.news_content;
    }
    public void Start()
    {
        s_news_center.GetComponent<dingy_weit>().News_build += Listener;
    }

 17.UGUI界面案例,给载有动画组件的的物体添加脚本,可以给动画针添加事件脚本

using UnityEngine.SceneManagement;

public class Game_manager : MonoBehaviour {
    public Animator ani_text1;
    public Animator ani_window;
    public Animator ani_set;
    public Animator ani_vudio;
    void Awake()
    {
        ani_vudio = GameObject.Find("main_seting_audio").GetComponent<Animator>();
    }
    void Start()
    {
        ani_vudio.gameObject.SetActive(false);
    }
    public void text_in()
    {
        ani_text1.gameObject.SetActive(true);
        ani_text1.SetBool("sp_in", true);
        ani_window.SetBool("window_in", false);
        StartCoroutine(WaitTime(10.0f));
        //ani_window.gameObject.transform.parent.gameObject.SetActive(false)
    }
	public void main_window_in()
    {
        ani_window.SetBool("window_in", true);
    }
    IEnumerator WaitTime(float waittime)
    {
        yield return new WaitForSeconds(waittime);
        this.main_window_in();
        ani_text1.SetBool("sp_in", false);
        ani_text1.gameObject.SetActive(false);
        //在第一段动画没播完前改变Bool值,无法实现动画转换
    }
    public void Quit()
    {
    #if UNITY_EDITOR//预处理 写错 检测不出来       
        UnityEditor.EditorApplication.isPlaying = false;
    #else
        Application.Quit();
    #endif
    }
    public void start_game()
    {
        //Application.LoadLevel("denglu");
        SceneManager.LoadScene("denglu");
    }
    public void Set_in()
    {
        ani_window.SetBool("window_in", false);
        ani_set.SetBool("set_in", true);
    }
    public void window_back()
    {
        ani_window.SetBool("window_in", true);
        ani_set.SetBool("set_in", false);
    }
    public void vudio_in()
    {
        ani_vudio.gameObject.SetActive(true);
        ani_vudio.SetBool("vudio_in", true);
        
    }
    public void vudio_out()
    {
        ani_vudio.SetBool("vudio_in", false);
    }