网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月06日漏签0天
unity3d吧 关注:116,322贴子:560,395
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 14回复贴,共1页
<<返回unity3d吧
>0< 加载中...

Start,Update等方法到底是如何被调用的?

  • 只看楼主
  • 收藏

  • 回复
  • q2047553
  • Physics
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
今天看基础Unity视频,视频里的讲师说自己写的脚本都是继承自MonoBehaviour,然后只需要重写各种类似Start的方法就可以了。“重写”这个词令楼主很疑惑?如果Start是虚方法,在C#中重写不是要加override的关键字吗?为什么我们写的时候没加。转到MonoBehaviour的定义发现不论是MonoBehaviour还是他的父类都没有Start这类方法。
那么自己写的脚本中的Start方法是如何被调用的呢?
楼主猜测是这样的:
1、Unity内部维护场景里的对象列表,在每帧获取对象上的所有MonoBehaviour组件。
2、在每帧的不同时期调用MonoBehaviour中的Start等方法。
3、由于Start等方法是私有的且属于MonoBehaviour的子类,所以不能直接调用
4、楼主这里想到了可以用SendMessage方法:SendMessage("Start");
5、还可以用C#的反射。楼主发现调用同一方法,反射明显比SendMessage要快。
不知大家有没更好的猜测。毕竟不论是SendMessage还是反射总觉得速度很慢,感觉不应该出现在引擎的核心部分。楼主对C/C++了解不深,不知道在Native代码中有没更好的做法,求高手指点。


  • q2047553
  • Physics
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
哎呀,又试了下,发现反射真的出乎意料的快,竟然和对象直接调用自己的方法所用时间差不多,有时还略快。是我的错觉吗?


2025-06-06 01:41:47
广告
  • 喀珂赦修
  • Unitor
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
楼主,在哪儿能直接看到MonoBehaviour类和它的父类的源码啊?


  • 老衲和妳拼了
  • Particle
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
楼主都这么屌了还看基础视频啊


  • love哆啦A梦sky
  • Scene
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
出基础教程的人要被你吓的删教程了


  • hzf2257
  • Particle
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
用的事件机制,接口,继承,总之我瞎猜的到的


  • OuchZ
  • Renderer
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
http://www.zhihu.com/question/27752591


  • 巫妖郭嘉
  • Material
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
然而还是没有搞清什么是star()方法


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 14回复贴,共1页
<<返回unity3d吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示