Unity扩展方法(以扩展transform类的方法为例子)

        在使用Unity过程中,是否很多同学都有过这样的想法:如果这个方法是这个变量(类)自带的就好了,那样就不用额外去写函数,哪个脚本上都可以使用了。是不是偶尔会觉得一个类的自带的函数方法有限,无法满足游戏开发的一些需求呢,那么,就由我们来扩展Unity自带的类的方法吧。

        首先,我们要创建一个脚本,这个脚本不需要继承自任何脚本,并且需要时static静态类,因为我们要去对unity原有的一些类进行扩展,但我们无法去访问这些类的源代码,所以我们将扩展方法设置为静态类就方便我们全局调用。

        建议将脚本名字设定为 ExtensionMethod(只是行业内约定俗成?)也是方便知道该脚本的用途。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public static class ExtensionMethod 
{

}

        下面,我将以扩展transform类为例子介绍用法。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public static class ExtensionMethod 
{
    private const float dotThreshold = 0.5f;

    public static bool IsFacingTarget(this Transform transform,Transform target)
    {
        var vectorToTarget = target.position-transform.position;
        vectorToTarget.Normalize();

        float dot = Vector3.Dot(transform.forward, vectorToTarget);

        return dot >= dotThreshold ? true : false;
    }
}

        扩展的方法实现的内容是,判断target物体是否在视野范围的120°之中。(里面的详细每个函数的方法以及一些数学原理在此就不做过多介绍,因为不是本篇文章的重点)

        要注意扩展方法也需要是静态方法,这样方便快速的全局调用,并且前一个变量代表的是你要扩展的是哪个类的方法(写法固定,this T Tname:T类型的名称,Tname你定义的名字,最好是T的小写类型),后一个变量是执行这个扩展方法是需要传入的变量。 

        写完保存脚本后,就可以在项目的任意脚本中调用这个扩展函数方法了。

        扩展方法很方便于我们的日常开发,为我们提供很多便利,自定义扩展方法来进行全局调用可以省下很多时间。 

猜你喜欢

转载自blog.csdn.net/hfh1999/article/details/130086532