为了更好理解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)