博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity、c#中的拓展方法讲解
阅读量:5035 次
发布时间:2019-06-12

本文共 3172 字,大约阅读时间需要 10 分钟。

很早以前看过这个东西,但是没有真正的用到过,希望之后会用到上面的方法,

大概的意思是这样的c#中尤其在用Unity的时候,已有的框架提供给我们一些固定的方法,但是有时我们想对这些方法进行修改,

这时我们就用到了拓展方法,也可以称为c#中的语法糖。

不过需要注意几点:

  • 类必须是static的,即静态类,但是不能继承MonoBehaviour类。
  • 静态类中的方法同样需要是static的。
  • 传入的参数需要有this修饰符修饰,如 public static void SetPositionX(this Transform trans){}
  • 如果写的拓展方法在一个命名空间中,在别的类用到的时候,需要引入命名空间,如 using Extends;

下面直接上代码,比较简单,明白意思即可。

1 using UnityEngine; 2 using System.Collections; 3 namespace Extends {                                      //注意命名空间 4     public static class extendTransform {                         //静态类 5         public static void SetPositionX(this Transform trans, float x) {       //静态方法,注意this的位置 6             trans.position = new Vector3(x, trans.position.y, trans.position.z); 7         } 8         public static bool HaveZero(this Transform trans) {               //可以有返回值 9             return (trans.position==new Vector3(0,0,0));10         }11     }12 }

以上为拓展方法的定义代码,接下来是运用。

1 using UnityEngine; 2 using System.Collections; 3 using Extends;                      //引入拓展方法命名空间 4 public class Test : MonoBehaviour { 5     public GameObject obj; 6     void Start () { 7         Debug.Log(obj.transform.position); 8         obj.transform.SetPositionX(10);        //直接调用方法 9     }10 }

接下来粘贴一些从网上获取到的样例,帮助大家理解。具体作者不详。

1 using UnityEngine;   2 using System.Collections;   3     4 public static class Extensions   5 {   6     public static void SetPositionX(this Transform t, float newX)   7     {   8         t.position = new Vector3(newX, t.position.y, t.position.z);   9     }  10     11     public static void SetPositionY(this Transform t, float newY)  12     {  13         t.position = new Vector3(t.position.x, newY, t.position.z);  14     }  15     16     public static void SetPositionZ(this Transform t, float newZ)  17     {  18         t.position = new Vector3(t.position.x, t.position.y, newZ);  19     }  20     21     public static float GetPositionX(this Transform t)  22     {  23         return t.position.x;  24     }  25     26     public static float GetPositionY(this Transform t)  27     {  28         return t.position.y;  29     }  30     31     public static float GetPositionZ(this Transform t)  32     {  33         return t.position.z;  34     }  35     36     public static bool HasRigidbody(this GameObject gobj)  37     {  38         return (gobj.rigidbody != null);  39     }  40     41     public static bool HasAnimation(this GameObject gobj)  42     {  43         return (gobj.animation != null);  44     }  45     46     public static void SetSpeed(this Animation anim, float newSpeed)  47     {  48         anim[anim.clip.name].speed = newSpeed;   49     }  50 }

使用:

1 using UnityEngine;   2 using System.Collections;   3      4 public class Player : MonoBehaviour    5 {   6     void Update ()    7     {   8         float currentX = transform.GetPositionX();   9         transform.SetPositionX(currentX + 5f);    10         if(gameObject.HasRigidbody())  11         {  12         }  13         if(gameObject.HasAnimation())  14         {  15             gameObject.animation.SetSpeed(2f);  16         }  17     }  18 }

 

以后会不定期更新一些小的知识点,希望与大家共同提高。

 

转载于:https://www.cnblogs.com/WhiteTaken/p/6258091.html

你可能感兴趣的文章
爬取:中国大学排名
查看>>
聊天室(C++客户端+Pyhton服务器)_1.框架搭设
查看>>
UpdatePanel 内控件 更新“外的”控件【转】
查看>>
mybatis中>=和<=的实现方式
查看>>
Python面向对象03/继承
查看>>
java序列化和反序列化
查看>>
绝对定位
查看>>
flink源码编译(windows环境)
查看>>
dpkg 删除 百度网盘 程序
查看>>
服务器nginx安装
查看>>
std::nothrow
查看>>
rest-framework 分页器
查看>>
JQuery(一)安装&选择器 样式篇
查看>>
浏览器的DNS缓存查看和清除
查看>>
浏览器跨域问题
查看>>
HTML5 input控件 placeholder属性
查看>>
使用JAVA如何对图片进行格式检查以及安全检查处理
查看>>
html5实现移动端下拉刷新(原理和代码)
查看>>
iPhone开发中从一个视图跳到另一个视图有三种方法:
查看>>
pytho logging
查看>>