网易的自研引擎NeoX怎么样?和主流游戏引擎的Unity3D或虚幻相比有什么优势

从NeoX引擎打造《乱斗西游》看网易手游优势与趋势!
现今玩家对手游动作画面和操作手感的要求越来越高,3D手游引擎发展到今天,能否实现炫丽而又流畅的画面也愈发重要。网易自战略布局手游以来,斥资千万打造自研手游引擎NeoX,为开发更多精品手游提供坚实的技术基础和广阔空间,形成了自有的技术优势。而近期即将面世的由NeoX打造的全新3D动作手游力作《乱斗西游》正体现了3D游戏技术发展的趋势。
《乱斗西游》游戏中逼真的场景效果和强大的动作特效让玩家热血沸腾。如此顶尖的画面效果源自于NeoX的独特性能,那基于NeoX制作出的手游表现力具体如何呢?让我们一同来看下它的五大特征。 从NeoX引擎打造《乱斗西游》看网易手游优势与趋势
NeoX粒子系统的使用,将精致的画面、逼真的效果呈现在《乱斗西游》游戏之中,在这里玩家可以体验到颠覆经典的西游世界的真实景象,如:铁扇公主的狂风、燃烧的火焰山、从天而降的陨石等等。 从NeoX引擎打造《乱斗西游》看网易手游优势与趋势 粒子系统使得《乱斗西游》中的击打效果和场景氛围更加劲爆,在英雄释放技能的时候会以放射状的光效展示出一种焦点感,突显战斗气势,并且人物本身也会有特殊的光效处理,对打击感带来很好的渲染。此外,受击者身上的受击反馈与攻击方特效的华丽程度一致,让玩家能够体会到拳拳到肉的动作打击感。除此之外,NeoX的光影效果也十分显著,像阳光照射、水波纹光的反射以及雾气弥漫的效果都能够让每场战斗都与众不同。 从NeoX引擎打造《乱斗西游》看网易手游优势与趋势
NeoX采用的多线程渲染技术(Multithreaded-Rendering),发挥多核优势,提升整个引擎的效率,使得游戏画面显示更加流。渲染是引擎的重要功能,当3D模型制作完成之后,会按照不同的面把材质贴图赋予模型,就相当于为骨骼蒙上肌肤,最后再通过渲染引擎把模型、动画、光影、特效等所有效果实时计算出来并展示在屏幕上。
《乱斗西游》让玩家的听觉也战斗起来!NeoX独特的高保真3D环绕声音效系统,让各具特色的场景音乐尽收耳底,或紧张激励、或宛转悠扬,只为还原最现实的战斗音效。与此同时,众位西游英雄也都拥有各位的阵前呐喊音效,战斗中击杀对手后会出现热血刺激的称赞音效。让战斗充满身临其境的体验,享受动作带给你的震撼。
为了让玩家体验到精确灵活的角色操控感,做好人物的基本动作非常重要,这包括位置移动、移动速度、方向、距离等基本属性。而为之提供支持的最关键的引擎技术就是行为动画系统,它控制着角色的常规运动,NeoX基于人体动作捕捉的动作系统,可以真实的还原现实世界中的走位和击打动作,让玩家可以体验到精准操控角色击打、闪避对手的战斗乐趣。 从NeoX引擎打造《乱斗西游》看网易手游优势与趋势
NeoX引擎为了实现环境光遮蔽和颜色溢出,首先要采用烘焙点云的过程,对场景中的集合体和光照环境进行预处理,从而形成相应的点云。每个点包含了微型多边形和表面的数据,一旦数据被创造出来既可以对它进行隐藏和重复利用。点云预渲染的有点在于阴影部分因为只有在颜色烘焙到当前的点云上才需要启动,颜色溢出计算可以和环境光遮蔽一样迅速,节省大量演算时间。第二阶段的渲染要通过现场几何体的阴影来指代烘培过的点云,从而计算基于点的效果,每个点就相当于场景中的定向碎片。
基于点云的场景预烘培技术速度要比光线追踪方法快将近8倍,并且占用内存更少。除此之外图像中还没有高频噪声干扰,置换贴图表面时也不会产生渲染位移。使用起来更加高效和方便。
乱斗西游WIKI导航
按职业分类:
按种族分类:
按星级分类:
文章关键字:
着迷评分:★★★★★7.7
运营商:网易游戏
类型:卡牌 / 角色扮演
平台:IOS / Android
分享此wiki给我的好友
扫一扫,加关注Asset Store搜索Dialogue System和Cinema Director。&br&&a href=&///?target=https%3A//www./en/%23%21/content/11672& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Asset Store&i class=&icon-external&&&/i&&/a&&br&&img src=&/ecbe5c4a018c8e8affcb0fa9066fb4cc_b.png& data-rawwidth=&770& data-rawheight=&480& class=&origin_image zh-lightbox-thumb& width=&770& data-original=&/ecbe5c4a018c8e8affcb0fa9066fb4cc_r.png&&&br&&a href=&///?target=https%3A//www./en/%23%21/content/11672& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&https://www./en/#!/content/19779&i class=&icon-external&&&/i&&/a&&br&&img src=&/7bf4e8f0535cad4fc24753acf9a05961_b.png& data-rawwidth=&785& data-rawheight=&300& class=&origin_image zh-lightbox-thumb& width=&785& data-original=&/7bf4e8f0535cad4fc24753acf9a05961_r.png&&&br&人家都做得很完善了,何必重复发明轮子。
Asset Store搜索Dialogue System和Cinema Director。
人家都做得很完善了,何必重复发明轮子。
这个答案作为对@&a href=&/people/kang-yu-ying& class=&internal&&康与缨&/a&答案的补充&br&我认为造成效果差异主要在于开发流程和项目类型上。人的因素和引擎因素互相影响吧。&br&&br&关于对unity和unreal(主要基于unreal3,因为现在还没有拿4做过项目)的开发体验区别。我个人感觉程序更喜欢unity,调试方便。&br&&br&而策划和美术更喜欢unreal(前提是会用)。&br&&br&unreal的开发流程就像工业管线一样,每一个开发环节都有对应的编辑器负责。比如美术如果要调画面效果,自己用材质编辑器灯光编辑器就能弄好。策划要制作关卡,可以自己用bsp搭建关卡原型,自己用kismet或者bp制作基本的玩法。基本不需要程序插手。而且在unreal开发流程中,最终资源的整合是体现在关卡(level)环节的。是你写好功能再摆放到关卡中,而不是做好关卡再写功能。可以说是策划把控游戏内容。甚至优化上,关卡的碰撞啊动态加载卸载lod切换视野距离裁剪可见性遮挡剔除等等都是编辑器里现成的功能,也不需要程序操心。&br&&br&另外,同样作为预渲染光照引擎,lightmass是unreal的看家法宝,烘培效果要好过unity一大截。举个简单的例子,同样在移动平台的表现下,unreal是可以把法线贴图产生的光影烘培到lighemap上。还可以手动对lightmap进行修改,允许多张lightmap叠加使用。所以细节要比unity丰富许多。&br&&br&&b&你说无尽之剑细节效果为啥这么好,因为人家是用法线贴图+视差贴图去烘光影的。&/b&&br&&img src=&/ea03a09dfb47baa5bac563b_b.jpg& data-rawwidth=&1455& data-rawheight=&818& class=&origin_image zh-lightbox-thumb& width=&1455& data-original=&/ea03a09dfb47baa5bac563b_r.jpg&&&img src=&/29c7dcb8e9a6aa34f4f5e8_b.jpg& data-rawwidth=&1466& data-rawheight=&820& class=&origin_image zh-lightbox-thumb& width=&1466& data-original=&/29c7dcb8e9a6aa34f4f5e8_r.jpg&&&img src=&/8c971cfe416d2e8db5e54_b.jpg& data-rawwidth=&1467& data-rawheight=&819& class=&origin_image zh-lightbox-thumb& width=&1467& data-original=&/8c971cfe416d2e8db5e54_r.jpg&&&img src=&/7aebfe4f14aeae1830ae87b_b.jpg& data-rawwidth=&1473& data-rawheight=&825& class=&origin_image zh-lightbox-thumb& width=&1473& data-original=&/7aebfe4f14aeae1830ae87b_r.jpg&&&img src=&/02e821b15a829795fbbad_b.jpg& data-rawwidth=&1468& data-rawheight=&823& class=&origin_image zh-lightbox-thumb& width=&1468& data-original=&/02e821b15a829795fbbad_r.jpg&&&br&&img src=&/47a9f1b5feed77edddcab_b.jpg& data-rawwidth=&1471& data-rawheight=&827& class=&origin_image zh-lightbox-thumb& width=&1471& data-original=&/47a9f1b5feed77edddcab_r.jpg&&&br&&img src=&/ff2dabe2d576_b.jpg& data-rawwidth=&1136& data-rawheight=&640& class=&origin_image zh-lightbox-thumb& width=&1136& data-original=&/ff2dabe2d576_r.jpg&&&br&&u&但是如果美术不会合理分配lightmap和添加灯光那出来的效果就跟屎一样了。比如下面这个,说这是虚幻3你信?&/u&&br&&br&&img src=&/78fdcc13feaa7c0fb6df93e72274b9da_b.jpg& data-rawwidth=&550& data-rawheight=&311& class=&origin_image zh-lightbox-thumb& width=&550& data-original=&/78fdcc13feaa7c0fb6df93e72274b9da_r.jpg&&&br&当然unity也可以实现差不多的效果,但是要外部渲染器配合,靠本身的光照烘培是无法做到的,因此对美术的要求更高。需要把整个关卡在外部软件中做好并且烘培好光影再整体导入游戏中。如果有所修改就得全部重来一遍,太麻烦了,我是不愿意轻易尝试这样的流程的。&br&&img src=&/48a9f68df711f02f6f3c8_b.jpg& data-rawwidth=&558& data-rawheight=&417& class=&origin_image zh-lightbox-thumb& width=&558& data-original=&/48a9f68df711f02f6f3c8_r.jpg&&&br&&b&所以使用unreal开发需要做到,美术、动画、特效、策划,把自己对应的这块编辑器功能用好,再配合自己的专业知识在引擎里二次加工,做出效果就会很棒。对使用者的门槛和专业素质都有一定要求。&/b&&br&&br&&br&&b&至于国内团队用不好unreal,原因也在于此。本身专业水平就一般般,美术和策划又没几个会编辑器的,基本上就是把素材扔进去完事。按这个开发流程,用什么引擎效果都一样烂。&/b&&br&&br&如果是个小团队,光弄懂各个编辑器就够头疼了。你也没有足够人手专人专项负责这些环节,所以你弄懂了编辑器也不见得能做出好效果。&br&&br&相反unity没有这样全面的编辑器使用,很多环节离不开程序。虽然有很多插件可以做补充,但插件毕竟不是标配,不同团队使用的插件五花八门,效果也因人而异。所以更适合那种分工没有那么明确,一人身兼数职的小型团队。试想,如果用unity开发一款大型游戏,你的美术,特效,动画,关卡每个环节都需要配备一名或者数名程序去协调,那项目管理难度和开发效率会是啥样。&b&所以unity基本就是,给你的素材好,你出来的效果就牛逼,素材不好,效果就烂。引擎本身能提供的二次加工效果有限。比如这个游戏...(我又来安利了)&/b&&br&&img data-rawheight=&1018& data-rawwidth=&1920& src=&/11cbd217ddac33469ad8_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/11cbd217ddac33469ad8_r.jpg&&&br&&img data-rawheight=&1018& data-rawwidth=&1920& src=&/640d2c37eac3deeac92c3d_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/640d2c37eac3deeac92c3d_r.jpg&&&br&&img data-rawheight=&1018& data-rawwidth=&1920& src=&/79fb924f33b_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/79fb924f33b_r.jpg&&&br&&img data-rawheight=&1018& data-rawwidth=&1920& src=&/03b436fddff278ef03d290f6ebfda45f_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/03b436fddff278ef03d290f6ebfda45f_r.jpg&&&br&&img data-rawheight=&1018& data-rawwidth=&1920& src=&/b785107adf18e6063cabfdb_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/b785107adf18e6063cabfdb_r.jpg&&&br&那么问题来了,如果两个团队水平一样,他们分别用unreal和unity做出的效果会有多大差别呢?&br&这个...就请大家自行脑补吧。&br&&br&顺带提下CE,CE就是高级版的unity。本身功能有限但是非常牛逼。
这个答案作为对@答案的补充 我认为造成效果差异主要在于开发流程和项目类型上。人的因素和引擎因素互相影响吧。 关于对unity和unreal(主要基于unreal3,因为现在还没有拿4做过项目)的开发体验区别。我个人感觉程序更喜欢unity,调试方便。 而策划和…
&p&以下我以“大型3D、大型2D、中小型2D和微型2D”来划分,尽可能减少”纠结“感。&/p&&p&因为引擎的选择一向做不到“以偏概全”,他们各有所长,应选择自己适合的。&/p&&p&尤其是差异化这么明显的两个引擎。&br&&br&&b&一、&/b&&b&3D&/b&&b&游戏(包含&/b&&b&2.5D&/b&&b&)&/b&&/p&&p&只能:&b&Unity3D&/b&&br&作品:职业棒球、星际陆战队等&br&分布:欧美国家用Unity3D的较多。商业化引擎中,3D游戏占比最高&br&原因:&/p&&br&&p&
就像 &a href=&/people/b65ec66e94eb5c& class=&internal&&@朱云&/a&所说。&b&Cocos2d-x&/b&&b&目前还不支持&/b&&b&3D&/b&&b&。&/b&相比而言,U3D就是你唯一的选择了。&br&&br&&br&&b&二、大型&/b&&b&2D&/b&&b&游戏(可以指安装包上百兆的)&/b&&br&推荐:&b&Unity3D&/b&&br&作品:捣蛋猪、冰雪奇缘、天天飞车、绝代双骄等&br&分布:欧美国家用Unity3D的较多,国内用Cocos2D-X的多&br&原因:&br&&br&&/p&&b&1&/b&&b&、游戏这东西,就是要跟&/b&&b&“&/b&&b&直觉&/b&&b&”&/b&&b&打交道的&/b&&br&&br&&p&我的想法有点极端,我感觉在游戏世界里,代码似乎更像是“妥协”的产物。&br&&br&如果能做到“所见即所玩”,那真的是一个非常惬意的事。到时候,或许一个8岁小孩就能独立自主的开发一款游戏。&/p&&br&&p&而这一点,Unity3D的王者地位,当之无愧!&br&&br&&/p&&b&2&/b&&b&、&/b&&b&Unity3D&/b&&b&提供了超赞的设计工具,让你感觉像是在用&/b&&b&3DMax&/b&&b&和&/b&&b&Flash&/b&&b&来做游戏&br&&/b&&br&&b&3&/b&&b&、适合大型团队,美工、动画更容易上手&/b&&br&&br&U3D可以让美工、动画、码农在同一个平台上各司其职。这点从目前来看,Cocos2D-X望尘莫及。&p&&br&&br&&b&三、中小型&/b&&b&2D&/b&&b&游戏(百兆以内的)&/b&&br&推荐:&b&Cocos2D-X&/b&&br&作品:捕鱼达人、我叫MT、2048等&br&分布:东亚游戏多出自Cocos2D-X,尤其中国。但大多为小型游戏&br&原因:&br&&br&&/p&&b&1&/b&&b&、&/b&&b&Unity3D&/b&&b&比&/b&&b&Cocos2D-X&/b&&b&的&/b&&b&APK&/b&&b&包要大了&u&近十倍&/u&&/b&&br&&br&&p&仅以Android手机为例,同样的一个&b&2D&/b&&b&版&/b&&b&HelloWorld&/b&,两者的安装包大小:&br&Unity3D:约为&b&9.27M&/b&&br&Cocos2D-x:约为&b&1.67M&/b&&br&&br&解开包后发现,里面除了两个一共占据近12M的SO库(libmono.so和libunity.so),还有一票的DLL文件。其中System.dll、Assembly-CSharp.dll和mscorlib.dll这三个核心文件就占了5M。虽然它们压缩比约为50%,但仅这些文件就占了这么多。心疼啊。&/p&&br&&p&&b&而这,在&/b&&b&“&/b&&b&寸土寸金&/b&&b&”&/b&&b&的中小型游戏面前是多么可怕的数字。&/b&&br&&br&&/p&&b&2&/b&&b&、&/b&&b&Cocos2D-X&/b&&b&比&/b&&b&Unity3D&/b&&b&快很多&/b&&br&&br&&p&即使不用测试工具,也可以轻易的发现这一点。&/p&&br&&p&主要因为Unity3D用了Mono架构,它移植自微软的.Net。每次启动都会加载Mono框架和Unity3D引擎,再加载.Net Assembly(一堆DLL文件),这可比Cocos2D-x这种纯C++(包括Lua和JS)实现要慢很多。&br&&br&&/p&&b&3&/b&&b&、独立开发者更喜欢&/b&&b&“&/b&&b&码&/b&&b&”&/b&&b&游戏&/b&&br&&br&&p&独立开发者大多是“技术达人”(不然怎么开发游戏)。U3D会让他们有“无所适从”感,从而影响了对U3D的灵活运用。对这些人而言,这是赤裸裸的时间成本。在游戏开发中,这点尤为重要。&b&还是&/b&&b&Cocos2D-X&/b&&b&让他们更感到&/b&&b&“&/b&&b&亲切&/b&&b&”,更有&/b&&b&成就感&/b&&b&。&/b&&/p&&br&&p&也许你会问:“你怎么知道?”&/p&&p&因为我就是搞技术的。&/p&&br&&b&4&/b&&b&、中国游戏多出自&/b&&b&Cocos2D-X&/b&&br&&br&&p&Cocos2D-X是正宗国产货,又是优秀的开源项目,国外用户群也不少。&/p&&p&也正是因为这个原因,C2D天生就对中国用户很“偏爱”。比如社区,我在上面问了两个问题,基本上当天问当天答,而且非常热心。从这一点我就对C2D产生了不错的好感。&/p&&br&&b&5、Unity3D要收费&/b&&br&&br&&p&对大型2D游戏团队来说或许还不算什么。&/p&&br&&p&初步算一下,Pro要1500$,手游怎么至少也得兼容iOS和Android吧,各自1500$,再加个Team套装,加一块儿,5000$,两万多银子。&/p&&br&&p&&b&Cocos2D-X免费、开源。&/b&遇到问题可以研究源码或向社区求救。&/p&&p&&br&&br&&b&四、微型游戏(指争取安装包在&/b&&b&1M&/b&&b&以内的)&/b&&br&推荐:&b&AndEngine、Cocos2D-iPhone&/b&&br&作品:Flappy Bird、小球快跑、五子棋等&br&分布:不需要跨平台的超小游戏用的多。&br&原因:&/p&&br&&b&如果只想在一个平台上开发游戏,无疑上述两种是最好的选择&/b&&br&&br&&p&其中AndEngine开发出来的游戏最小才400多KB,大名鼎鼎的Flappy Bird就是用它做出来的。&br&&br&另外,iPhone的Cocos2D划到这里似乎不太合适,但仔细想想,现在有更成熟的Cocos2d-x方案,Cocos2D划到微型游戏一列,相信是早晚的事(个人看法,轻拍)。&br&&br&&br&&b&五、总结&/b&&/p&&br&&p&1、Unity3D:如果你需要开发&b&大型游戏&/b&,或需要开发3D游戏的,请选这个。&/p&&br&&p&2、Cocos2D-x:如果你开发的是&b&中小型游戏&/b&,对安装包大小比较在意的,请选这个。&/p&&br&&p&3、Andengine、Cocos2D-iPhone:如果你只为开发&b&单平台游戏&/b&,又非常在意速度和安装包大小,请选这个。&/p&&p&&br&最后。俗话说:&b&没有最好的,只有最适合自己的。&/b&我想这句话同样适用于开发游戏。&/p&&p&共勉!&/p&&br&&p&&b&转载请注明出处。谢谢!&/b&&/p&
以下我以“大型3D、大型2D、中小型2D和微型2D”来划分,尽可能减少”纠结“感。因为引擎的选择一向做不到“以偏概全”,他们各有所长,应选择自己适合的。尤其是差异化这么明显的两个引擎。 一、3D游戏(包含2.5D)只能:Unity3D 作品:职业棒球、星际陆战…
&p&最新更新去掉了以前贴出的推荐网站,很多人反映广告嫌疑,但真不是广告,但还是去除了,网站资源网上大把的,有心找还是不难找到的。。。。。。。。。。。。。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~这个问题我要认真回答一下!咳咳~~、、、、&/p&&p&说明一下背景:经常下班后用课余时间学习Unity,花费大量时间摸索如何自学,跟题主分享一下,希望对题主有一定帮助!&/p&&p&看了上面的答案都太笼统了,都是先学C#语法啊,再说Demo啊,基本没有道出重点!&/p&&p&好了我是零基础起家,现在水平也咋滴,说下我个人的学习过程和学习感受,加一点自己的理解感悟!&/p&&p&好的,各位,废话已经说了一堆,性子急的人估计已经要骂人了,哈哈哈~~~~&/p&&p&1.首先上来不要急着学习什么语法啊,DEMO什么的,你学习这些你知道有什么用吗?在你不知道你
学习的东西将来有什么用,怎么用的情况下,你是很难有动力把它学好的!&b&我建议请先大致了解unity是 如何‘’生产‘’游戏 ‘’的(初级框架)&/b&,对,生产,就是生产游戏。这个阶段你不要了解unity里面的原理,你也理解 不了,这个阶段最重要的是对unity生产游戏流程的认识,你了解这个流程你能检验你是否真的喜欢 这样的工作,不喜欢马上撤走,喜欢的话这个时候你的内心是鸡冻的,跟我当初一样的鸡冻,完全勾起你内心的好奇欲,学习会更有动力,并且学习有一定的方向了,不是吗?你都知道unity是怎么生产游戏的了,把每个环节分块学习,不就是学习计划了吗?&/p&&p&然后有人就接着问了,你这说的不是废话吗?当然我如果只说上面的确实是有点废话,那么我告诉
你你这个阶段应该去哪里下手?对,XX学院~~,它里面有一套unity的学习框架课程(利益相关就隐去了网站),看这套课程的时候,记住:不要深究,不要深究,不要深究,看它里面的框架,流程,这里面有很多总结性东西,记下来,记下来,记下来。我看这个课程的时候当时啥都不懂,疯狂抄笔记,不明白不要紧,看完这套课程你心里应该已经大概有个框架了,unity是怎么生产游戏的和unity软件本身的基础框架(比如说unity的菜单,视图界面,游戏场景,游戏对象,摄像机,灯光,脚本,坐标系统,物理系统,动画系统,粒子系统,后面难一点的图形学,物理数学,Shader,渲染管道等等);&/p&&p&2.了解上面的框架后,心里就有底了,学的东西有什么用,按上面顺序学按你自己的理解程度和个人喜好,我个人是&b&了解框架后这个时候开始来学习C#语言&/b&,因为你这个时候学C#学了之后可以马上去动手试试,挂到物体上让它动起来,一来可以加深记忆,二来可以知道是不是对的;&/p&&p&&b&建议零基础者不要一上来就买本C#书抱着看,很难&/b&,&b&我只能说我看不懂,可能是我智商低吧,反正我是看不懂的,建议先从视频开始学习。&/b&这里推荐一部零基础视频,XX学院里面的XX老师的unity脚本零基础入门(之前写贴出了出处广告嫌疑很重),是专门针对unity讲的c#,希望对你有帮助!看完这个视屏后你再买本&b&入门书籍《c#图形教程》&/b&,不推荐《Head First》,再看书好好系统的学习语法!学习c#脚本的时候推荐几个工具:Scripting API、unity圣典。&/p&&p&3、学习完脚本语法后,就可以正式进入unity的学习了,同样的,&b&建议刚开始从视频学起,有一定了解后再去买书回来死磕!&/b&推荐XX学院里面的XX老师的unity零基础学习入门(免费),后面还有基础,中级、进阶篇,按个人情况(他的视频越到后面错误点越多,所以自己把握,只建议看入门篇),如果题主不喜欢这种风格,可以另外自找零基础教学的视频,刚开始学习一定要看视屏,最好能跟着做,他做一步你就做一步,多动手,做到一定基础后再买书回来系统学习,在网上看视频切不要东看一节课西看一节课,找那种一套完整的教学看;书籍推荐官方出版的2本书&b&《unity5.x从入门到精通》、《unity官方案例精讲》&/b&,这2本书对零基础学员来说绝对是很好的2本教材,知识面很广但不深,很系统!&/p&&p&4、如果你把上面所说的都认真学完了的话,我觉得你基本已经入门了,也基本已经有了自己的学习计划,后面的事情就是哪里不会补哪里,再到官方网站上面去找案例学,官网是个很宝贵的地方,勤去!后面需要进阶的部分(物理数学、Shader、3D图形学、内存管理优化、网络、架构、系统引擎等等)就留给大牛来指点,我就说到这,希望对大家有用,有什么建议欢迎下方留言指正!&/p&&p&学习unity英语很重要,英语,英语,英语!!!&/p&&p&从上面可以看出我从零基础开始学的方法是:视频+图书!看视频就是在听一个人给你讲知识,零基础也能听懂一些,对一个陌生的知识有一些认识之后再去看书。看视频的好处是容易懂,就好像有个老师在旁边指导你一样,容易接纳。看书的好处是知识是系统的,这是视频所不具备的,视频学习都是讲知识点,看书可以将点连成网!&/p&&p&&br&&/p&&p&PS:说得不好请多多指正,欢迎一起交流!&/p&
最新更新去掉了以前贴出的推荐网站,很多人反映广告嫌疑,但真不是广告,但还是去除了,网站资源网上大把的,有心找还是不难找到的。。。。。。。。。。。。。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~…
&p&Natalya Tatarchuk,业界图形学大神,现在跑到unity去做高管了。主要推进自定义渲染管线和自动化内容生成。自动内容生成的思路就是通过工具先做大部分基础工作,结合PCG技巧快速生成内容,再靠artist控制最终效果。就是所谓的民主化高精度的内容创造。还是挺期待这部分内容的,尤其是小团队,生产内容额外困难。这也是像解决业内终极问题在努力。&/p&&p&现在Unity的那个Head of Cinematics叫Adam Myhill,之前在Blackbird做Homeworld: Desert of Karak的自动相机系统。Unity新的相机系统,应该就是他在Desert of Karak基础之上完成的。这其实也算是自动化内容的一部分,可以叫做procedural camera animation,跟tatarchuk的大方向非常吻合。具体见keynote 1:35:38,如果想体会一下这套东西实际在游戏里是怎么发挥作用的,可以参考Desert of Karak的2015 GDC Talk: &a href=&///?target=https%3A///watch%3Fv%3DQNR9Nvjsv9Y& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&/watch?&/span&&span class=&invisible&&v=QNR9Nvjsv9Y&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&新增的那个光照聚合的界面其实很不错,我一直想做一个针对material的。unity很大问题是workflow非常程序员化,搞的程序员都跟td一样,什么都要集成。但是如果想in-engine调出好效果,方便美术使用的界面必须要有。unity在workflow和usability上还有海量的提升空间,比如:&/p&&ul&&li&至今都还没有统一管理hotkey的方式,也不解决mac和win上hotkey映射不同问题。&/li&&li&inspector是个singleton跟project窗口配合起来要频繁切换太烦人。&/li&&li&prefab嵌套要依赖第三方插件,原生连补充嵌套功能都要重新实现编辑器界面。&/li&&li&场景合并非常困难。&/li&&li&动画编辑器的交互一坨翔&/li&&li&没有有效地插件管理,导入插件之后变成零散文件,删除起来非常困难。&/li&&li&等等等等。&/li&&/ul&&p&这些虽然是非常细节的功能,但是日常使用的时候充满了摩擦力,让你无法忘记工具的存在。&/p&&p&如果延续natarchuk的思路,unity应该革新现在asset store的运作方式。如果有海量的数据和内容作为基础,这本身就是一种很有效的pcg。很久以前做cocos的时候,一个第三方particle editor,内置了很多其他用户上传的particle模版,虽然内容参差不齐,但是都可以直接使用,作为修改的基础。而且通过观察别人编辑的内容,我可以很快的学习编辑技巧和设计思路,进一步提升产出。unity应该仿照类似,把particle,material,shader,动画,mocap数据等资源垂直嵌入到游戏编辑界面内,方便提取内容模版进行编辑,而不是现在asset store这种尝试成本很高的方式。当然两者也可以是平行的。&/p&
Natalya Tatarchuk,业界图形学大神,现在跑到unity去做高管了。主要推进自定义渲染管线和自动化内容生成。自动内容生成的思路就是通过工具先做大部分基础工作,结合PCG技巧快速生成内容,再靠artist控制最终效果。就是所谓的民主化高精度的内容创造。还是…
蟹妖, 都闪开, 上面的回答都没有做过大型剧情, 我曾经做过一个端游,剧情动画超过10分钟的片段不在少数。&br&&br&首先写剧情脚本不要用状态机,不要各种ifelse,当我们说一个动画脚本 “一个人从床上起来,拿起剑走出门外” 的时候,里面包含一堆状态机和条件判断,从床上起来需要播动画,需要等待动画结束,然后走到剑的旁边,需要等待走到。。。。,这里面每个动作和行为之间衔接,都要判断,写得不好就是一堆ifelse,写的稍微好点的就是状态机, 但不可避免的涉及一个问题就是如何优雅的等待某动作、事件完成?&br&&br&正确姿势是co-routine,用timeline驱动,导出为lua程序代码,导出时检查合法性,稍后上图说明之前做的一个director程序(要回去找找),专门做剧情脚本,策划用过都说是神器。&br&&br&最后就是如何在unity3d里用lua了,哈哈,当然是用我开源的&a href=&///?target=http%3A//www.slua.net& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Slua | Fastest static lua binding for Unity3D&i class=&icon-external&&&/i&&/a&. &br&&br&对于Unity3D, 为啥不生成c#代码?因为剧情是资源更好,可以随时更新,甚至从网络传输过来。
蟹妖, 都闪开, 上面的回答都没有做过大型剧情, 我曾经做过一个端游,剧情动画超过10分钟的片段不在少数。 首先写剧情脚本不要用状态机,不要各种ifelse,当我们说一个动画脚本 “一个人从床上起来,拿起剑走出门外” 的时候,里面包含一堆状态机和条件判…
&p&因为院校的差距要靠你实力的差距来弥补。&/p&&p&&br&&/p&&p&我前段时间刚帮景略集智(&a href=&///?target=https%3A//jizhi.im& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&jizhi.im&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&)(简称集智)的用户们内推了一些社招,又公开帮助18届的应届生们做了个校招内推,七天内&b&AI类&/b&职位简历我看了估计快1000份了,内推出去800多份,其中不乏科大讯飞、图森、商汤、今日头条、百度、腾讯、阿里、京东、美团、蚂蚁金服、搜狗这样的企业。清北浙中复上交电厦航等校人数的比例还真比我想象的大得多。(你还别不服说什么没有985学历上不了知乎,事实就是985优先,你除了酸两句能怎么样?认不认是你的问题,事实就是985优先,明白不?)&/p&&p&&br&&/p&&p&你当前需要反思的一个重要地方就是:简历写的是不是有问题。就我看到的简历而言,很多hr是可以直接一刀切地判断这人不行的。大部分人简历中表达自己的经历是有问题的,不知道发力点在哪,要么就是吹的太过,因为是要横向对比的,很简单的就能看出来。&/p&&p&BAT级别的公司人人想进,但是hc就那么多,除非实力碾压别人,不然院校水平可能会让你吃尽苦头。&/p&&p&你已经锐气尽失了,现在反而是个很好的状态,不如静下心来,好好想想简历怎么写,自己如何定位自己是个什么水平,理想薪资是多少,好好投一些简历。&/p&&p&&br&&/p&&p&&b&悄悄告诉你一个秘密:IT类开发职位主要看中“项目经历”这个环节。&/b&&/p&&p&知道这一点你就赢了50%的人啦。&/p&
因为院校的差距要靠你实力的差距来弥补。 我前段时间刚帮景略集智()(简称集智)的用户们内推了一些社招,又公开帮助18届的应届生们做了个校招内推,七天内AI类职位简历我看了估计快1000份了,内推出去800多份,其中不乏科大讯飞、图…
理论上,由于现代的图形架构是管道(pipeline)形式,要用具体执行环境来评测一个shader的效率,需要让该shader成为瓶颈,然后量度其吞吐量(throughput)。&br&&br&然而,有几个因素造成上述的方法无用或无效:&br&&ol&&li&在游戏开发中,除了游戏机和街机平台,一般的目标平台(硬件、操作系统)并不是完全固定的。屏幕分辨率也是可变的。&/li&&li&游戏过程有很多变数,例如渲染1个接近镜头的NPC和渲染10个远离镜头的NPC,其性能分别难以预测。瓶颈经常会改变。&/li&&/ol&有一些shader是较容易评测的,例如,全屏后期处理的瓶颈在于pixel shader、纹理采样和带宽,其运行复杂度与屏幕分辨率成正比。&br&&br&对于其他shader,最简单的评测方式是,观察shader源代码编译成汇编之后的一般指令及纹理采样指令数目。这是一个非常粗糙的评测方式,但可以用于作一些简单的统计,找出那些可能有问题的shader。这适合像UE给美术随意创建shader的情况。&br&&br&但在游戏开发中,我看到一般的做法是,以执行游戏来作整体评测及优化,而不是单独评测各个部分。一方面是因为游戏有很多变数,另一方面是因为人力成本。所以通常会做一些自动评测整体性能的测试,例如让Bot在场景中行走,记录整体的帧率、CPU/GPU时间、draw-call等。如自动测试程序发现超出预期的数值,就发电邮通知团队。这种测试每天自动执行,可画出按天数的性能图表,知道开发及优化的整体情况。&br&&br&因为题目不是问优化,就不详述优化方法了。但很重要的是,图形程序员应该对图形系统的架构有基本认识,了解shader语言各指令及其编译后的指令,能写出合乎常识的shader。&br&&br&最后,推荐Emil Person在这两年的GDC讲义 &a href=&///?target=http%3A//www.humus.name/index.php%3Fpage%3DArticles& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Humus - Articles&i class=&icon-external&&&/i&&/a&:&br&&ul&&li&Low-Level Thinking in High-Level Shading Languages&br&&/li&&li&Low-level Shader Optimization for Next-Gen and DX11&/li&&/ul&
理论上,由于现代的图形架构是管道(pipeline)形式,要用具体执行环境来评测一个shader的效率,需要让该shader成为瓶颈,然后量度其吞吐量(throughput)。 然而,有几个因素造成上述的方法无用或无效: 在游戏开发中,除了游戏机和街机平台,一般的目标平…
先简单说一下我对这三个引擎的了解:我的本职工作是3A Console游戏的开发,对于大型商业引擎使用较多。UDK使用过UE2的内部改造版,开发过《分裂细胞4》;最近公司完成的项目是 Far Cry 3,这是个内部引擎,公开的名称是Dunia,同CE1有所渊源。尽管UDK和CE3不再直接使用,但出于工作需要还是有些了解。Unity 3D是我和几个朋友制作独立游戏使用的引擎,了解的比较深入。&br&&br&简单来说Unity 3D和UDK,CE3适用于两种完全不同的开发模式:独立制作和高成本商业制作。具体的区别很多,一下子没法说完。我提两点请题主仔细考虑:&br&&br&第一,你计划制作的游戏规模有多大?你的团队有多大?&br&第二,有发行计划么?什么平台?&br&&br&UDK和CE2的主要市场是大型商业开发,尽管技术上比较先进些,功能高端一些,但是没有相应的开发力量很难驾驭。Unity 3D从一开始就瞄准了低端独立开发市场,而且有很多第三方的开发插件,就是为开发力量薄弱的小团队准备的。&br&&br&另外开发平台和目标平台的问题也要考虑。UDK和CE3没有Mac版,Unity 3D是跨平台的。如果是为iOS开发,不支持Mac平台非常麻烦。CE3只支持PC和Console平台;UDK支持PC,Console和Mobile,但是由于种种原因,Mobile平台上产品很少;Unity啥都支持,甚至有Web端,除了最近放弃的Flash平台。&br&&br&另外,题主似乎是美术人员吧?如果我说错了请纠正我。从美术人员的角度,很容易被高端引擎的高画质吸引。但是换个角度,从实际开发的角度看,引擎跟项目的契合度更为重要。另外,题主有编程的经验么?任何严肃的游戏开发都离不开写代码。尽管某些逻辑编辑器,比方说UDK的Kismet或者CE3的Flow Graph貌似足够强大,一旦你实际开发起来,还是会发现提供范围内的功能很好用,但是一旦超出一点点,即使再简单的功能也做不到。相反Unity 3D没有提供过多的内建编辑器,全部用脚本实现,反而灵活度高,这也是另外一个独立游戏常用Unity 3D的原因——灵活度比功能完备重要。&br&&br&市面上有些游戏引擎号称完全不用写代码的,基本上这些都是2D引擎,功能简单。但是支持Mobile平台,可以直接制作出能够上架贩卖的游戏。题主不妨关心一下,给你几个关键字供搜索:GameMaker,Game Salad,Stencyl。&br&&br&总之,建议题主还是先把我的两个问题想清楚了,再做决定。&br&&br&随便说了一些,考虑也不全面。想到再补充。
先简单说一下我对这三个引擎的了解:我的本职工作是3A Console游戏的开发,对于大型商业引擎使用较多。UDK使用过UE2的内部改造版,开发过《分裂细胞4》;最近公司完成的项目是 Far Cry 3,这是个内部引擎,公开的名称是Dunia,同CE1有所渊源。尽管UDK和CE3…
在百度上搜索了很久都没有找到如何在Android上面真机断点调试的方法,没办法只能科学上网到谷歌上去找,终于在Unity官网上找到了Android真机断点调试的办法。&br&1.首先在手机上开启USB调试功能,并安装驱动(这一步很多手机助手都可以完成)。&br&2.用USB电缆连接手机和电脑。&br&3.确保手机和电脑在一个局域网内,简单的说就是电脑和手机共用一个路由器,网段一样。&br&4.打开电脑上CMD窗口,输入以下命令:&br&
adb tcpip 5555(该命令打开手机adb网络调试功能)&br&
正常情况下输入命令后控制台会出现回显&br&
restarting in TCP mode port: 5555&br&
打开手机查看手机的IP地址(不会请百度)假设手机的地址是192.168.1.x输入命令&br&
adb connect 192.168.1.x&br&
如果一切正常控制台会回显以下内容&br&
connected to 192.168.1.x:5555&br&
如果你想查看是否连接成功请输入以下内容&br&
adb devices&br&
控制台会回显连接的设备&br&5.如果一切连接成功,请拔掉USB电缆,选择File-&Build&Run,在编译之前要勾选上Development Build 和Script Debugging这两项(在build setting里面勾选不要忘记否则是不能调试的)电脑会自动编译文件并将APK推送至手机,在手机上同意并安装。6.当程序运行后再Monodevelop里面打开Run-&Attach to process 会发现你手机的选项,选择手机,在脚本里面添加断点,你发现可以调试了,那叫一个爽!出现问题再也不用去瞎猜,或者添加Debuglog了。&br&新补充:有些同学因为某些原因没有实现最后调试这一步,我深表遗憾,为了给大家证明确实是可以这么做的,我特此贴出我的成功截图,我的两个手机联想K3note 和小米2都没有问题(不要吐槽手机太破,对我来说完全够用,开发游戏的我现在基本不怎么玩游戏了),三星T815平板还没试不过相信没有问题。请大家坚定信心,这条路肯定是是行得通的,出了问题好好检查下到底是哪里不对。&br&&img src=&/dccffc5b97816dec76a587f_b.jpg& data-rawwidth=&1105& data-rawheight=&616& class=&origin_image zh-lightbox-thumb& width=&1105& data-original=&/dccffc5b97816dec76a587f_r.jpg&&如果这篇文章对您有帮助或者你对此表示认同请点赞,提升排名让更多需要的人看到本文,谢谢!&br&
本文版权所有如无本人授权请勿转载,如需转载请联系作者,一个字按一软妹币收费!
在百度上搜索了很久都没有找到如何在Android上面真机断点调试的方法,没办法只能科学上网到谷歌上去找,终于在Unity官网上找到了Android真机断点调试的办法。 1.首先在手机上开启USB调试功能,并安装驱动(这一步很多手机助手都可以完成)。 2.用USB电缆连…
&u&离散式的碰撞检测&/u&中,帧与帧之间是独立的,因此会遇到题主所述的问题,即碰撞体上一个帧没撞上墙,而下一个帧穿过了墙,该物体本身在任意一个帧独立来看都是不知道自己会撞墙的(物理学中管这个叫量子隧穿效应)。&br&&u&连续式的碰撞检测&/u&则可以避免这一点。&br&原理和题主所述是一样的,就是射线检测法(Ray-casting)。当然额外的计算量也意味着额外的系统负担。&br&&br&&br&对于Unity引擎而言,是可以直接解决这个问题的。&br&&img src=&/4bad0c610b4b8e4af7d2d73_b.png& data-rawwidth=&299& data-rawheight=&210& class=&content_image& width=&299&&Unity的Rigidbody里有个Collision Detection的碰撞检测属性。&br&该属性有三个选项:Discrete(离散), Continuous(连续), Continuous Dynamic(动态连续)。&br&&br&官方Manual里的解释如下:&br&&blockquote&Collision DetectionUsed to prevent fast moving objects from passing through other objects without detecting collisions.&br&&br&- Discrete: Use Discreet collision detection against all other colliders in the scene. Other colliders will use Discreet collision detection when testing for collision against it. Used for normal collisions (This is the default value).&br&&br&&br&-Continuous: Use Discrete collision detection against dynamic colliders (with a rigidbody) and continuous collision detection against static MeshColliders (without a rigidbody). Rigidbodies set to Continuous Dynamic will use continuous collision detection when testing for collision against this rigidbody. Other rigidbodies will use Discreet Collision detection. Used for objects which the Continuous Dynamic detection needs to collide with. (This has a big impact on physics performance, leave it set to Discrete, if you don’t have issues with collisions of fast objects)&br&&br&&br&-Continuous Dynamic: Use continuous collision detection against objects set to Continuous and Continuous Dynamic Collision. It will also use continuous collision detection against static MeshColliders (without a rigidbody). For all other colliders it uses discreet collision detection. Used for fast moving objects.&/blockquote&&a href=&///?target=http%3A///Manual/class-Rigidbody.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unity - Manual: Rigidbody&i class=&icon-external&&&/i&&/a&&br&其中的Discreet一词应为笔误,实为Discrete(Discreet意为慎重,两者意思相差很大)。整个Manual里没有第二处用到Discreet的地方,也没有任何官方说明提到该词。&br&翻译过来基本上就是&br&&br&碰撞检测属性:用于防止快速移动的物体穿过其他物体而不触发碰撞检测。&br&&br&离散(Discrete):&br&- 碰撞体在遇到本场景其他碰撞体时使用离散式碰撞检测(Discrete)。&br&- 其他碰撞体在遇到它时会使用离散式碰撞检测(Discrete)。&br&- 用于正常碰撞。(这是默认值)&br&&br&连续(Continuous):&br&- 碰撞体在遇到其他动态碰撞体(即包含rigidbody)使用离散式碰撞检测(Discrete),在遇到静态MechColliders(即不含rigidbody)时使用连续式碰撞检测(Continuous)。&br&- 设为动态连续(Continuous Dynamic)的碰撞体在遇到该物体时使用连续式碰撞检测(Continuous), 其他碰撞体在遇到该物体时使用离散式碰撞检测(Discrete)。&br&- 用于设定被动态连续(Continuous Dynamic)的物体所碰撞的物体。(会影响物理引擎的性能表现。如果你没有快速运动物体的碰撞问题,就乖乖设为离散吧)&br&&br&动态连续(Continuous Dynamic):&br&- 碰撞体在遇到其他设为连续(Continuous)或动态连续(Continuous Dynamic)的物体时使用连续式碰撞检测(Continuous)。在遇到静态MeshColliders(即不含rigidbody)时也使用连续式的碰撞检测。遇到其他碰撞体则使用离散式碰撞检测(Discrete)。&br&- 用于快速运动的物体。&br&&br&理成一个碰撞检测属性与碰撞检测方式的对应表格就是:&br&&img src=&/5bcecc5d200a4f0eafb2_b.png& data-rawwidth=&584& data-rawheight=&85& class=&origin_image zh-lightbox-thumb& width=&584& data-original=&/5bcecc5d200a4f0eafb2_r.png&&如果你有一个快速运动的小球,它会穿过一个静态的墙,那么将球设为Continuous即可解决问题。&br&但如果你有多个这样的小球,它们之间则依旧会遇到互相穿过对方的问题,那么将球都设为Continuous Dynamic更好。&br&&br&&br&&b&所以遇到题主的问题时,将快速运动的物体设为Continuous/Continuous Dynamic即可。&/b&&br&&br&&br&理论上你可以设定所有物体为Continuous Dynamic,然而这样的物体数量一旦增加起来,对性能会有很大的影响。
离散式的碰撞检测中,帧与帧之间是独立的,因此会遇到题主所述的问题,即碰撞体上一个帧没撞上墙,而下一个帧穿过了墙,该物体本身在任意一个帧独立来看都是不知道自己会撞墙的(物理学中管这个叫量子隧穿效应)。 连续式的碰撞检测则可以避免这一点。 原理…
嘛。作为一个u3d从业者。负责任的说一句。国产游戏做的渣真心不是引擎问题。而是态度问题。&br&u3d做大型游戏有很多弊端。但这些弊端是可以通过人为努力而修正的。作为引擎,它无疑是一款好引擎。&br&当然UE4我也用过。渲染技术各方面真是碉堡了。但是我相信就算UE4免费给北软用。他们也做不出能够感动玩家的仙剑。&br&其实仙剑最大的问题并不在于用什么引擎,而是在于制作人保持什么目的。在5前销售后曾经有一段采访,姚自己说,如果5前不叫5前而叫6,那么估计能够多卖出几份。类似这样态度我不知道用什么引擎可以弥补。&br&整个仙剑团队的决策仅仅是背靠一个好IP尽全力花最短的时间最小的成本换现而已。如何养活团队和让投资人满意基本是他们的行为准则。至于玩家的期待,说实话,铁粉那么多,多多少少是有点不在乎的。&br&另外说一下。国内游戏圈个人感觉是没有所谓的“制作人”的。所有金牌制作人,大半是成功的经营者和商人,而非“游戏艺术家”。他们懂市场,懂渠道,懂营销,但却未必懂游戏,懂该有的艺术追求,懂玩家的期待和体验。所以期待的国产IP走出国门,走向世界,有点不太现实。毕竟市场决定一切也怪不得他们。
嘛。作为一个u3d从业者。负责任的说一句。国产游戏做的渣真心不是引擎问题。而是态度问题。 u3d做大型游戏有很多弊端。但这些弊端是可以通过人为努力而修正的。作为引擎,它无疑是一款好引擎。 当然UE4我也用过。渲染技术各方面真是碉堡了。但是我相信就算U…
&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unity3D Open Source Search Engine&i class=&icon-external&&&/i&&/a&
如果你要录屏的话有很多方式(不限于U3D),随便写点供参考,想得起来的多少写多少:&br&&br&Windows:&br&GDI 全屏:fullscreen desktop BitBlt
速度是 20ms / 帧&br&GDI 窗口:Win7+可以录制游戏和非游戏,XP以前只能录制普通界面,截不到游戏窗口&br&DirectDraw 全屏:full screen primary surface 异步到 offscreen-surface XP下闪电速度 1ms / 帧&br&D3D9: render target -& offscreen surface XP下 16ms Win7 下 10ms&br&D3D Hook: Hook Device::Present -& 保存 StateBlock -& 截屏 -& 恢复 StateBlock
极速!&br&&br&Linux: &br&framebuffer: 打开 /dev/fb0 映射到内存,直接读里面内容,部分显卡驱动启用硬件加速绘图后,framebuffer会被跳过,直接调用 framebuffer 导致读取出来的东西为空。&br&&br&Android:&br&framebuffer: 需要 root 权限才能访问 framebuffer&br&RootView: 取得 root view 然后得到 drawing cache 然后保存,兼容性好,慢。&br&OpenGL:直接 glReadPixel 保险,但是会卡到应用。&br&OpenGL FBO: 更改渲染的 FBO ,让渲染到纹理,从纹理取下来,还行,速度还好。&br&screenshot: SurfaceComposerClient::getBuiltInDisplay Android 4.0 以后,性能不错。&br&native buffer: ANativeWindowBuffer -& GraphicBuffer -& 映射读取, 性能不错&br&&br&iOS:&br&OpenGL: 直接 glReadPixel 同 Android,同样会卡到应用&br&OpenGL FBO: 渲染到 FBO,读取下来,还行。&br&&br&大部分方法可以用 Hook 的方式注入到目标程序,或者系统 API,在不需要目标程序改一行代码的情况下实现功能。&br&&br&欢迎补充。。。
如果你要录屏的话有很多方式(不限于U3D),随便写点供参考,想得起来的多少写多少: Windows: GDI 全屏:fullscreen desktop BitBlt 速度是 20ms / 帧 GDI 窗口:Win7+可以录制游戏和非游戏,XP以前只能录制普通界面,截不到游戏窗口 DirectDraw 全屏:fu…
这个视频是mihoyo官方作品,作者之前还用Uinty5做过一个琪亚娜跳极乐净土的视频(av7244731),仅用两天时间就在众多极乐净土的MMD中杀出重围,登上了B站全站播放量的榜首,相信同样也是很多人的动态桌面&br&&img src=&/v2-ce02c178b8a5ceeadcfeb6bbc03a3a4d_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/v2-ce02c178b8a5ceeadcfeb6bbc03a3a4d_r.jpg&&有一部分人认为这个视频要做的更好,其实从技术性上来说并不是,为什么会有这种感觉呢,首先是先入为主的观点,这么精致的人物模型以及动态场景的细节制作,在MMD视频中无疑是里程碑式的作品,看过这个版本的极乐净土后,其他视频都变得索然无味;第二是舞台效果,琪亚娜所在的舞台非常高大上,场景辉煌大气,闪烁的灯光,舞台上的倒影,酷炫的服装,还有下作的欧派,无一不是吸引人眼球的地方;不断在变化又增加了观赏性的拍摄视角,不管是从普通观众的角度上还是从MMD类视频作者的角度,这第一个视频都让人过目不忘&br&&img src=&/v2-6eaca81be6b46ed5ed957cc_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/v2-6eaca81be6b46ed5ed957cc_r.jpg&&&br&到了第二个视频,芽衣的制作其实要更加精致&br&首先是模型上,芽衣的表情相比琪亚娜要丰富不少,相信大家都被视频中芽衣姐姐的笑容治愈了;其次视频中人物的口型全程对歌词,芽衣除了跳舞外还兼顾演唱(举报!琪亚娜假唱!)&br&琪亚娜的极乐净土视频,当初有观察的仔细的观众指出建模有点小瑕疵,就是琪亚娜的手臂在有些动作中弯曲不是很自然,有些像吸管一样瘪下去;第二个视频就明显在动作上花了很大功夫,芽衣的舞蹈要更欢快灵活,这次不仅不会出现手臂弯曲不自然,而且多次出现的空气吉他表演,手指的灵活演绎都快让人忘记她是一个虚拟人物,她不是真实存在的&br&然后场景的效果对比第一个只是没有那么酷炫,但不比第一个花的心思少,首先是阴影跟随,大家可以再刷一遍注意地上的倒影,它会根据芽衣的动作及拍摄角度不同呈现恰到好处的光影变化,让人感觉非常真实;中途驶来的崩坏3专列给人的视觉冲击更不用说(第一次看时弹幕刷“前方高能”我还以为是会从下方拍摄胖次什么的,没想到居然是老司机开火车,果然我这个人还是太肤浅啊)列车模型及贴图的细节同样精致,完全对应了崩坏3上海地铁专线的痛车&br&舞蹈快要结束时,拍摄视角逐渐拉远,视频中画面的右边有一个不是很起眼的反光镜,但是反光镜中不仅照出了场景,并且芽衣的动作和倒影也完全捕捉在里面,这个细节需要花费多大心思大家就心照不宣吧&br&&img src=&/v2-8f63baf60d0fa085df6b87_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/v2-8f63baf60d0fa085df6b87_r.jpg&&最后选择这个场景的建模也非常有意义,它真的不是大伟哥的海景房别墅区啦!&br&镰仓高校站前的铁路是动漫《灌篮高手》中的一个经典场景,它本身并不是景点,但因为这个动漫的存在它变成了让人留恋青春的著名景点,所以说各位萌新以及那些以为买了版权就懂二次元的不愿透露姓名的爸爸们,还是要多学习一个啊~&br&&br&*以上都是一个普通舰长&观众角度的个人肤浅见解,并不具备专业性哦&br&&br&&br&所以这就是你游策划能够为所欲为的理由吗?!!!&br&——————“是啊!”
这个视频是mihoyo官方作品,作者之前还用Uinty5做过一个琪亚娜跳极乐净土的视频(av7244731),仅用两天时间就在众多极乐净土的MMD中杀出重围,登上了B站全站播放量的榜首,相信同样也是很多人的动态桌面 有一部分人认为这个视频要做的更好,其实从技术性上…
关键是你想看啥呢?看大家一致声讨云风?你就心满意足了?还是大家一起踩 xlua?你就能HI了?&br&如果正儿八经的请教,匿名干嘛?&br&忽然明白了四个字,什么叫做 “好事之徒”,原来说的就是这。&br&&br&要看戏就自己演,看不惯谁就自己上。&br&&br&觉得冤的话,不改题目的情况下取昵,然后我就把我这答案改了。&br&--
关键是你想看啥呢?看大家一致声讨云风?你就心满意足了?还是大家一起踩 xlua?你就能HI了? 如果正儿八经的请教,匿名干嘛? 忽然明白了四个字,什么叫做 “好事之徒”,原来说的就是这。 要看戏就自己演,看不惯谁就自己上。 觉得冤的话,不改题目的情况…
Unity 的成功始于手游(iOS及Android)。&br&XNA 支持 Windows、Xbox 360(仅能发布给每年付99美金的会员)及——Windows Phone ??
Unity 的成功始于手游(iOS及Android)。 XNA 支持 Windows、Xbox 360(仅能发布给每年付99美金的会员)及——Windows Phone ??
&p&先上最终效果&/p&&p&&br&&/p&&img src=&/v2-3bd346d2d97a1c37d6052_b.png& data-rawwidth=&1131& data-rawheight=&634& class=&origin_image zh-lightbox-thumb& width=&1131& data-original=&/v2-3bd346d2d97a1c37d6052_r.png&&&p&*最后在挥动方面的角度计算仍有问题,有问题的代码放在最后请大手子们指点一下。&/p&&p&===================================================&/p&&p&昨晚看到了这题,但是觉得可能会上头导致失眠,所以没写,结果还是失眠了……&/p&&p&如果要我个人说的话,我建议让美术制作“轻度弯曲”“中度弯曲”“重度弯曲”三个动画,然后让程序根据挥动力度在这三者间切换就好。&/p&&p&现在我写的是另一个解决方案,即通过代码更新Mesh来实现。&/p&&p&废话不多说,关键代码如下:&/p&&p&首先是计算插值的代码,也是照搬的逍遥剑客的算法:&/p&&div class=&highlight&&&pre&&code class=&language-csharp&&&span class=&k&&private&/span& &span class=&kt&&float&/span& &span class=&nf&&GetCantileverW&/span&&span class=&p&&(&/span&&span class=&kt&&float&/span& &span class=&n&&x&/span&&span class=&p&&,&/span& &span class=&kt&&float&/span& &span class=&n&&L&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&return&/span& &span class=&n&&Mathf&/span&&span class=&p&&.&/span&&span class=&n&&Pow&/span&&span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&,&/span& &span class=&m&&2f&/span&&span class=&p&&)&/span& &span class=&p&&*&/span& &span class=&p&&(&/span&&span class=&m&&3&/span& &span class=&p&&*&/span& &span class=&n&&L&/span& &span class=&p&&-&/span& &span class=&n&&x&/span&&span class=&p&&)&/span& &span class=&p&&/&/span& &span class=&p&&(&/span&&span class=&m&&2&/span& &span class=&p&&*&/span&&span class=&n&&Mathf&/span&&span class=&p&&.&/span&&span class=&n&&Pow&/span&&span class=&p&&(&/span&&span class=&n&&L&/span&&span class=&p&&,&/span& &span class=&m&&3f&/span&&span class=&p&&));&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&其次是更新Mesh用到的代码,代码都在注释里我就不废话解释了:&/p&&div class=&highlight&&&pre&&code class=&language-csharp&&&span class=&k&&public&/span& &span class=&k&&void&/span& &span class=&nf&&RefreshRod&/span&&span class=&p&&(&/span&&span class=&kt&&float&/span& &span class=&n&&distance&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&CantileverDistance&/span& &span class=&p&&=&/span& &span class=&n&&distance&/span&&span class=&p&&;&/span&
&span class=&c1&&//第一步,制造一个鱼竿的Mesh&/span&
&span class=&c1&&//1.0,清理数据&/span&
&span class=&n&&RodMesh&/span&&span class=&p&&.&/span&&span class=&n&&Clear&/span&&span class=&p&&();&/span&
&span class=&n&&colors&/span&&span class=&p&&.&/span&&span class=&n&&Clear&/span&&span class=&p&&();&/span&
&span class=&n&&vertices&/span&&span class=&p&&.&/span&&span class=&n&&Clear&/span&&span class=&p&&();&/span&
&span class=&n&&triangles&/span&&span class=&p&&.&/span&&span class=&n&&Clear&/span&&span class=&p&&();&/span&
&span class=&c1&&//1.1,拿到每个节点的长度&/span&
&span class=&c1&&//1.1.1,计算弯曲之后的鱼竿节点&/span&
&span class=&n&&List&/span&&span class=&p&&&&/span&&span class=&n&&Vector3&/span&&span class=&p&&&&/span& &span class=&n&&rodeList&/span& &span class=&p&&=&/span& &span class=&k&&new&/span& &span class=&n&&List&/span&&span class=&p&&&&/span&&span class=&n&&Vector3&/span&&span class=&p&&&();&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span&&span class=&kt&&int&/span& &span class=&n&&i&/span& &span class=&p&&=&/span& &span class=&m&&0&/span&&span class=&p&&;&/span& &span class=&n&&i&/span& &span class=&p&&&&/span& &span class=&n&&RodeCount&/span&&span class=&p&&;&/span& &span class=&n&&i&/span&&span class=&p&&++)&/span&
&span class=&p&&{&/span&
&span class=&n&&rodeList&/span&&span class=&p&&.&/span&&span class=&n&&Add&/span&&span class=&p&&(&/span&&span class=&k&&new&/span& &span class=&n&&Vector3&/span&&span class=&p&&(&/span&&span class=&m&&0&/span&&span class=&p&&,&/span& &span class=&n&&RodeLength&/span& &span class=&p&&*&/span& &span class=&n&&i&/span&&span class=&p&&,&/span& &span class=&n&&CantileverDistance&/span& &span class=&p&&*&/span& &span class=&n&&GetCantileverW&/span&&span class=&p&&(&/span&&span class=&n&&RodeLength&/span& &span class=&p&&*&/span& &span class=&n&&i&/span&&span class=&p&&,&/span& &span class=&n&&RodeLength&/span& &span class=&p&&*&/span& &span class=&p&&(&/span&&span class=&n&&RodeCount&/span& &span class=&p&&-&/span&&span class=&m&&1&/span&&span class=&p&&))));&/span&
&span class=&p&&}&/span&
&span class=&c1&&//1.1.2,由于弯曲之后鱼竿长度会变相增长,所以进行一次缩放&/span&
&span class=&kt&&float&/span& &span class=&n&&realLength&/span& &span class=&p&&=&/span& &span class=&m&&0f&/span&&span class=&p&&;&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span&&span class=&kt&&int&/span& &span class=&n&&i&/span& &span class=&p&&=&/span& &span class=&m&&1&/span&&span class=&p&&;&/span& &span class=&n&&i&/span& &span class=&p&&&&/span& &span class=&n&&RodeCount&/span&&span class=&p&&;&/span& &span class=&n&&i&/span&&span class=&p&&++)&/span&
&span class=&p&&{&/span&
&span class=&n&&realLength&/span& &span class=&p&&+=&/span& &span class=&p&&(&/span&&span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&p&&-&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&n&&i&/span& &span class=&p&&-&/span& &span class=&m&&1&/span&&span class=&p&&]).&/span&&span class=&n&&magnitude&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span&&span class=&kt&&int&/span& &span class=&n&&i&/span& &span class=&p&&=&/span& &span class=&m&&1&/span&&span class=&p&&;&/span& &span class=&n&&i&/span& &span class=&p&&&&/span& &span class=&n&&RodeCount&/span&&span class=&p&&;&/span& &span class=&n&&i&/span&&span class=&p&&++)&/span&
&span class=&p&&{&/span&
&span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&p&&*=&/span& &span class=&n&&RodeLength&/span& &span class=&p&&*&/span& &span class=&p&&(&/span&&span class=&n&&RodeCount&/span& &span class=&p&&-&/span& &span class=&m&&1&/span&&span class=&p&&)&/span& &span class=&p&&/&/span& &span class=&n&&realLength&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&c1&&//1.1.3*,绘制顶端到钓块的线&/span&
&span class=&n&&Debug&/span&&span class=&p&&.&/span&&span class=&n&&DrawLine&/span&&span class=&p&&(&/span&
&span class=&n&&fish&/span&&span class=&p&&.&/span&&span class=&n&&transform&/span&&span class=&p&&.&/span&&span class=&n&&position&/span&&span class=&p&&,&/span&
&span class=&n&&transform&/span&&span class=&p&&.&/span&&span class=&n&&TransformPoint&/span&&span class=&p&&(&/span&&span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&n&&RodeCount&/span& &span class=&p&&-&/span& &span class=&m&&1&/span&&span class=&p&&])&/span&
&span class=&p&&);&/span&
&span class=&c1&&//1.2,根据每个节点长度,计算出面片&/span&
&span class=&kt&&float&/span& &span class=&n&&unitEuler&/span& &span class=&p&&=&/span& &span class=&m&&2&/span& &span class=&p&&*&/span& &span class=&n&&Mathf&/span&&span class=&p&&.&/span&&span class=&n&&PI&/span& &span class=&p&&/&/span& &span class=&p&&(&/span&&span class=&kt&&float&/span&&span class=&p&&)&/span& &span class=&n&&SplitCount&/span&&span class=&p&&;&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span&&span class=&kt&&int&/span& &span class=&n&&i&/span& &span class=&p&&=&/span& &span class=&m&&1&/span&&span class=&p&&;&/span& &span class=&n&&i&/span& &span class=&p&&&&/span& &span class=&n&&RodeCount&/span&&span class=&p&&;&/span& &span class=&n&&i&/span&&span class=&p&&++)&/span&
&span class=&p&&{&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span&&span class=&kt&&int&/span& &span class=&n&&j&/span& &span class=&p&&=&/span& &span class=&m&&0&/span&&span class=&p&&;&/span& &span class=&n&&j&/span& &span class=&p&&&&/span& &span class=&n&&SplitCount&/span&&span class=&p&&;&/span& &span class=&n&&j&/span&&span class=&p&&++)&/span&
&span class=&p&&{&/span&
&span class=&kt&&float&/span& &span class=&n&&x1&/span& &span class=&p&&=&/span& &span class=&n&&Radius&/span& &span class=&p&&*&/span& &span class=&n&&Mathf&/span&&span class=&p&&.&/span&&span class=&n&&Sin&/span&&span class=&p&&(&/span&&span class=&n&&unitEuler&/span& &span class=&p&&*&/span& &span class=&n&&j&/span&&span class=&p&&);&/span&
&span class=&kt&&float&/span& &span class=&n&&x2&/span& &span class=&p&&=&/span& &span class=&n&&Radius&/span& &span class=&p&&*&/span& &span class=&n&&Mathf&/span&&span class=&p&&.&/span&&span class=&n&&Sin&/span&&span class=&p&&(&/span&&span class=&n&&unitEuler&/span& &span class=&p&&*&/span& &span class=&p&&(&/span&&span class=&n&&j&/span& &span class=&p&&+&/span& &span class=&m&&1&/span&&span class=&p&&));&/span&
&span class=&kt&&float&/span& &span class=&n&&z1&/span& &span class=&p&&=&/span& &span class=&n&&Radius&/span& &span class=&p&&*&/span& &span class=&n&&Mathf&/span&&span class=&p&&.&/span&&span class=&n&&Cos&/span&&span class=&p&&(&/span&&span class=&n&&unitEuler&/span& &span class=&p&&*&/span& &span class=&n&&j&/span&&span class=&p&&);&/span&
&span class=&kt&&float&/span& &span class=&n&&z2&/span& &span class=&p&&=&/span& &span class=&n&&Radius&/span& &span class=&p&&*&/span& &span class=&n&&Mathf&/span&&span class=&p&&.&/span&&span class=&n&&Cos&/span&&span class=&p&&(&/span&&span class=&n&&unitEuler&/span& &span class=&p&&*&/span& &span class=&p&&(&/span&&span class=&n&&j&/span& &span class=&p&&+&/span& &span class=&m&&1&/span&&span class=&p&&));&/span&
&span class=&n&&AddQuad&/span&&span class=&p&&(&/span&
&span class=&k&&new&/span& &span class=&nf&&Vector3&/span&&span class=&p&&(&/span&&span class=&n&&x1&/span&&span class=&p&&,&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&].&/span&&span class=&n&&y&/span&&span class=&p&&,&/span& &span class=&n&&z1&/span& &span class=&p&&+&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&].&/span&&span class=&n&&z&/span&&span class=&p&&),&/span&
&span class=&k&&new&/span& &span class=&nf&&Vector3&/span&&span class=&p&&(&/span&&span class=&n&&x2&/span&&span class=&p&&,&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&].&/span&&span class=&n&&y&/span&&span class=&p&&,&/span& &span class=&n&&z2&/span& &span class=&p&&+&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&].&/span&&span class=&n&&z&/span&&span class=&p&&),&/span&
&span class=&k&&new&/span& &span class=&nf&&Vector3&/span&&span class=&p&&(&/span&&span class=&n&&x1&/span&&span class=&p&&,&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&-&/span&&span class=&m&&1&/span&&span class=&p&&].&/span&&span class=&n&&y&/span&&span class=&p&&,&/span& &span class=&n&&z1&/span& &span class=&p&&+&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&-&/span&&span class=&m&&1&/span&&span class=&p&&].&/span&&span class=&n&&z&/span&&span class=&p&&),&/span&
&span class=&k&&new&/span& &span class=&nf&&Vector3&/span&&span class=&p&&(&/span&&span class=&n&&x2&/span&&span class=&p&&,&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&-&/span&&span class=&m&&1&/span&&span class=&p&&].&/span&&span class=&n&&y&/span&&span class=&p&&,&/span& &span class=&n&&z2&/span& &span class=&p&&+&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&-&/span&&span class=&m&&1&/span&&span class=&p&&].&/span&&span class=&n&&z&/span&&span class=&p&&)&/span&
&span class=&p&&);&/span&
&span class=&n&&AddQuadColor&/span&&span class=&p&&(&/span&&span class=&n&&Color&/span&&span class=&p&&.&/span&&span class=&n&&gray&/span&&span class=&p&&,&/span& &span class=&n&&Color&/span&&span class=&p&&.&/span&&span class=&n&&white&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&span class=&c1&&//1.3,计算上下顶面&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span&&span class=&kt&&int&/span& &span class=&n&&j&/span& &span class=&p&&=&/span& &span class=&m&&0&/span&&span class=&p&&;&/span& &span class=&n&&j&/span& &span class=&p&&&&/span& &span class=&n&&SplitCount&/span&&span class=&p&&;&/span& &span class=&n&&j&/span&&span class=&p&&++)&/span&
&span class=&p&&{&/span&
&span class=&kt&&float&/span& &span class=&n&&x1&/span& &span class=&p&&=&/span& &span class=&n&&Radius&/span& &span class=&p&&*&/span& &span class=&n&&Mathf&/span&&span class=&p&&.&/span&&span class=&n&&Sin&/span&&span class=&p&&(&/span&&span class=&n&&unitEuler&/span& &span class=&p&&*&/span& &span class=&n&&j&/span&&span class=&p&&);&/span&
&span class=&kt&&float&/span& &span class=&n&&x2&/span& &span class=&p&&=&/span& &span class=&n&&Radius&/span& &span class=&p&&*&/span& &span class=&n&&Mathf&/span&&span class=&p&&.&/span&&span class=&n&&Sin&/span&&span class=&p&&(&/span&&span class=&n&&unitEuler&/span& &span class=&p&&*&/span& &span class=&p&&(&/span&&span class=&n&&j&/span& &span class=&p&&+&/span& &span class=&m&&1&/span&&span class=&p&&));&/span&
&span class=&kt&&float&/span& &span class=&n&&z1&/span& &span class=&p&&=&/span& &span class=&n&&Radius&/span& &span class=&p&&*&/span& &span class=&n&&Mathf&/span&&span class=&p&&.&/span&&span class=&n&&Cos&/span&&span class=&p&&(&/span&&span class=&n&&unitEuler&/span& &span class=&p&&*&/span& &span class=&n&&j&/span&&span class=&p&&);&/span&
&span class=&kt&&float&/span& &span class=&n&&z2&/span& &span class=&p&&=&/span& &span class=&n&&Radius&/span& &span class=&p&&*&/span& &span class=&n&&Mathf&/span&&span class=&p&&.&/span&&span class=&n&&Cos&/span&&span class=&p&&(&/span&&span class=&n&&unitEuler&/span& &span class=&p&&*&/span& &span class=&p&&(&/span&&span class=&n&&j&/span& &span class=&p&&+&/span& &span class=&m&&1&/span&&span class=&p&&));&/span&
&span class=&n&&AddTriangle&/span&&span class=&p&&(&/span&
&span class=&k&&new&/span& &span class=&nf&&Vector3&/span&&span class=&p&&(&/span&&span class=&n&&x2&/span&&span class=&p&&,&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&m&&0&/span&&span class=&p&&].&/span&&span class=&n&&y&/span&&span class=&p&&,&/span& &span class=&n&&z2&/span& &span class=&p&&+&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&m&&0&/span&&span class=&p&&].&/span&&span class=&n&&z&/span&&span class=&p&&),&/span&
&span class=&k&&new&/span& &span class=&nf&&Vector3&/span&&span class=&p&&(&/span&&span class=&n&&x1&/span&&span class=&p&&,&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&m&&0&/span&&span class=&p&&].&/span&&span class=&n&&y&/span&&span class=&p&&,&/span& &span class=&n&&z1&/span& &span class=&p&&+&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&m&&0&/span&&span class=&p&&].&/span&&span class=&n&&z&/span&&span class=&p&&),&/span&
&span class=&k&&new&/span& &span class=&nf&&Vector3&/span&&span class=&p&&(&/span&&span class=&m&&0&/span&&span class=&p&&,&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&m&&0&/span&&span class=&p&&].&/span&&span class=&n&&y&/span&&span class=&p&&,&/span& &span class=&m&&0f&/span&&span class=&p&&)&/span&
&span class=&p&&);&/span&
&span class=&n&&AddTriangleColor&/span&&span class=&p&&(&/span&&span class=&n&&Color&/span&&span class=&p&&.&/span&&span class=&n&&white&/span&&span class=&p&&);&/span&
&span class=&n&&AddTriangle&/span&&span class=&p&&(&/span&
&span class=&k&&new&/span& &span class=&nf&&Vector3&/span&&span class=&p&&(&/span&&span class=&n&&x1&/span&&span class=&p&&,&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&n&&RodeCount&/span& &span class=&p&&-&/span& &span class=&m&&1&/span&&span class=&p&&].&/span&&span class=&n&&y&/span&&span class=&p&&,&/span& &span class=&n&&z1&/span& &span class=&p&&+&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&n&&RodeCount&/span& &span class=&p&&-&/span& &span class=&m&&1&/span&&span class=&p&&].&/span&&span class=&n&&z&/span&&span class=&p&&),&/span&
&span class=&k&&new&/span& &span class=&nf&&Vector3&/span&&span class=&p&&(&/span&&span class=&n&&x2&/span&&span class=&p&&,&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&n&&RodeCount&/span& &span class=&p&&-&/span& &span class=&m&&1&/span&&span class=&p&&].&/span&&span class=&n&&y&/span&&span class=&p&&,&/span& &span class=&n&&z2&/span& &span class=&p&&+&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&n&&RodeCount&/span& &span class=&p&&-&/span& &span class=&m&&1&/span&&span class=&p&&].&/span&&span class=&n&&z&/span&&span class=&p&&),&/span&
&span class=&k&&new&/span& &span class=&nf&&Vector3&/span&&span class=&p&&(&/span&&span class=&m&&0&/span&&span class=&p&&,&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&n&&RodeCount&/span& &span class=&p&&-&/span& &span class=&m&&1&/span&&span class=&p&&].&/span&&span class=&n&&y&/span&&span class=&p&&,&/span& &span class=&n&&rodeList&/span&&span class=&p&&[&/span&&span class=&n&&RodeCount&/span& &span class=&p&&-&/span& &span class=&m&&1&/span&&span class=&p&&].&/span&&span class=&n&&z&/span&&span class=&p&&)&/span&
&span class=&p&&);&/span&
&span class=&n&&AddTriangleColor&/span&&span class=&p&&(&/span&&span class=&n&&Color&/span&&span class=&p&&.&/span&&span class=&n&&gray&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&span class=&c1&&//1.4,给Mesh赋值&/span&
&span class=&n&&RodMesh&/span&&span class=&p&&.&/span&&span class=&n&&vertices&/span& &span class=&p&&=&/span& &span class=&n&&vertices&/span&&span class=&p&&.&/span&&span class=&n&&ToArray&/span&&span class=&p&&();&/span&
&span class=&n&&RodMesh&/span&&span class=&p&&.&/span&&span class=&n&&triangles&/span& &span class=&p&&=&/span& &span class=&n&&triangles&/span&&span class=&p&&.&/span&&span class=&n&&ToArray&/span&&span class=&p&&();&/span&
&span class=&n&&RodMesh&/span&&span class=&p&&.&/span&&span class=&n&&colors&/span& &span class=&p&&=&/span& &span class=&n&&colors&/span&&span class=&p&&.&/span&&span class=&n&&ToArray&/span&&span class=&p&&();&/span&
&span class=&n&&RodMesh&/span&&span class=&p&&.&/span&&span class=&n&&RecalculateBounds&/span&&span class=&p&&();&/span&
&span class=&n&&RodMesh&/span&&span class=&p&&.&/span&&span class=&n&&RecalculateNormals&/span&&span class=&p&&();&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&效果如下:&/p&&img src=&/v2-f880f8c59f7a9e9b789c2_b.png& data-rawwidth=&832& data-rawheight=&464& class=&origin_image zh-lightbox-thumb& width=&832& data-original=&/v2-f880f8c59f7a9e9b789c2_r.png&&&p&&br&&/p&&img src=&/v2-fd16a00feeb_b.png& data-rawwidth=&825& data-rawheight=&534& class=&origin_image zh-lightbox-thumb& width=&825& data-original=&/v2-fd16a00feeb_r.png&&&p&(所以如果不缩放长度,弯曲程度越大则钓竿实际长度会无止境的增加)&/p&&p&这个函数只提供了单一方向的挥动,所以挥动方向由父物体提供,我们要另写一个新的挥杆者计算挥杆方向:&/p&&div class=&highlight&&&pre&&code class=&language-csharp&&&span class=&err&&……&/span&
&span class=&c1&&//由于FPSController的问题,不能从鼠标位置正确的得到旋转的速度,所以直接从GameObject的Rotation上拿&/span&
&span class=&k&&public&/span& &span class=&n&&Transform&/span& &span class=&n&&PlayerTrans&/span&&span class=&p&&;&/span&
&span class=&k&&public&/span& &span class=&n&&Transform&/span& &span class=&n&&CameraTrans&/span&&span class=&p&&;&/span&
&span class=&k&&public&/span& &span class=&n&&FishingRod&/span& &span class=&n&&Rod&/span&&span class=&p&&;&/span&
&span class=&c1&&//挥动系数&/span&
&span class=&k&&public&/span& &span class=&kt&&float&/span& &span class=&n&&Force&/span&&span class=&p&&;&/span&
&span class=&c1&&//偏移累计量&/span&
&span class=&k&&public&/span& &span class=&n&&Vector2&/span& &span class=&n&&Offset&/span&&span class=&p&&;&/span&
&span class=&c1&&//目前偏移量&/span&
&span class=&k&&public&/span& &span class=&n&&Vector2&/span& &span class=&n&&CurOffset&/span&&span class=&p&&;&/span&
&span class=&c1&&//偏移回振力度&/span&
&span class=&k&&public&/span& &span class=&kt&&float&/span& &span class=&n&&Resistance&/span&&span class=&p&&;&/span&
&span class=&c1&&//偏移方向&/span&
&span class=&k&&public&/span& &span class=&n&&Vector3&/span& &span class=&n&&OffsetDir&/span&&span class=&p&&;&/span&
&span class=&c1&&//上次的角度&/span&
&span class=&k&&public&/span& &span class=&n&&Vector2&/span& &span class=&n&&LastAngle&/span&&span class=&p&&;&/span&
&span class=&k&&public&/span& &span class=&kt&&float&/span& &span class=&n&&test&/span&&span class=&p&&;&/span&
&/code&&/pre&&/div&&p&这里有一个问题,那就是我使用的是默认的FpsController,导致不能正确的用Input.mousePosition拿到旋转的方向和速度大小,所以这里我从Player的y轴上取到水平方向的旋转分量,再从Camera的x轴上取到垂直旋转的分量。&/p&&div class=&highlight&&&pre&&code class=&language-csharp&&&span class=&c1&&// Update is called once per frame&/span&
&span class=&k&&void&/span& &span class=&nf&&Update&/span& &span class=&p&&()&/span&
&span class=&p&&{&/span&
&span class=&c1&&//获得当前挥动角度&/span&
&span class=&n&&Vector2&/span& &span class=&n&&nowAngle&/span& &span class=&p&&=&/span& &span class=&k&&new&/span& &span class=&n&&Vector2&/span&&span class=&p&&(&/span&&span class=&n&&PlayerTrans&/span&&span class=&p&&.&/span&&span class=&n&&localRotation&/span&&span class=&p&&.&/span&&span class=&n&&y&/span&&span class=&p&&,&/span& &span class=&n&&CameraTrans&/span&&span class=&p&&.&/span&&span class=&n&&localRotation&/span&&span class=&p&&.&/span&&span class=&n&&x&/span&&span class=&p&&);&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&n&&nowAngle&/span& &span class=&p&&!=&/span& &span class=&n&&LastAngle&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&c1&&//加入最大偏移限制,刚进入游戏会有一个1000+的巨额偏移&/span&
&span class=&n&&Offset&/span& &span class=&p&&+=&/span& &span class=&p&&((&/span&&span class=&n&&nowAngle&/span& &span class=&p&&-&/span& &span class=&n&&LastAngle&/span&&span class=&p&&).&/span&&span class=&n&&magnitude&/span& &span class=&p&&&&/span& &span class=&m&&10f&/span& &span class=&p&&?&/span& &span class=&n&&Vector2&/span&&span class=&p&&.&/span&&span class=&n&&zero&/span& &span class=&p&&:&/span& &span class=&p&&(&/span&&span class=&n&&nowAngle&/span& &span class=&p&&-&/span& &span class=&n&&LastAngle&/span&&span class=&p&&));&/span&
&span class=&p&&}&/span&
&span class=&c1&&//对偏移累积量进行修正&/span&
&span class=&kt&&float&/span& &span class=&n&&temp&/span& &span class=&p&&=&/span& &span class=&m&&1&/span& &span class=&p&&-&/span& &span class=&p&&(&/span&&span class=&n&&Resistance&/span& &span class=&p&&/&/span& &span class=&n&&Offset&/span&&span class=&p&&.&/span&&span class=&n&&magnitude&/span&&span class=&p&&);&/span&
&span class=&n&&Offset&/span& &span class=&p&&*=&/span& &span class=&p&&(&/span&&span class=&n&&temp&/span& &span class=&p&&&=&/span& &span class=&m&&0&/span& &span class=&p&&?&/span& &span class=&n&&temp&/span& &span class=&p&&:&/span& &span class=&m&&0&/span&&span class=&p&&);&/span&
&span class=&c1&&//目前偏移量向累积量进行修正&/span&
&span class=&n&&Vector2&/span& &span class=&n&&offsetBetweenTotalAndCurrent&/span& &span class=&p&&=&/span& &span class=&n&&Offset&/span& &span class=&p&&-&/span& &span class=&n&&CurOffset&/span&&span class=&p&&;&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&n&&offsetBetweenTotalAndCurrent&/span&&span class=&p&&.&/span&&span class=&n&&magnitude&/span& &span class=&p&&&&/span& &span class=&n&&Resistance&/span&&span class=&p&&)&/span&
&span class=&n&&CurOffset&/span& &span class=&p&&=&/span& &span class=&n&&Offset&/span&&span class=&p&&;&/span&
&span class=&k&&else&/span&
&span class=&n&&CurOffset&/span& &span class=&p&&+=&/span& &span class=&n&&offsetBetweenTotalAndCurrent&/span&&span class=&p&&.&/span&&span class=&n&&normalized&/span& &span class=&p&&*&/span& &span class=&n&&Resistance&/span&&span class=&p&&;&/span&
&span class=&c1&&//根据得到的偏移量之模刷新Mesh&/span&
&span class=&n&&Rod&/span&&span class=&p&&.&/span&&span class=&n&&RefreshRod&/span&&span class=&p&&(&/span&&span class=&n&&CurOffset&/span&&span

我要回帖

更多关于 主流搜索引擎 的文章

 

随机推荐