UNITY transform类的使用

我们来详谈Unity的transform使用,这里所说的tansform不是类UnityEngine命名空间下的Transform,而是transform.

Transform 是Unity中最常用的类了。

其类的代码如下,代码贴出来太长也不是要说的重点:



我们所说的是常用的还有对象组件自身的transform,他里面包含了位置,旋转,缩放参数。

在常用组件Compnent的代码中:


注意这个东西是属性,有get,没有set.

当然命名空间仍旧为UnityEngine。

二、transform用法及其原因

我们先来看看,这个WrapperlessIcall ,它是unity中一个属性字段,他有什么用呢?

WrapperlessIcall 内部实现,非公开方法。

大家来看看如下代码:


看起来稀松平常,波澜不惊,但是下面水还是蛮深的。

使用myTransform替代this.transform。如果你不知道u3d内部实现获取方式你肯定会以为这人脑抽水了,有直接的不用,还自己保存起来。

this.transform并不是变量,而是一个get/set属性(property)

他是一个C++写的代码,在Mono中被调用。调用是intenal method的调用,其效率本身不是高。

比如,transform 经常需要保存在本地,然后在使用。

n

值得注意的是这个调用方法略慢,因为你需要调用外部的CIL(aka interop),花费了额外的性能。

三、新的版本会不会做了优化呢?

个人觉得这个是之前的unity版本的东西,可能效率和性能没有做优化

WrapperlessIcall][MethodImpl(MethodImplOptions.InternalCall)]

1

2

就这些属性来说,有的是直接调用C++代码,有的则是调用.net的内部函数到Unity中。

对于新的版本是不是有的优化处理呢,自己做了测试:

先看看现在Compnent的代码:


效率有手动cache (4ms)>>transform(20ms)>>this.tranform(22ms)>> GetComponent()(54ms)

但是原来的测试结果为:

1000000 次的Iterations

GetComponent=619ms

Monobehaviour = 60ms

CachedMB = 8ms

Manual Cache = 3ms


看来这其中还是有奥秘的。

我电脑配置目前还算可以,win7 64 位,I7-3770 + 960显卡+ 16G内存。

结果对比,相对与之前2012年Unity版本,可能mono做了很大的优化,当然我们的电脑可能还是不一样,没有办法直接做对比,也只能猜测而已。

但是结论还是一样的:

在以后的使用中,若大量使用,还是需把transform给手动保存下来吧

说明:

代码做了修改:

原来的代码中有这些:


四、强制拔高啦!!

我还想努力一把!!

让别人可以直接用,但是有不修改原有代码:

怎么办呢?

既然大家都要继承monobehaviour,那我就在他上面想办法。

4.1 方法一,实现一个扩展方法:


但是这个扩展方法,必须静态的,所以没有办法做一个静态的临时变量啊,这个不靠谱啊。

若写成上面的代码效率并没有太多提高。每次还是需要赋值。

所以这个路走不通啊!!

来看方法二吧。

4.2 方法二,乾坤大挪移,重新命名类


UnityMonoBehaviour 这个是啥呢?哈哈

看using UnityMonoBehaviour = UnityEngine.MonoBehaviour;

我们来看看结果:

直接使用tranform 和this.tranform花费时间为9ms,比上面的20多ms,那是降低了很多。

但是,这个是结论啊,还是没有手动缓存的效果高啊,依旧为4ms。

放出所有代码:

五、参考:

https://forum.unity3d.com/threads/cachedmb.130365/

http://pastebin.com/vYKK4pat

http://blog.sina.com.cn/s/blog_5b6cb9500101fkal.html

http://answers.unity3d.com/questions/700468/where-do-methods-mocked-with-wrapperlessicall-meth.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容

  • 111. [动画系统]如何将其他类型的动画转换成关键帧动画? 动画->点缓存->关键帧 112. [动画]Unit...
    胤醚貔貅阅读 12,943评论 3 90
  • 有多少人走有过初恋,有多少人还记得初恋。 我还记得,那个时候他为了我顶撞班主任,一晃三年,当时我还是高二。我...
    一过之客阅读 729评论 0 0
  • 好友跟我抱怨爱人如何如何的时候,我问她:这是真实的他吗?还是你认为的并演绎出来的他?她突然怔住了。 我想,我们在跟...
    Looloo阅读 441评论 0 1
  • 上次去沈阳考试,偷懒没有规划路线,只好下车后驻足于一处公交站牌下下载地图。茫然四顾,注意到站牌附近有一处小巷,巷口...
    塔塔妹阅读 202评论 0 0
  • 闺蜜聚会,L一脸愁容。 起因是昨日她从下午5点半在商场等老公,结果老公8点才到。L一肚子火。 饭桌上,L小姐心平气...
    古月如歌519阅读 304评论 2 6