Unity中的反射,委托(delegate),事件(event),Action,Func使用,给出具体使用脚本
时间: 2024-03-27 08:35:07 浏览: 76
好的,关于Unity中反射、委托、事件、Action和Func的使用,我可以给你一些简单的例子。但需要注意的是,反射虽然功能强大,但是使用不当会影响程序的性能,所以在实际开发中要谨慎使用。
反射:
反射可以动态地获取和调用对象的方法和属性,这在一些特定的场景下非常有用。以下是一个简单的使用反射获取对象属性值的脚本示例:
```
using System.Reflection;
using UnityEngine;
public class ReflectionExample : MonoBehaviour
{
public int myInt = 10;
private void Start()
{
PropertyInfo propertyInfo = typeof(ReflectionExample).GetProperty("myInt");
Debug.Log("myInt = " + propertyInfo.GetValue(this));
}
}
```
上面的代码中,我们使用了反射获取了myInt属性的值,并打印出来。
委托:
委托可以用来代表一个方法,并且可以传递给其他方法,这在许多场景下非常有用。以下是一个简单的使用委托调用方法的脚本示例:
```
using UnityEngine;
public class DelegateExample : MonoBehaviour
{
public delegate void MyDelegate(string message);
public MyDelegate myDelegate;
private void Start()
{
myDelegate = LogMessage;
myDelegate("Hello World");
}
private void LogMessage(string message)
{
Debug.Log(message);
}
}
```
上面的代码中,我们定义了一个委托类型MyDelegate,并且将LogMessage方法赋值给myDelegate变量。然后通过调用myDelegate来调用LogMessage方法,并将"Hello World"作为参数传递给LogMessage方法。
事件:
事件是一种特殊的委托类型,只能通过+=和-=来添加和移除方法,这样可以确保事件只能在特定的时刻被调用。以下是一个简单的使用事件的脚本示例:
```
using UnityEngine;
public class EventExample : MonoBehaviour
{
public delegate void MyDelegate();
public event MyDelegate myEvent;
private void Start()
{
myEvent += LogMessage;
myEvent();
}
private void LogMessage()
{
Debug.Log("Event Fired");
}
}
```
上面的代码中,我们定义了一个事件类型MyDelegate,并且将LogMessage方法添加到事件myEvent中。然后通过调用myEvent来调用LogMessage方法。
Action和Func:
Action和Func是两种预定义的委托类型,分别代表不带参数和带一个参数并且有返回值的方法。以下是一个简单的使用Action和Func的脚本示例:
```
using UnityEngine;
public class ActionFuncExample : MonoBehaviour
{
private void Start()
{
Action myAction = LogMessage;
myAction();
Func<int, int> myFunc = AddOne;
int result = myFunc(10);
Debug.Log("Result = " + result);
}
private void LogMessage()
{
Debug.Log("Action Called");
}
private int AddOne(int number)
{
return number + 1;
}
}
```
上面的代码中,我们定义了一个Action类型的委托myAction,并且将LogMessage方法赋值给myAction变量。然后通过调用myAction来调用LogMessage方法。同样,我们也定义了一个Func类型的委托myFunc,并且将AddOne方法赋值给myFunc变量。然后通过调用myFunc来调用AddOne方法,并将10作为参数传递给AddOne方法,并将返回值打印出来。
阅读全文