Action<UnityEngine.Object>的使用方法

来源:互联网 发布:stc单片机元件库 编辑:程序博客网 时间:2024/05/21 11:09
为了更好理解Action<UnityEngine.Object>,做如下的案例,鼠标点击屏幕一次,实例化出一个cube预设体

这里写图片描述


具体实现方法:


这里写图片描述


这里写图片描述


这里写图片描述


ResManger.cs这个脚本如下:

using System;using UnityEngine;using System.Collections;using System.Collections.Generic;public class ResManger : MonoBehaviour {    public static ResManger instance;    //之所以设计下面的字典,就是保证一个预设体全局只Load一次    public Dictionary<string, UnityEngine.Object> zong;    void Start () {        zong = new Dictionary<string, UnityEngine.Object>(); //加载的所有预设体    }    void Awake()    {        instance = this;    }    public void shiLiHua(string path, Action<UnityEngine.Object> mm)     {        UnityEngine.Object hh = null;        if (!zong.ContainsKey(path))        {            hh = Resources.Load(path);            zong.Add(path,hh);        }        else        {            hh = zong[path];        }        GameObject obj= Instantiate(hh) as GameObject;        mm(obj);    }}

xuhaitao.cs这个脚本如下:

using UnityEngine;using System.Collections;public class xuhaitao : MonoBehaviour {    public void  bianSe(object ff)    {        GameObject fg = ff as GameObject;        fg.GetComponent<Renderer>().material.color = Color.red;    }    void Update () {        if (Input.GetMouseButtonDown(0))        {            ResManger.instance.shiLiHua("Cube", bianSe);        }    }}

xuhaitao.cs还可以按照下面方式写,最后实现的效果都是一样的

using UnityEngine;using System.Collections;public class xuhaitao : MonoBehaviour {    void Update () {        if (Input.GetMouseButtonDown(0))        {            ResManger.instance.shiLiHua("Cube", (_objj) => {                GameObject fg = _objj as GameObject;                fg.GetComponent<Renderer>().material.color = Color.red;            });        }    }}


值得注意的是: Action的方式也是跨类传值得一种方式


跨类传值另外一种方式:http://blog.csdn.net/qq_15267341/article/details/72901776


FR:海涛高软(hunk Xu)