﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-战魂小筑-随笔分类-Unity3D</title><link>http://www.cppblog.com/sunicdavy/category/20985.html</link><description>讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu</description><language>zh-cn</language><lastBuildDate>Mon, 27 Dec 2021 16:49:32 GMT</lastBuildDate><pubDate>Mon, 27 Dec 2021 16:49:32 GMT</pubDate><ttl>60</ttl><item><title>因为Component是按类别连续存储的以保证性能</title><link>http://www.cppblog.com/sunicdavy/archive/2021/12/27/217893.html</link><dc:creator>战魂小筑</dc:creator><author>战魂小筑</author><pubDate>Mon, 27 Dec 2021 11:02:00 GMT</pubDate><guid>http://www.cppblog.com/sunicdavy/archive/2021/12/27/217893.html</guid><wfw:comment>http://www.cppblog.com/sunicdavy/comments/217893.html</wfw:comment><comments>http://www.cppblog.com/sunicdavy/archive/2021/12/27/217893.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sunicdavy/comments/commentRss/217893.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sunicdavy/services/trackbacks/217893.html</trackback:ping><description><![CDATA[ Entitas的ECS系统

1. 本来在一个对象中添加一个类字段的过程，ECS需要添加一个类代表Component，并且代码生成。

这个字段一般用于描述对象的资源，处理显示的GameObject， 表示对象的类型等。



2. 本来一个对象的业务逻辑处理过程直接用方法解决的， ECS需要新加一个System，而操作对象需要使用Filter或Group查询获得。



3. 一系列的操作， 需要拆分为多个System和Component拆分处理。如果System顺序不对， 会造成一些诡异的bug。



4. Component不仅仅是Model承载体， 也可以是参数的数据结构。参数Component通过Entity传递到System处理。 例如： 通过ECS创建一个方块的过程，使用CreateTileComponent，包含创建Tile的位置， 创建Entity并添加CreateTileComponent， 在CreateTileSystem中处理就创建了Tile，处理完成时， 需要将传入的Entity.Destroy掉。



6. Entity上修改Component的过程， 会触发事件。修改的过程需要使用RelaceXXX，XXX表示组件名。组件可以频繁修改， 不用担心添加和删除组件过程的性能， Entitas底层处理性能只相当于指针赋值的性能。



ECS像什么？

1. ECS中的System类似触发器系统（Event-Condition-Action），其中，Event对应Entitas的GetTrigger+Collector，表示触发事件。Condition对应Filter表示在事件来源对象中找到需要的对象。 Action对应Execute，表示实际的操作。

2. ECS中的Component类似不用lua扩展的Redis或者不用存储过程的MySQL， 纯粹纯数据， 而不能对数据有任何封装操作。没有lua和存储过程支持的db写起来还是比较费劲的，但ECS就是那么的纯。



3. ECS中的Entity很尴尬，因为Component是按类别连续存储的以保证性能。 逻辑又需要Entity组合成逻辑需要的复合对象。 两边都要照顾，所以这种设计就让代码量巨增，可读性下降。





ECS企图用一套框架灭掉设计模式

1. 单件（Singleton）在Entitas用Unique标签标记Component， 在Context中就是唯一的， 其实也就是Singleton。



2. ECS干掉了传统的工厂模式，底层统一对对象（Entity）和属性（Component）统一管理。需要按Component中的值找回Entity时， 可以使用EntityIndex。

http://zhidao.baixing.com/question/11522598.html
http://zhidao.baixing.com/question/11522600.html
http://zhidao.baixing.com/question/11522605.html
http://zhidao.baixing.com/question/11522610.html
http://zhidao.baixing.com/question/11522615.html
http://zhidao.baixing.com/question/11522618.html
http://zhidao.baixing.com/question/11522621.html
http://zhidao.baixing.com/question/11522623.html
http://zhidao.baixing.com/question/11522626.html
http://zhidao.baixing.com/question/11522629.html
http://zhidao.baixing.com/question/11522631.html
http://zhidao.baixing.com/question/11522637.html
http://zhidao.baixing.com/question/11522643.html
http://zhidao.baixing.com/question/11522646.html
http://zhidao.baixing.com/question/11522649.html
http://zhidao.baixing.com/question/11522651.html
http://zhidao.baixing.com/question/11522653.html
http://zhidao.baixing.com/question/11522655.html
http://zhidao.baixing.com/question/11522657.html
http://zhidao.baixing.com/question/11522662.html
http://zhidao.baixing.com/question/11522666.html
http://zhidao.baixing.com/question/11522668.html
http://zhidao.baixing.com/question/11522673.html
http://zhidao.baixing.com/question/11522679.html
http://zhidao.baixing.com/question/11522683.html
http://zhidao.baixing.com/question/11522685.html
http://zhidao.baixing.com/question/11522686.html
http://zhidao.baixing.com/question/11522687.html
http://zhidao.baixing.com/question/11522689.html
http://zhidao.baixing.com/question/11522690.html
http://zhidao.baixing.com/question/11522693.html
http://zhidao.baixing.com/question/11522694.html
http://zhidao.baixing.com/question/11522696.html
http://zhidao.baixing.com/question/11522699.html
http://zhidao.baixing.com/question/11522700.html
http://zhidao.baixing.com/question/11522703.html
http://zhidao.baixing.com/question/11522708.html
http://zhidao.baixing.com/question/11522714.html
http://zhidao.baixing.com/question/11522719.html
http://zhidao.baixing.com/question/11522723.html
http://zhidao.baixing.com/question/11522726.html
http://zhidao.baixing.com/question/11522730.html
http://zhidao.baixing.com/question/11522732.html
http://zhidao.baixing.com/question/11522735.html
http://zhidao.baixing.com/question/11522738.html
http://zhidao.baixing.com/question/11522741.html
http://zhidao.baixing.com/question/11522743.html
http://zhidao.baixing.com/question/11522748.html
http://zhidao.baixing.com/question/11522753.html
http://zhidao.baixing.com/question/11522755.html
http://zhidao.baixing.com/question/11522758.html
http://zhidao.baixing.com/question/11522761.html
http://zhidao.baixing.com/question/11522766.html
http://zhidao.baixing.com/question/11522769.html
http://zhidao.baixing.com/question/11522772.html
http://zhidao.baixing.com/question/11522773.html
http://zhidao.baixing.com/question/11522774.html
http://zhidao.baixing.com/question/11522775.html
http://zhidao.baixing.com/question/11522776.html
http://zhidao.baixing.com/question/11522782.html
http://zhidao.baixing.com/question/11522788.html
http://zhidao.baixing.com/question/11522791.html
http://zhidao.baixing.com/question/11522792.html
http://zhidao.baixing.com/question/11522793.html
http://zhidao.baixing.com/question/11522795.html
http://zhidao.baixing.com/question/11522797.html
http://zhidao.baixing.com/question/11522798.html
http://zhidao.baixing.com/question/11522803.html
http://zhidao.baixing.com/question/11522805.html
http://zhidao.baixing.com/question/11522810.html
http://zhidao.baixing.com/question/11522813.html
http://zhidao.baixing.com/question/11522817.html
http://zhidao.baixing.com/question/11522822.html
http://zhidao.baixing.com/question/11522827.html
http://zhidao.baixing.com/question/11522829.html
http://zhidao.baixing.com/question/11522833.html
http://zhidao.baixing.com/question/11522838.html
http://zhidao.baixing.com/question/11522843.html
http://zhidao.baixing.com/question/11522847.html
http://zhidao.baixing.com/question/11522851.html
http://zhidao.baixing.com/question/11522856.html
http://zhidao.baixing.com/question/11522860.html
http://zhidao.baixing.com/question/11522863.html
http://zhidao.baixing.com/question/11522867.html
http://zhidao.baixing.com/question/11522873.html
http://zhidao.baixing.com/question/11522877.html
http://zhidao.baixing.com/question/11522881.html
http://zhidao.baixing.com/question/11522889.html
http://zhidao.baixing.com/question/11522891.html
http://zhidao.baixing.com/question/11522896.html
http://zhidao.baixing.com/question/11522897.html
http://zhidao.baixing.com/question/11522899.html
http://zhidao.baixing.com/question/11522901.html
http://zhidao.baixing.com/question/11522904.html
http://zhidao.baixing.com/question/11522910.html
http://zhidao.baixing.com/question/11522911.html
http://zhidao.baixing.com/question/11522912.html
http://zhidao.baixing.com/question/11522913.html
http://zhidao.baixing.com/question/11522916.html
http://zhidao.baixing.com/question/11522917.html
http://zhidao.baixing.com/question/11522923.html
http://zhidao.baixing.com/question/11522925.html
http://zhidao.baixing.com/question/11522931.html
http://zhidao.baixing.com/question/11522935.html
http://zhidao.baixing.com/question/11522936.html
http://zhidao.baixing.com/question/11522942.html
http://zhidao.baixing.com/question/11522945.html
http://zhidao.baixing.com/question/11522949.html
http://zhidao.baixing.com/question/11522952.html
http://zhidao.baixing.com/question/11522957.html
http://zhidao.baixing.com/question/11522962.html
http://zhidao.baixing.com/question/11522966.html
http://zhidao.baixing.com/question/11522968.html
http://zhidao.baixing.com/question/11522969.html
http://zhidao.baixing.com/question/11522971.html
http://zhidao.baixing.com/question/11522972.html
http://zhidao.baixing.com/question/11522976.html
http://zhidao.baixing.com/question/11522977.html
http://zhidao.baixing.com/question/11522979.html
http://zhidao.baixing.com/question/11522981.html
http://zhidao.baixing.com/question/11522982.html
http://zhidao.baixing.com/question/11522986.html
http://zhidao.baixing.com/question/11522990.html
http://zhidao.baixing.com/question/11522991.html
http://zhidao.baixing.com/question/11522993.html
http://zhidao.baixing.com/question/11522994.html
http://zhidao.baixing.com/question/11522999.html
http://zhidao.baixing.com/question/11523001.html
http://zhidao.baixing.com/question/11523002.html
http://zhidao.baixing.com/question/11523008.html
http://zhidao.baixing.com/question/11523011.html
http://zhidao.baixing.com/question/11523014.html
http://zhidao.baixing.com/question/11523017.html
http://zhidao.baixing.com/question/11523020.html
http://zhidao.baixing.com/question/11523023.html
http://zhidao.baixing.com/question/11523025.html
http://zhidao.baixing.com/question/11523028.html
http://zhidao.baixing.com/question/11523029.html
http://zhidao.baixing.com/question/11523035.html
http://zhidao.baixing.com/question/11523038.html
http://zhidao.baixing.com/question/11523042.html
http://zhidao.baixing.com/question/11523044.html
http://zhidao.baixing.com/question/11523045.html
http://zhidao.baixing.com/question/11523047.html
http://zhidao.baixing.com/question/11523049.html
http://zhidao.baixing.com/question/11523061.html
http://zhidao.baixing.com/question/11523063.html
http://zhidao.baixing.com/question/11523065.html
http://zhidao.baixing.com/question/11523066.html
http://zhidao.baixing.com/question/11523068.html
http://zhidao.baixing.com/question/11523076.html
http://zhidao.baixing.com/question/11523077.html
http://zhidao.baixing.com/question/11523082.html
http://zhidao.baixing.com/question/11523085.html
http://zhidao.baixing.com/question/11523086.html
http://zhidao.baixing.com/question/11523088.html
http://zhidao.baixing.com/question/11523093.html
http://zhidao.baixing.com/question/11523097.html
http://zhidao.baixing.com/question/11523098.html
http://zhidao.baixing.com/question/11523100.html
http://zhidao.baixing.com/question/11523102.html
http://zhidao.baixing.com/question/11523106.html
http://zhidao.baixing.com/question/11523109.html
http://zhidao.baixing.com/question/11523111.html
http://zhidao.baixing.com/question/11523113.html
http://zhidao.baixing.com/question/11523115.html
http://zhidao.baixing.com/question/11523116.html
http://zhidao.baixing.com/question/11523119.html
http://zhidao.baixing.com/question/11523121.html
http://zhidao.baixing.com/question/11523123.html
http://zhidao.baixing.com/question/11523125.html
http://zhidao.baixing.com/question/11523127.html
http://zhidao.baixing.com/question/11523132.html
http://zhidao.baixing.com/question/11523134.html
http://zhidao.baixing.com/question/11523136.html
http://zhidao.baixing.com/question/11523137.html
http://zhidao.baixing.com/question/11523139.html
http://zhidao.baixing.com/question/11523144.html
http://zhidao.baixing.com/question/11523147.html
http://zhidao.baixing.com/question/11523150.html
http://zhidao.baixing.com/question/11523151.html
http://zhidao.baixing.com/question/11523153.html
http://zhidao.baixing.com/question/11523155.html
http://zhidao.baixing.com/question/11523156.html
http://zhidao.baixing.com/question/11523159.html
http://zhidao.baixing.com/question/11523161.html
http://zhidao.baixing.com/question/11523164.html
http://zhidao.baixing.com/question/11523165.html
http://zhidao.baixing.com/question/11523168.html
http://zhidao.baixing.com/question/11523170.html
http://zhidao.baixing.com/question/11523171.html
http://zhidao.baixing.com/question/11523172.html
http://zhidao.baixing.com/question/11523173.html
http://zhidao.baixing.com/question/11523182.html
http://zhidao.baixing.com/question/11523184.html
http://zhidao.baixing.com/question/11523186.html
http://zhidao.baixing.com/question/11523188.html
http://zhidao.baixing.com/question/11523190.html
http://zhidao.baixing.com/question/11523196.html
http://zhidao.baixing.com/question/11523201.html
http://zhidao.baixing.com/question/11523203.html
http://zhidao.baixing.com/question/11523204.html
http://zhidao.baixing.com/question/11523206.html
http://zhidao.baixing.com/question/11523207.html
http://zhidao.baixing.com/question/11523213.html
http://zhidao.baixing.com/question/11523217.html
http://zhidao.baixing.com/question/11523220.html
http://zhidao.baixing.com/question/11523223.html
http://zhidao.baixing.com/question/11523225.html
http://zhidao.baixing.com/question/11523228.html
http://zhidao.baixing.com/question/11523230.html
http://zhidao.baixing.com/question/11523232.html
http://zhidao.baixing.com/question/11523234.html
http://zhidao.baixing.com/question/11523235.html
http://zhidao.baixing.com/question/11523237.html
http://zhidao.baixing.com/question/11523240.html
http://zhidao.baixing.com/question/11523242.html
http://zhidao.baixing.com/question/11523245.html
http://zhidao.baixing.com/question/11523248.html
http://zhidao.baixing.com/question/11523251.html
http://zhidao.baixing.com/question/11523254.html
http://zhidao.baixing.com/question/11523258.html
http://zhidao.baixing.com/question/11523262.html
http://zhidao.baixing.com/question/11523267.html
http://zhidao.baixing.com/question/11523268.html
http://zhidao.baixing.com/question/11523272.html
http://zhidao.baixing.com/question/11523277.html
http://zhidao.baixing.com/question/11523280.html
http://zhidao.baixing.com/question/11523281.html
http://zhidao.baixing.com/question/11523282.html
http://zhidao.baixing.com/question/11523287.html
http://zhidao.baixing.com/question/11523292.html
http://zhidao.baixing.com/question/11523298.html
http://zhidao.baixing.com/question/11523299.html
http://zhidao.baixing.com/question/11523301.html
http://zhidao.baixing.com/question/11523304.html
http://zhidao.baixing.com/question/11523305.html
http://zhidao.baixing.com/question/11523310.html
http://zhidao.baixing.com/question/11523312.html
http://zhidao.baixing.com/question/11523316.html
http://zhidao.baixing.com/question/11523320.html
http://zhidao.baixing.com/question/11523323.html
http://zhidao.baixing.com/question/11523325.html
http://zhidao.baixing.com/question/11523328.html
http://zhidao.baixing.com/question/11523330.html
http://zhidao.baixing.com/question/11523333.html
http://zhidao.baixing.com/question/11523337.html
http://zhidao.baixing.com/question/11523341.html
http://zhidao.baixing.com/question/11523345.html
http://zhidao.baixing.com/question/11523351.html
http://zhidao.baixing.com/question/11523355.html
http://zhidao.baixing.com/question/11523358.html
http://zhidao.baixing.com/question/11523360.html
http://zhidao.baixing.com/question/11523363.html
http://zhidao.baixing.com/question/11523367.html
http://zhidao.baixing.com/question/11523371.html
http://zhidao.baixing.com/question/11523375.html
http://zhidao.baixing.com/question/11523378.html
http://zhidao.baixing.com/question/11523380.html
http://zhidao.baixing.com/question/11523383.html
http://zhidao.baixing.com/question/11523386.html
http://zhidao.baixing.com/question/11523389.html
http://zhidao.baixing.com/question/11523394.html
http://zhidao.baixing.com/question/11523396.html
http://zhidao.baixing.com/question/11523399.html
http://zhidao.baixing.com/question/11523400.html
http://zhidao.baixing.com/question/11523404.html
http://zhidao.baixing.com/question/11523406.html
http://zhidao.baixing.com/question/11523412.html
http://zhidao.baixing.com/question/11523418.html
http://zhidao.baixing.com/question/11523422.html
http://zhidao.baixing.com/question/11523425.html
http://zhidao.baixing.com/question/11523428.html
http://zhidao.baixing.com/question/11523430.html
http://zhidao.baixing.com/question/11523432.html
http://zhidao.baixing.com/question/11523437.html
http://zhidao.baixing.com/question/11523441.html
http://zhidao.baixing.com/question/11523445.html
http://zhidao.baixing.com/question/11523446.html
http://zhidao.baixing.com/question/11523449.html
http://zhidao.baixing.com/question/11523452.html
http://zhidao.baixing.com/question/11523454.html
http://zhidao.baixing.com/question/11523460.html
http://zhidao.baixing.com/question/11523461.html
http://zhidao.baixing.com/question/11523468.html
http://zhidao.baixing.com/question/11523472.html
http://zhidao.baixing.com/question/11523475.html
http://zhidao.baixing.com/question/11523478.html
http://zhidao.baixing.com/question/11523481.html
http://zhidao.baixing.com/question/11523482.html
http://zhidao.baixing.com/question/11523485.html
http://zhidao.baixing.com/question/11523487.html
http://zhidao.baixing.com/question/11523492.html
http://zhidao.baixing.com/question/11523494.html
http://zhidao.baixing.com/question/11523500.html
http://zhidao.baixing.com/question/11523501.html
http://zhidao.baixing.com/question/11523502.html
http://zhidao.baixing.com/question/11523506.html
http://zhidao.baixing.com/question/11523509.html
http://zhidao.baixing.com/question/11523516.html
http://zhidao.baixing.com/question/11523521.html
http://zhidao.baixing.com/question/11523525.html
http://zhidao.baixing.com/question/11523530.html
http://zhidao.baixing.com/question/11523533.html
http://zhidao.baixing.com/question/11523534.html
http://zhidao.baixing.com/question/11523537.html
http://zhidao.baixing.com/question/11523539.html
http://zhidao.baixing.com/question/11523541.html
http://zhidao.baixing.com/question/11523543.html
http://zhidao.baixing.com/question/11523547.html
http://zhidao.baixing.com/question/11523550.html
http://zhidao.baixing.com/question/11523551.html
http://zhidao.baixing.com/question/11523554.html
http://zhidao.baixing.com/question/11523555.html
http://zhidao.baixing.com/question/11523561.html
http://zhidao.baixing.com/question/11523565.html
http://zhidao.baixing.com/question/11523572.html
http://zhidao.baixing.com/question/11523574.html
http://zhidao.baixing.com/question/11523580.html
http://zhidao.baixing.com/question/11523581.html
http://zhidao.baixing.com/question/11523583.html
http://zhidao.baixing.com/question/11523584.html
http://zhidao.baixing.com/question/11523592.html
http://zhidao.baixing.com/question/11523596.html
http://zhidao.baixing.com/question/11523599.html
http://zhidao.baixing.com/question/11523601.html
http://zhidao.baixing.com/question/11523605.html
http://zhidao.baixing.com/question/11523607.html
http://zhidao.baixing.com/question/11523613.html
http://zhidao.baixing.com/question/11523614.html
http://zhidao.baixing.com/question/11523616.html
http://zhidao.baixing.com/question/11523617.html
http://zhidao.baixing.com/question/11523620.html
http://zhidao.baixing.com/question/11523622.html
http://zhidao.baixing.com/question/11523623.html
http://zhidao.baixing.com/question/11523624.html
http://zhidao.baixing.com/question/11523625.html
http://zhidao.baixing.com/question/11523630.html
http://zhidao.baixing.com/question/11523633.html
http://zhidao.baixing.com/question/11523637.html
http://zhidao.baixing.com/question/11523638.html
http://zhidao.baixing.com/question/11523640.html
http://zhidao.baixing.com/question/11523641.html
http://zhidao.baixing.com/question/11523642.html
http://zhidao.baixing.com/question/11523643.html
http://zhidao.baixing.com/question/11523646.html
http://zhidao.baixing.com/question/11523648.html
http://zhidao.baixing.com/question/11523651.html
http://zhidao.baixing.com/question/11523653.html
http://zhidao.baixing.com/question/11523655.html
http://zhidao.baixing.com/question/11523656.html
http://zhidao.baixing.com/question/11523657.html
http://zhidao.baixing.com/question/11523660.html
http://zhidao.baixing.com/question/11523661.html
http://zhidao.baixing.com/question/11523665.html
http://zhidao.baixing.com/question/11523666.html
http://zhidao.baixing.com/question/11523669.html
http://zhidao.baixing.com/question/11523670.html
http://zhidao.baixing.com/question/11523673.html
http://zhidao.baixing.com/question/11523676.html
http://zhidao.baixing.com/question/11523678.html
http://zhidao.baixing.com/question/11523680.html
http://zhidao.baixing.com/question/11523685.html
http://zhidao.baixing.com/question/11523689.html
http://zhidao.baixing.com/question/11523693.html
http://zhidao.baixing.com/question/11523697.html
http://zhidao.baixing.com/question/11523700.html
http://zhidao.baixing.com/question/11523707.html
http://zhidao.baixing.com/question/11523711.html
http://zhidao.baixing.com/question/11523716.html
http://zhidao.baixing.com/question/11523719.html
http://zhidao.baixing.com/question/11523722.html
http://zhidao.baixing.com/question/11523724.html
http://zhidao.baixing.com/question/11523726.html
http://zhidao.baixing.com/question/11523728.html
http://zhidao.baixing.com/question/11523729.html
http://zhidao.baixing.com/question/11523736.html
http://zhidao.baixing.com/question/11523740.html
http://zhidao.baixing.com/question/11523742.html
http://zhidao.baixing.com/question/11523744.html
http://zhidao.baixing.com/question/11523746.html
http://zhidao.baixing.com/question/11523748.html
http://zhidao.baixing.com/question/11523753.html
http://zhidao.baixing.com/question/11523756.html
http://zhidao.baixing.com/question/11523757.html
http://zhidao.baixing.com/question/11523758.html
http://zhidao.baixing.com/question/11523759.html
http://zhidao.baixing.com/question/11523761.html
http://zhidao.baixing.com/question/11523763.html
http://zhidao.baixing.com/question/11523765.html
http://zhidao.baixing.com/question/11523767.html
http://zhidao.baixing.com/question/11523770.html
http://zhidao.baixing.com/question/11523772.html
http://zhidao.baixing.com/question/11523778.html
http://zhidao.baixing.com/question/11523779.html
http://zhidao.baixing.com/question/11523780.html
http://zhidao.baixing.com/question/11523783.html
http://zhidao.baixing.com/question/11523787.html
http://zhidao.baixing.com/question/11523791.html
http://zhidao.baixing.com/question/11523792.html
http://zhidao.baixing.com/question/11523794.html
http://zhidao.baixing.com/question/11523795.html
http://zhidao.baixing.com/question/11523796.html
http://zhidao.baixing.com/question/11523798.html
http://zhidao.baixing.com/question/11523802.html
http://zhidao.baixing.com/question/11523804.html
http://zhidao.baixing.com/question/11523805.html
http://zhidao.baixing.com/question/11523807.html
http://zhidao.baixing.com/question/11523812.html
http://zhidao.baixing.com/question/11523816.html
http://zhidao.baixing.com/question/11523819.html
http://zhidao.baixing.com/question/11523820.html
http://zhidao.baixing.com/question/11523822.html
http://zhidao.baixing.com/question/11523825.html
http://zhidao.baixing.com/question/11523826.html
http://zhidao.baixing.com/question/11523828.html
http://zhidao.baixing.com/question/11523830.html
http://zhidao.baixing.com/question/11523832.html
http://zhidao.baixing.com/question/11523834.html
http://zhidao.baixing.com/question/11523835.html
http://zhidao.baixing.com/question/11523839.html
http://zhidao.baixing.com/question/11523841.html
http://zhidao.baixing.com/question/11523845.html
http://zhidao.baixing.com/question/11523848.html
http://zhidao.baixing.com/question/11523849.html
http://zhidao.baixing.com/question/11523850.html
http://zhidao.baixing.com/question/11523851.html
http://zhidao.baixing.com/question/11523859.html
http://zhidao.baixing.com/question/11523861.html
http://zhidao.baixing.com/question/11523863.html
http://zhidao.baixing.com/question/11523864.html
http://zhidao.baixing.com/question/11523865.html
http://zhidao.baixing.com/question/11523867.html
http://zhidao.baixing.com/question/11523869.html
http://zhidao.baixing.com/question/11523874.html
http://zhidao.baixing.com/question/11523879.html
http://zhidao.baixing.com/question/11523884.html
http://zhidao.baixing.com/question/11523885.html
http://zhidao.baixing.com/question/11523887.html
http://zhidao.baixing.com/question/11523889.html
http://zhidao.baixing.com/question/11523891.html
http://zhidao.baixing.com/question/11523894.html
http://zhidao.baixing.com/question/11523895.html
http://zhidao.baixing.com/question/11523897.html
http://zhidao.baixing.com/question/11523899.html
http://zhidao.baixing.com/question/11523900.html
http://zhidao.baixing.com/question/11523905.html
http://zhidao.baixing.com/question/11523907.html
http://zhidao.baixing.com/question/11523911.html
http://zhidao.baixing.com/question/11523917.html
http://zhidao.baixing.com/question/11523919.html
http://zhidao.baixing.com/question/11523922.html
http://zhidao.baixing.com/question/11523923.html
http://zhidao.baixing.com/question/11523925.html
http://zhidao.baixing.com/question/11523928.html
http://zhidao.baixing.com/question/11523931.html
http://zhidao.baixing.com/question/11523932.html
http://zhidao.baixing.com/question/11523935.html
http://zhidao.baixing.com/question/11523939.html
http://zhidao.baixing.com/question/11523942.html
http://zhidao.baixing.com/question/11523945.html
http://zhidao.baixing.com/question/11523947.html
http://zhidao.baixing.com/question/11523948.html
http://zhidao.baixing.com/question/11523950.html
http://zhidao.baixing.com/question/11523958.html
http://zhidao.baixing.com/question/11523965.html
http://zhidao.baixing.com/question/11523970.html
http://zhidao.baixing.com/question/11523975.html
http://zhidao.baixing.com/question/11523977.html
http://zhidao.baixing.com/question/11523979.html
http://zhidao.baixing.com/question/11523980.html
http://zhidao.baixing.com/question/11523982.html
http://zhidao.baixing.com/question/11523988.html
http://zhidao.baixing.com/question/11523993.html
http://zhidao.baixing.com/question/11523997.html
http://zhidao.baixing.com/question/11523998.html
http://zhidao.baixing.com/question/11524005.html
http://zhidao.baixing.com/question/11524008.html
http://zhidao.baixing.com/question/11524009.html
http://zhidao.baixing.com/question/11524017.html
http://zhidao.baixing.com/question/11524023.html
http://zhidao.baixing.com/question/11524025.html
http://zhidao.baixing.com/question/11524029.html
http://zhidao.baixing.com/question/11524031.html
http://zhidao.baixing.com/question/11524032.html
http://zhidao.baixing.com/question/11524033.html
http://zhidao.baixing.com/question/11524035.html
http://zhidao.baixing.com/question/11524040.html
http://zhidao.baixing.com/question/11524045.html
http://zhidao.baixing.com/question/11524048.html
http://zhidao.baixing.com/question/11524053.html
http://zhidao.baixing.com/question/11524055.html
http://zhidao.baixing.com/question/11524059.html
http://zhidao.baixing.com/question/11524063.html
http://zhidao.baixing.com/question/11524065.html
http://zhidao.baixing.com/question/11524067.html
http://zhidao.baixing.com/question/11524069.html
http://zhidao.baixing.com/question/11524071.html
http://zhidao.baixing.com/question/11524077.html
http://zhidao.baixing.com/question/11524082.html
http://zhidao.baixing.com/question/11524084.html
http://zhidao.baixing.com/question/11524087.html
http://zhidao.baixing.com/question/11524088.html
http://zhidao.baixing.com/question/11524089.html
http://zhidao.baixing.com/question/11524092.html
http://zhidao.baixing.com/question/11524094.html
http://zhidao.baixing.com/question/11524097.html
http://zhidao.baixing.com/question/11524098.html
http://zhidao.baixing.com/question/11524099.html
http://zhidao.baixing.com/question/11524100.html
http://zhidao.baixing.com/question/11524104.html
http://zhidao.baixing.com/question/11524106.html
http://zhidao.baixing.com/question/11524113.html
http://zhidao.baixing.com/question/11524114.html
http://zhidao.baixing.com/question/11524115.html
http://zhidao.baixing.com/question/11524118.html
http://zhidao.baixing.com/question/11524121.html
http://zhidao.baixing.com/question/11524131.html
http://zhidao.baixing.com/question/11524133.html
http://zhidao.baixing.com/question/11524136.html
http://zhidao.baixing.com/question/11524137.html
http://zhidao.baixing.com/question/11524139.html
http://zhidao.baixing.com/question/11524141.html
http://zhidao.baixing.com/question/11524142.html
http://zhidao.baixing.com/question/11524144.html
http://zhidao.baixing.com/question/11524149.html
http://zhidao.baixing.com/question/11524151.html
http://zhidao.baixing.com/question/11524156.html
http://zhidao.baixing.com/question/11524159.html
http://zhidao.baixing.com/question/11524160.html
http://zhidao.baixing.com/question/11524162.html
http://zhidao.baixing.com/question/11524163.html
http://zhidao.baixing.com/question/11524165.html
http://zhidao.baixing.com/question/11524169.html
http://zhidao.baixing.com/question/11524172.html
http://zhidao.baixing.com/question/11524177.html
http://zhidao.baixing.com/question/11524179.html
http://zhidao.baixing.com/question/11524183.html
http://zhidao.baixing.com/question/11524186.html
http://zhidao.baixing.com/question/11524188.html
http://zhidao.baixing.com/question/11524189.html
http://zhidao.baixing.com/question/11524193.html
http://zhidao.baixing.com/question/11524195.html
http://zhidao.baixing.com/question/11524196.html
http://zhidao.baixing.com/question/11524197.html
http://zhidao.baixing.com/question/11524199.html
http://zhidao.baixing.com/question/11524200.html
http://zhidao.baixing.com/question/11524204.html
http://zhidao.baixing.com/question/11524206.html
http://zhidao.baixing.com/question/11524208.html
http://zhidao.baixing.com/question/11524210.html
http://zhidao.baixing.com/question/11524211.html
http://zhidao.baixing.com/question/11524213.html
http://zhidao.baixing.com/question/11524216.html
http://zhidao.baixing.com/question/11524217.html
http://zhidao.baixing.com/question/11524218.html
http://zhidao.baixing.com/question/11524220.html
http://zhidao.baixing.com/question/11524221.html
http://zhidao.baixing.com/question/11524222.html
http://zhidao.baixing.com/question/11524224.html
http://zhidao.baixing.com/question/11524227.html
http://zhidao.baixing.com/question/11524228.html
http://zhidao.baixing.com/question/11524229.html
http://zhidao.baixing.com/question/11524230.html
http://zhidao.baixing.com/question/11524231.html
http://zhidao.baixing.com/question/11524233.html
http://zhidao.baixing.com/question/11524235.html
http://zhidao.baixing.com/question/11524238.html
http://zhidao.baixing.com/question/11524239.html
http://zhidao.baixing.com/question/11524242.html
http://zhidao.baixing.com/question/11524243.html
http://zhidao.baixing.com/question/11524245.html
http://zhidao.baixing.com/question/11524246.html
http://zhidao.baixing.com/question/11524247.html
http://zhidao.baixing.com/question/11524248.html
http://zhidao.baixing.com/question/11524251.html
http://zhidao.baixing.com/question/11524255.html
http://zhidao.baixing.com/question/11524259.html
http://zhidao.baixing.com/question/11524260.html
http://zhidao.baixing.com/question/11524262.html
http://zhidao.baixing.com/question/11524264.html
http://zhidao.baixing.com/question/11524266.html
http://zhidao.baixing.com/question/11524267.html
http://zhidao.baixing.com/question/11524268.html
http://zhidao.baixing.com/question/11524269.html
http://zhidao.baixing.com/question/11524271.html
http://zhidao.baixing.com/question/11524272.html
http://zhidao.baixing.com/question/11524273.html
http://zhidao.baixing.com/question/11524274.html
http://zhidao.baixing.com/question/11524277.html
http://zhidao.baixing.com/question/11524278.html
http://zhidao.baixing.com/question/11524279.html
http://zhidao.baixing.com/question/11524280.html
http://zhidao.baixing.com/question/11524281.html
http://zhidao.baixing.com/question/11524282.html
http://zhidao.baixing.com/question/11524283.html
http://zhidao.baixing.com/question/11524285.html
http://zhidao.baixing.com/question/11524288.html
http://zhidao.baixing.com/question/11524289.html
http://zhidao.baixing.com/question/11524290.html
http://zhidao.baixing.com/question/11524291.html
http://zhidao.baixing.com/question/11524294.html
http://zhidao.baixing.com/question/11524295.html
http://zhidao.baixing.com/question/11524297.html
http://zhidao.baixing.com/question/11524298.html
http://zhidao.baixing.com/question/11524299.html
http://zhidao.baixing.com/question/11524301.html
http://zhidao.baixing.com/question/11524302.html
http://zhidao.baixing.com/question/11524304.html
http://zhidao.baixing.com/question/11524305.html
http://zhidao.baixing.com/question/11524308.html
http://zhidao.baixing.com/question/11524309.html
http://zhidao.baixing.com/question/11524312.html
http://zhidao.baixing.com/question/11524313.html
http://zhidao.baixing.com/question/11524314.html
http://zhidao.baixing.com/question/11524315.html
http://zhidao.baixing.com/question/11524316.html
http://zhidao.baixing.com/question/11524317.html
http://zhidao.baixing.com/question/11524319.html
http://zhidao.baixing.com/question/11524320.html
http://zhidao.baixing.com/question/11524321.html
http://zhidao.baixing.com/question/11524322.html
http://zhidao.baixing.com/question/11524323.html
http://zhidao.baixing.com/question/11524324.html
http://zhidao.baixing.com/question/11524325.html
http://zhidao.baixing.com/question/11524328.html
http://zhidao.baixing.com/question/11524329.html
http://zhidao.baixing.com/question/11524330.html
http://zhidao.baixing.com/question/11524332.html
http://zhidao.baixing.com/question/11524334.html
http://zhidao.baixing.com/question/11524336.html
http://zhidao.baixing.com/question/11524338.html
http://zhidao.baixing.com/question/11524339.html
http://zhidao.baixing.com/question/11524341.html
http://zhidao.baixing.com/question/11524342.html
http://zhidao.baixing.com/question/11524343.html
http://zhidao.baixing.com/question/11524345.html
http://zhidao.baixing.com/question/11524347.html
http://zhidao.baixing.com/question/11524349.html
http://zhidao.baixing.com/question/11524350.html
http://zhidao.baixing.com/question/11524351.html
http://zhidao.baixing.com/question/11524352.html
http://zhidao.baixing.com/question/11524353.html
http://zhidao.baixing.com/question/11524354.html
http://zhidao.baixing.com/question/11524356.html
http://zhidao.baixing.com/question/11524357.html
http://zhidao.baixing.com/question/11524358.html
http://zhidao.baixing.com/question/11524359.html
http://zhidao.baixing.com/question/11524361.html
http://zhidao.baixing.com/question/11524362.html
http://zhidao.baixing.com/question/11524364.html
http://zhidao.baixing.com/question/11524366.html
http://zhidao.baixing.com/question/11524370.html
http://zhidao.baixing.com/question/11524373.html
http://zhidao.baixing.com/question/11524374.html
http://zhidao.baixing.com/question/11524375.html
http://zhidao.baixing.com/question/11524376.html
http://zhidao.baixing.com/question/11524377.html
http://zhidao.baixing.com/question/11524378.html
http://zhidao.baixing.com/question/11524380.html
http://zhidao.baixing.com/question/11524381.html
http://zhidao.baixing.com/question/11524382.html
http://zhidao.baixing.com/question/11524385.html
http://zhidao.baixing.com/question/11524387.html
http://zhidao.baixing.com/question/11524388.html
http://zhidao.baixing.com/question/11524389.html
http://zhidao.baixing.com/question/11524390.html
http://zhidao.baixing.com/question/11524391.html
http://zhidao.baixing.com/question/11524392.html
http://zhidao.baixing.com/question/11524393.html
http://zhidao.baixing.com/question/11524394.html
http://zhidao.baixing.com/question/11524395.html
http://zhidao.baixing.com/question/11524397.html
http://zhidao.baixing.com/question/11524398.html
http://zhidao.baixing.com/question/11524400.html
http://zhidao.baixing.com/question/11524401.html
http://zhidao.baixing.com/question/11524403.html
http://zhidao.baixing.com/question/11524404.html
http://zhidao.baixing.com/question/11524406.html
http://zhidao.baixing.com/question/11524407.html
http://zhidao.baixing.com/question/11524408.html
http://zhidao.baixing.com/question/11524409.html
http://zhidao.baixing.com/question/11524410.html
http://zhidao.baixing.com/question/11524411.html
<img src ="http://www.cppblog.com/sunicdavy/aggbug/217893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sunicdavy/" target="_blank">战魂小筑</a> 2021-12-27 19:02 <a href="http://www.cppblog.com/sunicdavy/archive/2021/12/27/217893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Entity-Component-System框架心得</title><link>http://www.cppblog.com/sunicdavy/archive/2018/11/30/216103.html</link><dc:creator>战魂小筑</dc:creator><author>战魂小筑</author><pubDate>Fri, 30 Nov 2018 10:01:00 GMT</pubDate><guid>http://www.cppblog.com/sunicdavy/archive/2018/11/30/216103.html</guid><wfw:comment>http://www.cppblog.com/sunicdavy/comments/216103.html</wfw:comment><comments>http://www.cppblog.com/sunicdavy/archive/2018/11/30/216103.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sunicdavy/comments/commentRss/216103.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sunicdavy/services/trackbacks/216103.html</trackback:ping><description><![CDATA[<p style="margin: 0px 0px 1em; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">近期在游戏demo中试验ECS， 深入研究Unity官方的ECS框架和第三方Entitas框架， 分享下使用ECS的心得。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">Unity在2018版中加入了ECS系统， 但处于小白鼠阶段。默认不是Unity的一部分， 需要手动下载代码并导入Packages（新特性）。官方提供海豚例子， 但除此之外例子和资料非常少。所以完全无法，也不敢在demo中贸然引入这种系统，所以放弃官方ECS系统。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">第三方的Entitas（<span style="border-bottom: 1px dashed gray;"><a href="http://link.zhihu.com/?target=https%3A//github.com/sschmid/Entitas-CSharp"  external"="" target="_blank" rel="nofollow noreferrer" data-za-detail-view-id="1043" style="text-decoration-line: none; cursor: pointer; border-bottom: 1px solid gray;"><span style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 0px; line-height: 0; font-family: a; color: transparent; text-shadow: none; background-color: transparent;">https://</span>github.com/sschmid/Enti<span style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 0px; line-height: 0; font-family: a; color: transparent; text-shadow: none; background-color: transparent;">tas-CSharp</span></a></span>）ECS框架从2015年就开始在各地演讲中介绍。整体框架基于代码生成， 能解决一部分的代码爆炸问题， 而且性能也要好一些。例子，介绍非常丰富，例子虽然基于不同版本的Entitas，特性支持和最新版差不太多， 只是写法有细微差异， 对于理解来说无碍。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">经过1~2天的改造， 终于将demo从传统Unity写法改造为ECS标准写法，新增了46个文件， 而传统逻辑一共只有16个文件，大概对比下ECS的特点和差异。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><span style="font-weight: 600;">Entitas的ECS系统</span></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">1. 本来在一个对象中添加一个类字段的过程，ECS需要添加一个类代表Component，并且代码生成。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">这个字段一般用于描述对象的资源，处理显示的GameObject， 表示对象的类型等。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">2. 本来一个对象的业务逻辑处理过程直接用方法解决的， ECS需要新加一个System，而操作对象需要使用Filter或Group查询获得。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">3. 一系列的操作， 需要拆分为多个System和Component拆分处理。如果System顺序不对， 会造成一些诡异的bug。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">4. Component不仅仅是Model承载体， 也可以是参数的数据结构。参数Component通过Entity传递到System处理。 例如： 通过ECS创建一个方块的过程，使用CreateTileComponent，包含创建Tile的位置， 创建Entity并添加CreateTileComponent， 在CreateTileSystem中处理就创建了Tile，处理完成时， 需要将传入的Entity.Destroy掉。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">6. Entity上修改Component的过程， 会触发事件。修改的过程需要使用RelaceXXX，XXX表示组件名。组件可以频繁修改， 不用担心添加和删除组件过程的性能， Entitas底层处理性能只相当于指针赋值的性能。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><span style="font-weight: 600;">ECS像什么？</span></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">1. ECS中的System类似触发器系统（Event-Condition-Action），其中，Event对应Entitas的GetTrigger+Collector，表示触发事件。Condition对应Filter表示在事件来源对象中找到需要的对象。 Action对应Execute，表示实际的操作。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">2. ECS中的Component类似不用lua扩展的Redis或者不用存储过程的MySQL， 纯粹纯数据， 而不能对数据有任何封装操作。没有lua和存储过程支持的db写起来还是比较费劲的，但ECS就是那么的纯。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">3. ECS中的Entity很尴尬，因为Component是按类别连续存储的以保证性能。 逻辑又需要Entity组合成逻辑需要的复合对象。 两边都要照顾，所以这种设计就让代码量巨增，可读性下降。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><span style="font-weight: 600;">ECS企图用一套框架灭掉设计模式</span></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">1. 单件（Singleton）在Entitas用Unique标签标记Component， 在Context中就是唯一的， 其实也就是Singleton。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">2. ECS干掉了传统的工厂模式，底层统一对对象（Entity）和属性（Component）统一管理。需要按Component中的值找回Entity时， 可以使用EntityIndex。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">3. Entity携带不同的组件时，整个创建和销毁过程被记录并恢复，其实就是Command模式</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><span style="font-weight: 600;">ECS适合做UI框架（类似MVVM，MVC,MVP）么？</span></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">ECS不是专用的UI框架，但是可以对不同系统和数据间解耦。传统代码中数据修改后的Callback，ECS也可以用Listener做， 但Listener因为能保存数据， 就需要用Component保存。 所以你需要面对的是，一个Button，响应创建一个参数用的Component和System，还要为数据改变写一套ListenComponent和Listener处理的System，酸爽吧？</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><span style="font-weight: 600;">Minecraft适合ECS来做么？</span></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">可以，性能应该能提升不少，但是代码会更繁琐，特别像Java这种啰嗦语言配上ECS这种啰嗦框架，估计代码量翻翻还是很轻松的。MC属于特殊类型的游戏，适合特殊领域特别优化，也就是专门为方块做出特别的设计来做优化。ECS属于通用框架，即便性能OK，但是代码未必能有良好的可读性。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><span style="font-weight: 600;">体量小的游戏适合用ECS来做么？</span></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">可以，但不建议。特别是只有几个人维护的工程，贸然上ECS系统，会让系统变的极为复杂。当然你会说，如果开发到后期，传统开发模式会导致代码会乱，ECS会好些吧。掌握ECS也不是一天两天的事情，不熟悉ECS的程序员设计出来的系统获得的优势可能还不如用传统设计方法好呢。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">架构解决的是人的问题， 人都有问题，用什么框架都没办法。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><span style="font-weight: 600;">到底什么项目适合用ECS？</span></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">1. 大量的小个体不断的生成和销毁以及显示，例如： 攻城战中，要体现每个角色的移动，战斗。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">2. 多于5个人编写核心战斗逻辑。互相协作和模块切分，需要一个大家都能信服的框架，ECS可以选择。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">P.S.</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><span style="font-weight: 600;">不要造ECS的轮子！</span></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">很多同学看了ECS基本原理，在没有深入使用过任何ECS系统时马上操刀造轮子。ECS系统确实看起来简单。实际造下来你会发现，性能非常糟糕以及不知道一些逻辑如何用ECS来解决。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><span style="font-weight: 600;">总结：</span></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">1. ECS确实为性能而生，没有并发加持性能的ECS都是耍流氓，要快就要快到极致。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">2. Unity中，ECS并发能扩展CPU的利用率，但是GPU的性能依然还是DrawCall优化那一套，别期望ECS会颠覆Unity，性能也不会快到飞起，关键还是要看具体的项目和人。</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">3. ECS是万能框架，但不全能。传统架构和设计思想也不是一无是处，熟啥用啥，怎么快怎么来！<br /><br /></p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;">无耻的广告链接，请各位支持</p><p style="margin: 1em 0px; color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; background-color: #ffffff;"><a href="http://link.zhihu.com/?target=https%3A//item.jd.com/12380444.html" wrap=""  external"="" target="_blank" rel="nofollow noreferrer" data-za-detail-view-id="1043" style="text-decoration-line: none; cursor: pointer; border-bottom: 1px solid gray;">《Go语言从入门到进阶实战（视频教学版）》(徐波)【摘要 书评 试读】- 京东图书</a></p><img src ="http://www.cppblog.com/sunicdavy/aggbug/216103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sunicdavy/" target="_blank">战魂小筑</a> 2018-11-30 18:01 <a href="http://www.cppblog.com/sunicdavy/archive/2018/11/30/216103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unity3D粒子系统屏幕外不更新不渲染问题</title><link>http://www.cppblog.com/sunicdavy/archive/2016/08/01/214082.html</link><dc:creator>战魂小筑</dc:creator><author>战魂小筑</author><pubDate>Mon, 01 Aug 2016 07:23:00 GMT</pubDate><guid>http://www.cppblog.com/sunicdavy/archive/2016/08/01/214082.html</guid><wfw:comment>http://www.cppblog.com/sunicdavy/comments/214082.html</wfw:comment><comments>http://www.cppblog.com/sunicdavy/archive/2016/08/01/214082.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sunicdavy/comments/commentRss/214082.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sunicdavy/services/trackbacks/214082.html</trackback:ping><description><![CDATA[<p>这是一个Unity3D元老级bug, 表现就是:&nbsp; 角色在屏幕边缘放特效,&nbsp; 离开屏幕持续一段时间后再回到屏幕后, 发现特效重新播放. 显然这是错误的效果</p> <p>解决方法:</p> <p>在ParticleSystem组件上勾选SubEmitter, 不要问为什么, 做就好</p> <p>相关官方链接</p> <p><a title="http://answers.unity3d.com/questions/218369/shuriken-particle-system-not-rendering-particles-w.html" href="http://answers.unity3d.com/questions/218369/shuriken-particle-system-not-rendering-particles-w.html">http://answers.unity3d.com/questions/218369/shuriken-particle-system-not-rendering-particles-w.html</a></p> <p>&nbsp;</p> <p>天煞的, 4.X程序无法访问粒子系统的参数, 所以只能辛苦美术兄弟们了</p><img src ="http://www.cppblog.com/sunicdavy/aggbug/214082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sunicdavy/" target="_blank">战魂小筑</a> 2016-08-01 15:23 <a href="http://www.cppblog.com/sunicdavy/archive/2016/08/01/214082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>苹果ios应用的网络ipv6适配攻略</title><link>http://www.cppblog.com/sunicdavy/archive/2016/06/16/213731.html</link><dc:creator>战魂小筑</dc:creator><author>战魂小筑</author><pubDate>Thu, 16 Jun 2016 06:18:00 GMT</pubDate><guid>http://www.cppblog.com/sunicdavy/archive/2016/06/16/213731.html</guid><wfw:comment>http://www.cppblog.com/sunicdavy/comments/213731.html</wfw:comment><comments>http://www.cppblog.com/sunicdavy/archive/2016/06/16/213731.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sunicdavy/comments/commentRss/213731.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sunicdavy/services/trackbacks/213731.html</trackback:ping><description><![CDATA[<p>苹果要求在2016年6月1日后新的app必须支持ipv6网络, 技术发展靠苹果果然没错, 但开发者还是要开始忙起来了<br>这里介绍下Unity3D的适配的一些经验 <h3>基本注意点</h3> <ul> <li>ios ipv6适配无需修改服务器, 也就是说, 如果你的服务器依然是ipv4的也是可以使用的</li> <li>苹果的适配方案是将ipv4的地址转换为ipv6, 到了路由层再转回去继续利用ipv4网络传输</li></ul> <h3>测试网络环境搭建</h3> <p><font color="#ffffff">转载请注明:</font><a title="http://www.cppblog.com/sunicdavy" href="http://www.cppblog.com/sunicdavy"><font color="#ffffff">http://www.cppblog.com/sunicdavy</font></a><font color="#ffffff">战魂小筑</font> <p>网上有很多翻译了苹果官方的搭建ipv6测试网络环境的文章, 例如:<br><a href="http://www.cocoachina.com/ios/20160525/16431.html">http://www.cocoachina.com/ios/20160525/16431.html</a><br>注意以下几点 <ul> <li> <p>无需路由器支持ipv6, 但猫(modem)必须要支持ipv6. 因为现在大多数都是光猫<br>以下截图是光猫管理端<br><a href="http://www.cppblog.com/images/cppblog_com/sunicdavy/Windows-Live-Writer/d3db4a514dd7_AD6A/3440e3f9-12de-435b-85ab-a7a3be8b384b%5B6%5D_1.jpg"><img title="3440e3f9-12de-435b-85ab-a7a3be8b384b[6]" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="3440e3f9-12de-435b-85ab-a7a3be8b384b[6]" src="http://www.cppblog.com/images/cppblog_com/sunicdavy/Windows-Live-Writer/d3db4a514dd7_AD6A/3440e3f9-12de-435b-85ab-a7a3be8b384b%5B6%5D_thumb_1.jpg" width="354" height="408"></a><br>光猫里的ipv6支持默认是关闭的, 所以需要手动打开, 按默认值配置即可</p> <li> <p>请确认mac os系统必须是osx 10.11以后的版本才可以打开NAT64</p> <li> <p>正确连接mac的ios设备应是如下截图示意<br><a href="http://www.cppblog.com/images/cppblog_com/sunicdavy/Windows-Live-Writer/d3db4a514dd7_AD6A/91f54476-4b5d-4585-a364-0da2139774c1%5B6%5D_1.jpg"><img title="91f54476-4b5d-4585-a364-0da2139774c1[6]" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="91f54476-4b5d-4585-a364-0da2139774c1[6]" src="http://www.cppblog.com/images/cppblog_com/sunicdavy/Windows-Live-Writer/d3db4a514dd7_AD6A/91f54476-4b5d-4585-a364-0da2139774c1%5B6%5D_thumb_1.jpg" width="296" height="508"></a></p> <li>默认连接上wifi时看连接信息时, 一般只会有红色DNS地址或者根本不显示  <li>只有在第一次访问网络, 例如打开浏览器进入任意网站时, 才会显示上面的几条信息  <li>如果只有DNS没有IP地址和子网掩码, 一般是光猫没有打开ipv6的DHCP, 没有分配IP  <li>还有一种测试ipv6 DHCP是否正常工作的方法: 关闭NAT64时可以上网, 但打开NAT64无法上网</li></ul> <p><font color="#ffffff">转载请注明:</font><a title="http://www.cppblog.com/sunicdavy" href="http://www.cppblog.com/sunicdavy"><font color="#ffffff">http://www.cppblog.com/sunicdavy</font></a><font color="#ffffff">战魂小筑</font></p> <h3>Unity3D的Socket适配</h3> <p>WWW类本身已经支持了IPV6, 无需处理, 这里讲解使用C#原生Socket的处理 <ul> <li>测试用的设备的iOS版本必须是9.3以上的  <li>Socket构造时, AddressFamily 设置为InterNetworkV6时只支持ipv6网络, 传入InterNetwork时只支持ipv4网络  <li> <p>4.7.2和5.4.3的当前版本在mono层并未支持ipv6代码适配的核心函数getaddrinfo, 因此需要通过oc层做转换, 以下是代码<br>这段代码将getaddrinfo的地址转换成一个完整字符串, 格式是:<br>ipv4|ipv4地址|ipv6|ipv6地址|</p></li></ul> <p>P.S. copyStr这种用法参考了<a href="http://www.codeinsect.net/blog/2016/05/26/unity-ipv6-socket-%E6%94%AF%E6%8C%81%EF%BC%8C%E5%B7%B2%E6%B5%8B%E8%AF%95%E9%80%9A%E8%BF%87/">http://www.codeinsect.net/blog/2016/05/26/unity-ipv6-socket-%E6%94%AF%E6%8C%81%EF%BC%8C%E5%B7%B2%E6%B5%8B%E8%AF%95%E9%80%9A%E8%BF%87/</a><br>会造成内存泄露, 如果有更好的方法欢迎反馈 <p><font color="#ffffff">转载请注明:</font><a title="http://www.cppblog.com/sunicdavy" href="http://www.cppblog.com/sunicdavy"><font color="#ffffff">http://www.cppblog.com/sunicdavy</font></a><font color="#ffffff">战魂小筑</font> <p>iosaddrinfo.mm<pre><p><div class="csharpcode"><pre class="alt"><span class="lnum">   1:  </span>#include &lt;sys/socket.h&gt;</pre><pre><span class="lnum">   2:  </span>#include &lt;netdb.h&gt;</pre><pre class="alt"><span class="lnum">   3:  </span>#include &lt;arpa/inet.h&gt;</pre><pre><span class="lnum">   4:  </span>#include &lt;err.h&gt;</pre><pre class="alt"><span class="lnum">   5:  </span><span class="preproc">#define</span> OUTSTR_SIZE 4096</pre><pre><span class="lnum">   6:  </span><span class="kwrd">extern</span> <span class="str">"C"</span></pre><pre class="alt"><span class="lnum">   7:  </span>{</pre><pre><span class="lnum">   8:  </span>    <span class="kwrd">const</span> <span class="kwrd">char</span>* copyStr( <span class="kwrd">const</span> <span class="kwrd">char</span>* str )</pre><pre class="alt"><span class="lnum">   9:  </span>    {</pre><pre><span class="lnum">  10:  </span>        <span class="kwrd">char</span>* s = (<span class="kwrd">char</span>*)malloc(strlen(str) + 1);</pre><pre class="alt"><span class="lnum">  11:  </span>        strcpy(s, str);</pre><pre><span class="lnum">  12:  </span>        <span class="kwrd">return</span> s;</pre><pre class="alt"><span class="lnum">  13:  </span>    }</pre><pre><span class="lnum">  14:  </span>    <span class="kwrd">const</span> <span class="kwrd">char</span>* IOSGetAddressInfo(<span class="kwrd">const</span> <span class="kwrd">char</span> *host )</pre><pre class="alt"><span class="lnum">  15:  </span>    {</pre><pre><span class="lnum">  16:  </span>        <span class="kwrd">if</span>( NULL == host )</pre><pre class="alt"><span class="lnum">  17:  </span>            <span class="kwrd">return</span> copyStr(<span class="str">"ERROR_HOSTNULL"</span>);</pre><pre><span class="lnum">  18:  </span>        <span class="kwrd">char</span> outstr[OUTSTR_SIZE];</pre><pre class="alt"><span class="lnum">  19:  </span>        <span class="kwrd">struct</span> addrinfo hints, *res, *res0;</pre><pre><span class="lnum">  20:  </span>        memset(&amp;hints, 0, <span class="kwrd">sizeof</span>(hints));</pre><pre class="alt"><span class="lnum">  21:  </span>        hints.ai_family = PF_UNSPEC;</pre><pre><span class="lnum">  22:  </span>        hints.ai_socktype = SOCK_STREAM;</pre><pre class="alt"><span class="lnum">  23:  </span>        hints.ai_flags = AI_DEFAULT;</pre><pre><span class="lnum">  24:  </span>        printf(<span class="str">"getaddrinfo: %s\n"</span>, host);</pre><pre class="alt"><span class="lnum">  25:  </span>        <span class="kwrd">int</span> error = getaddrinfo(host, <span class="str">"http"</span>, &amp;hints, &amp;res0);</pre><pre><span class="lnum">  26:  </span>        <span class="kwrd">if</span> (error != 0 )</pre><pre class="alt"><span class="lnum">  27:  </span>        {</pre><pre><span class="lnum">  28:  </span>            printf(<span class="str">"getaddrinfo: %s\n"</span>, gai_strerror(error));</pre><pre class="alt"><span class="lnum">  29:  </span>            <span class="kwrd">return</span> copyStr(<span class="str">"ERROR_GETADDR"</span>);</pre><pre><span class="lnum">  30:  </span>        }</pre><pre class="alt"><span class="lnum">  31:  </span>        memset( outstr, 0, <span class="kwrd">sizeof</span>(<span class="kwrd">char</span>)*OUTSTR_SIZE );</pre><pre><span class="lnum">  32:  </span>        <span class="kwrd">struct</span> sockaddr_in6* addr6;</pre><pre class="alt"><span class="lnum">  33:  </span>        <span class="kwrd">struct</span> sockaddr_in* addr;</pre><pre><span class="lnum">  34:  </span>        <span class="kwrd">const</span> <span class="kwrd">char</span>* solvedaddr;</pre><pre class="alt"><span class="lnum">  35:  </span>        <span class="kwrd">char</span> ipbuf[32];</pre><pre><span class="lnum">  36:  </span>        <span class="kwrd">for</span> (res = res0; res; res = res-&gt;ai_next)</pre><pre class="alt"><span class="lnum">  37:  </span>        {</pre><pre><span class="lnum">  38:  </span>            <span class="kwrd">if</span> (res-&gt;ai_family == AF_INET6)</pre><pre class="alt"><span class="lnum">  39:  </span>            {</pre><pre><span class="lnum">  40:  </span>                addr6 =( <span class="kwrd">struct</span> sockaddr_in6*)res-&gt;ai_addr;</pre><pre class="alt"><span class="lnum">  41:  </span>                solvedaddr = inet_ntop(AF_INET6, &amp;addr6-&gt;sin6_addr, ipbuf, <span class="kwrd">sizeof</span>(ipbuf));</pre><pre><span class="lnum">  42:  </span>                strcat ( outstr, <span class="str">"ipv6|"</span>);</pre><pre class="alt"><span class="lnum">  43:  </span>                strcat ( outstr, solvedaddr);</pre><pre><span class="lnum">  44:  </span>            }</pre><pre class="alt"><span class="lnum">  45:  </span>            <span class="kwrd">else</span></pre><pre><span class="lnum">  46:  </span>            {</pre><pre class="alt"><span class="lnum">  47:  </span>                addr =( <span class="kwrd">struct</span> sockaddr_in*)res-&gt;ai_addr;</pre><pre><span class="lnum">  48:  </span>                solvedaddr = inet_ntop(AF_INET, &amp;addr-&gt;sin_addr, ipbuf, <span class="kwrd">sizeof</span>(ipbuf));</pre><pre class="alt"><span class="lnum">  49:  </span>                strcat ( outstr, <span class="str">"ipv4|"</span>);</pre><pre><span class="lnum">  50:  </span>                strcat ( outstr, solvedaddr);</pre><pre class="alt"><span class="lnum">  51:  </span>            }</pre><pre><span class="lnum">  52:  </span>            strcat ( outstr, <span class="str">"|"</span>);</pre><pre class="alt"><span class="lnum">  53:  </span>        }</pre><pre><span class="lnum">  54:  </span>        <span class="kwrd">return</span> copyStr(outstr);</pre><pre class="alt"><span class="lnum">  55:  </span>    }</pre><pre><span class="lnum">  56:  </span>}</pre><pre><font color="#ffffff">转载请注明:</font><a title="http://www.cppblog.com/sunicdavy" href="http://www.cppblog.com/sunicdavy"><font color="#ffffff">http://www.cppblog.com/sunicdavy</font></a><font color="#ffffff">战魂小筑</font></pre></div><style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style></pre>
<p>iosaddrinfo.h<pre><p><div class="csharpcode"><pre class="alt"><span class="lnum">   1:  </span><span class="preproc">#pragma</span> once</pre><pre><span class="lnum">   2:  </span><span class="kwrd">extern</span> <span class="str">"C"</span>{</pre><pre class="alt"><span class="lnum">   3:  </span>    <span class="kwrd">const</span> <span class="kwrd">char</span>* IOSGetAddressInfo(<span class="kwrd">const</span> <span class="kwrd">char</span> *host );</pre><pre><span class="lnum">   4:  </span>}</pre></div><style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style></pre>
<ul>
<li>C#层的处理假设多个地址中都是统一的地址类型,要么全是v4要么全是v6<br>返回给定的host内多个IP地址, 可以供处理复杂的北网通,南电信问题</li></ul><pre><p><div class="csharpcode"><pre class="alt"><span class="lnum">   1:  </span><span class="kwrd">using</span> System;</pre><pre><span class="lnum">   2:  </span><span class="kwrd">using</span> System.Net;</pre><pre class="alt"><span class="lnum">   3:  </span><span class="kwrd">using</span> System.Net.Sockets;</pre><pre><span class="lnum">   4:  </span><span class="kwrd">using</span> System.Runtime.InteropServices;</pre><pre class="alt"><span class="lnum">   5:  </span><span class="kwrd">using</span> UnityEngine;</pre><pre><span class="lnum">   6:  </span><span class="kwrd">using</span> System.Collections;</pre><pre class="alt"><span class="lnum">   7:  </span><span class="kwrd">using</span> System.Collections.Generic;</pre><pre><span class="lnum">   8:  </span><span class="kwrd">public</span> <span class="kwrd">class</span> IOSIPV6</pre><pre class="alt"><span class="lnum">   9:  </span>{</pre><pre><span class="lnum">  10:  </span>    [DllImport(<span class="str">"__Internal"</span>)]</pre><pre class="alt"><span class="lnum">  11:  </span>    <span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">extern</span> <span class="kwrd">string</span> IOSGetAddressInfo(<span class="kwrd">string</span> host );  </pre><pre><span class="lnum">  12:  </span>    <span class="kwrd">public</span> <span class="kwrd">static</span> IPAddress[] ResolveIOSAddress(<span class="kwrd">string</span> host, <span class="kwrd">out</span> AddressFamily af)</pre><pre class="alt"><span class="lnum">  13:  </span>    {</pre><pre><span class="lnum">  14:  </span>        af = AddressFamily.InterNetwork;</pre><pre class="alt"><span class="lnum">  15:  </span>        var outstr = IOSGetAddressInfo(host);</pre><pre><span class="lnum">  16:  </span>        Debug.Log(<span class="str">"IOSGetAddressInfo: "</span> + outstr);</pre><pre class="alt"><span class="lnum">  17:  </span>        <span class="kwrd">if</span> (outstr.StartsWith (<span class="str">"ERROR"</span>)) </pre><pre><span class="lnum">  18:  </span>        {</pre><pre class="alt"><span class="lnum">  19:  </span>            <span class="kwrd">return</span> <span class="kwrd">null</span>;</pre><pre><span class="lnum">  20:  </span>        }</pre><pre class="alt"><span class="lnum">  21:  </span>        var addressliststr = outstr.Split(<span class="str">'|'</span>);</pre><pre><span class="lnum">  22:  </span>        var addrlist = <span class="kwrd">new</span> List&lt;IPAddress&gt;();</pre><pre class="alt"><span class="lnum">  23:  </span>        <span class="kwrd">foreach</span> (<span class="kwrd">string</span> s <span class="kwrd">in</span> addressliststr)</pre><pre><span class="lnum">  24:  </span>        {</pre><pre class="alt"><span class="lnum">  25:  </span>            <span class="kwrd">if</span> (String.IsNullOrEmpty(s.Trim()))</pre><pre><span class="lnum">  26:  </span>                <span class="kwrd">continue</span>;</pre><pre class="alt"><span class="lnum">  27:  </span>            <span class="kwrd">switch</span>( s )</pre><pre><span class="lnum">  28:  </span>            {</pre><pre class="alt"><span class="lnum">  29:  </span>                <span class="kwrd">case</span> <span class="str">"ipv6"</span>:</pre><pre><span class="lnum">  30:  </span>                    {                        </pre><pre class="alt"><span class="lnum">  31:  </span>                        af = AddressFamily.InterNetworkV6;</pre><pre><span class="lnum">  32:  </span>                    }</pre><pre class="alt"><span class="lnum">  33:  </span>                    <span class="kwrd">break</span>;</pre><pre><span class="lnum">  34:  </span>                <span class="kwrd">case</span> <span class="str">"ipv4"</span>:</pre><pre class="alt"><span class="lnum">  35:  </span>                    {</pre><pre><span class="lnum">  36:  </span>                        af = AddressFamily.InterNetwork;</pre><pre class="alt"><span class="lnum">  37:  </span>                    }</pre><pre><span class="lnum">  38:  </span>                    <span class="kwrd">break</span>;</pre><pre class="alt"><span class="lnum">  39:  </span>                <span class="kwrd">default</span>:</pre><pre><span class="lnum">  40:  </span>                    {</pre><pre class="alt"><span class="lnum">  41:  </span>                        addrlist.Add(IPAddress.Parse(s));</pre><pre><span class="lnum">  42:  </span>                    }</pre><pre class="alt"><span class="lnum">  43:  </span>                    <span class="kwrd">break</span>;</pre><pre><span class="lnum">  44:  </span>            }</pre><pre class="alt"><span class="lnum">  45:  </span>        }</pre><pre><span class="lnum">  46:  </span>        <span class="kwrd">return</span> addrlist.ToArray();</pre><pre class="alt"><span class="lnum">  47:  </span>    }</pre><pre><span class="lnum">  48:  </span>}</pre><pre><font color="#ffffff">转载请注明:</font><a title="http://www.cppblog.com/sunicdavy" href="http://www.cppblog.com/sunicdavy"><font color="#ffffff">http://www.cppblog.com/sunicdavy</font></a><font color="#ffffff">战魂小筑</font></pre></div><style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style></pre>
<h3>参考链接</h3>
<p>官方文档<br><a href="https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW1">https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW1</a>
<p>某人的解决方案<br><a href="http://www.codeinsect.net/blog/2016/05/26/unity-ipv6-socket-%E6%94%AF%E6%8C%81%EF%BC%8C%E5%B7%B2%E6%B5%8B%E8%AF%95%E9%80%9A%E8%BF%87/">http://www.codeinsect.net/blog/2016/05/26/unity-ipv6-socket-%E6%94%AF%E6%8C%81%EF%BC%8C%E5%B7%B2%E6%B5%8B%E8%AF%95%E9%80%9A%E8%BF%87/</a><br>注意, 此方案中的方法可用, 但是地址并不能解决南北互通的问题



<img src ="http://www.cppblog.com/sunicdavy/aggbug/213731.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sunicdavy/" target="_blank">战魂小筑</a> 2016-06-16 14:18 <a href="http://www.cppblog.com/sunicdavy/archive/2016/06/16/213731.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ulua结合protoc-gen-lua的几个坑</title><link>http://www.cppblog.com/sunicdavy/archive/2016/05/31/213612.html</link><dc:creator>战魂小筑</dc:creator><author>战魂小筑</author><pubDate>Tue, 31 May 2016 03:26:00 GMT</pubDate><guid>http://www.cppblog.com/sunicdavy/archive/2016/05/31/213612.html</guid><wfw:comment>http://www.cppblog.com/sunicdavy/comments/213612.html</wfw:comment><comments>http://www.cppblog.com/sunicdavy/archive/2016/05/31/213612.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sunicdavy/comments/commentRss/213612.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sunicdavy/services/trackbacks/213612.html</trackback:ping><description><![CDATA[<p>最近整合ulua到项目里进行热更新, protoc-gen-lua这古老的东西重新让我继续发博客, 因为坑</p> <h2>生成好的协议报错找不到protobuf</h2> <p>在每个protoc-gen-lua生成的lua文件里, 都有一行</p><pre class="csharpcode">local protobuf = require <span class="str">"protobuf"</span></pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>

<p>本身按照官方出的没问题, 但是在ulua的目录里, 总是报protobuf找不到的错误. 前后对比了下我生成的lua和ulua官方生成的代码里</p>
<p>发现居然他修改了地址改为了</p><pre class="csharpcode">local protobuf = require <span class="str">"protobuf/protobuf"</span></pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>

<p>好吧, 只有修改生成器代码protoc-gen-lua\plugin\protoc-gen-lua中第412行改为</p><pre class="csharpcode">lua(<span class="str">'local protobuf = require "protobuf/protobuf"\n'</span>)</pre><pre class="csharpcode">&nbsp;</pre>
<h2>生成消息无法找到Descriptor反射查信息</h2><pre class="csharpcode">在LuaFramework\ToLua\Lua\protobuf\protobuf.lua的939行添加</pre><pre class="csharpcode">message_meta._member.Descriptor = descriptor</pre><pre class="csharpcode">在消息里就可以通过msg.Descriptor获得此消息的反射信息</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>

<h2>由于proto文件定义的内容过多导致的lua local超过限制的警告</h2>
<p><a href="http://www.cppblog.com/images/cppblog_com/sunicdavy/Windows-Live-Writer/proto_9D23/image_2.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/sunicdavy/Windows-Live-Writer/proto_9D23/image_thumb.png" width="800" height="76"></a></p>
<p>这个错误真是让我哭笑不得, protoc-gen-lua的可用性再一次被怀疑</p>
<p>我们的协议好歹分成了接近100个, 每个里面消息和数据是混合的, 更别说有些童鞋喜欢把一个项目的协议全写在一个文件里, 那生成的local数量简直是酸爽</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>后记</p>
<p>搜索protoc-gen-lua时, 无意间又搜到3年前自己的博文<a title="http://www.cppblog.com/sunicdavy/archive/2013/04/24/199693.html" href="http://www.cppblog.com/sunicdavy/archive/2013/04/24/199693.html">http://www.cppblog.com/sunicdavy/archive/2013/04/24/199693.html</a></p>
<p>记得那个时候准备在服务器使用lua, 还好没这么干, 转了go, 否则后果不堪设想</p>
<p>lua上使用pb其实并不容易, 云风的pbc写的不错, 但怕有坑, sproto直接不兼容现有项目, 风险大于易用性所以果断弃用</p>
<p>因此, 看来有必要自己写一个支持良好的lua pb库</p><img src ="http://www.cppblog.com/sunicdavy/aggbug/213612.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sunicdavy/" target="_blank">战魂小筑</a> 2016-05-31 11:26 <a href="http://www.cppblog.com/sunicdavy/archive/2016/05/31/213612.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>资源管理模式之Unity3D的Prefab与电子表格</title><link>http://www.cppblog.com/sunicdavy/archive/2016/03/24/213107.html</link><dc:creator>战魂小筑</dc:creator><author>战魂小筑</author><pubDate>Thu, 24 Mar 2016 08:33:00 GMT</pubDate><guid>http://www.cppblog.com/sunicdavy/archive/2016/03/24/213107.html</guid><wfw:comment>http://www.cppblog.com/sunicdavy/comments/213107.html</wfw:comment><comments>http://www.cppblog.com/sunicdavy/archive/2016/03/24/213107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sunicdavy/comments/commentRss/213107.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sunicdavy/services/trackbacks/213107.html</trackback:ping><description><![CDATA[<p>最近在项目中进行资源优化. 我们的项目一直以来都是以传统的电子表格配置为中心的资源驱动加载方法, 拿角色携带的特效要播放出来这个case来具体点说就是:</p> <p>1. 技能部分的特效可以遍历动作表播放的所有特效id, 提前预载</p> <p>2. buff类特效是动态确定的,无法分析. 需要通过角色表添加资源id在加载角色时加载特效</p> <p>这种做法的缺点:</p> <p>当角色特效效果调整时, 美术和策划需要调整特效id表. 多出来不用的特效也加载是感觉不出来的, 分析也是很困难的</p> <p>所以这种以传统的电子表格配置为中心的方式在Unity3D里, 内存, 包优化会是个大问题.</p> <p>&nbsp;</p> <p>那么, 什么是Unity3D的开发核心思想? </p> <p>除了组件思想外, 就是Prefab, 贯彻整个编辑器及引擎自始至终</p> <p>&nbsp;</p> <p>处理角色携带特效加载后播放的这个case, 用Prefab为中心的资源管理来做的话, 大概就是这样:</p> <p>1. 程序编写一个角色特效列表脚本, 把List暴露出来可以在编辑器里使用</p> <p>2. 美术在做技能时, 把要用到的特效拖拽到List中</p> <p>3. 特效无需再编制全局ID编码</p> <p>4. 策划根据这个角色挂接的特效索引, 在配置表里添加播放指令</p> <p>这样做的优点:</p> <p>角色引用到的资源才会被打到最终游戏包内, 不使用的资源是不会被加载的</p> <p>&nbsp;</p> <p>类似的, 在UI特效里, 也应该是将要播放的特效挂接到对象中, 而不是动态通过代码去加载</p> <p>在Unity3D中, Prefab将图片,Shader, 特效, 脚本等一切平等看待, 只要有引用, 一次性加载. </p> <p>同时, 也可以通过静态工具分析Prefab. </p> <p>如果是通过代码加载的效果, 则只能让程序员做优化, 这种过程无法让Unity3D官方后期提供的工具进行优化</p> <p>&nbsp;</p> <p>所以, 推荐使用Prefab为中心的资源管理模式</p><img src ="http://www.cppblog.com/sunicdavy/aggbug/213107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sunicdavy/" target="_blank">战魂小筑</a> 2016-03-24 16:33 <a href="http://www.cppblog.com/sunicdavy/archive/2016/03/24/213107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ios9的HTTPS引起的血案</title><link>http://www.cppblog.com/sunicdavy/archive/2016/01/07/212625.html</link><dc:creator>战魂小筑</dc:creator><author>战魂小筑</author><pubDate>Thu, 07 Jan 2016 06:56:00 GMT</pubDate><guid>http://www.cppblog.com/sunicdavy/archive/2016/01/07/212625.html</guid><wfw:comment>http://www.cppblog.com/sunicdavy/comments/212625.html</wfw:comment><comments>http://www.cppblog.com/sunicdavy/archive/2016/01/07/212625.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/sunicdavy/comments/commentRss/212625.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sunicdavy/services/trackbacks/212625.html</trackback:ping><description><![CDATA[<p>最近碰到一个蹊跷的设备相关问题。我们的游戏使用的是Unity3D 4.X 真机测试环境都是ios8越狱，从iPhone6,iPad3到iPhone5s都有。所有包在我们本机测试都是OK的，结果包发出去， 在iTouch5，iPhone6s这些2015年新出的设备上一律卡进度条</p> <p>随即，我们进行了分析。期初推断是arm64引起的问题，尝试调整为il2cpp同时启用armv7和arm64的通用包，问题没有解决。</p> <p>继续分析：因为游戏正常启动， 只是初次加载卡进度条， 那么可以排除是arm64位问题导致的，因为如果是不兼容包， 在安装时直接会报出架构错误，无法正常安装。</p> <p>给游戏内部加入了一个HTTP日志系统， 给服务器报错。跟踪了一次， 结果发现了一些奇怪日志</p> <p><a href="http://www.cppblog.com/images/cppblog_com/sunicdavy/Windows-Live-Writer/ios9HTTPS_CEC9/image_2.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/sunicdavy/Windows-Live-Writer/ios9HTTPS_CEC9/image_thumb.png" width="1299" height="306"></a></p> <p>在检测下载之前的加载没有出现任何问题</p> <p>但是下载错误报了两次， 第一个错误在我们本机也会报，但可以忽略。 但第二个错误只有iTouch5，iPhone6s会出现</p> <p>报错后， 所有日志都出现了两次。</p> <p>对比了下代码，发现了一些逻辑漏洞。但同时需要注意的是， 这个bug的问题的核心就是在这一个错误描述上</p> <p>The resource could not be loaded because the App Transport Security policy requires the use of a secure connection. </p> <p>查过<a href="https://segmentfault.com/a/1190000002933776">文章</a>发现，ios9开始默认要求所有的app的HTTP访问必须使用HTTPS加密协议保证安全</p> <p>所以结合前面的测试环境， 证明这个问题确定被修复</p><img src ="http://www.cppblog.com/sunicdavy/aggbug/212625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sunicdavy/" target="_blank">战魂小筑</a> 2016-01-07 14:56 <a href="http://www.cppblog.com/sunicdavy/archive/2016/01/07/212625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unity3D的资源热更新的讨论</title><link>http://www.cppblog.com/sunicdavy/archive/2015/12/12/212468.html</link><dc:creator>战魂小筑</dc:creator><author>战魂小筑</author><pubDate>Sat, 12 Dec 2015 02:52:00 GMT</pubDate><guid>http://www.cppblog.com/sunicdavy/archive/2015/12/12/212468.html</guid><wfw:comment>http://www.cppblog.com/sunicdavy/comments/212468.html</wfw:comment><comments>http://www.cppblog.com/sunicdavy/archive/2015/12/12/212468.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/sunicdavy/comments/commentRss/212468.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sunicdavy/services/trackbacks/212468.html</trackback:ping><description><![CDATA[<p>最近和团队讨论打包导致的发版本时间过长的问题: 平均1个小时 <p>Unity3D现在官方不支持热更新, 虽然有一些lua的热更方案, 但鉴于项目开始时lua热更还不成熟, 所有没有采用 <p>经过长时间业界和技术的摩擦, 渠道基本认同了Unity3D不能热更的现实 <p>&nbsp; <p>根据我们这边运营分析的热更新的需求: 临时关闭功能避免bug刷钱 <p>在强力的QA支持(我们有)下, 可以保证版本的功能不会有明显问题, 即便有问题, 可以通过服务器关闭功能达到效果 <p>&nbsp; <p>这样来说, 代码上的热更新基本是不可能了, 只能通过服务器来配合, 所以我们只考虑资源热更新需求. <p>&nbsp; <p>场景: 这部分属于PVE功能, 虽然包含有怪物摆放的逻辑, 但一般一旦做好基本没有更新需要 <p>角色: 后期这块可能会考虑更新, 但明显系统上可以同时支持打包和非打包需求, 因此默认包内的角色可以直接打包, 未来的付费相关的角色热更新需求既可以通过 <p>一阶段打包更新, 也可以根据增量更新进行.&nbsp; <p>界面: 知识更新界面包只能修改界面布局和坐标, 逻辑依然需要打包更新, 所以这块完全有必要不做打包 <p>特效: 特效与角色和界面关联紧密, 而且混用, 交叉的情况很多, 打包明显会造成一部分资源重复进入包体, 因此果断不打包 <p>&nbsp; <p>总结下来, 资源的更新一定是伴随着代码的更新来做的, 那么可以规划一个大版本, 把需要更新的资源和功能逻辑一块更新 <p>虽然大包更新会损失一定的用户, 但未来在核心稳定的情况下, 可以考虑把新功能用脚本来更新 <p>资源不打包带来明显的优势: 资源加载变的更快了, 制作流程变的更简单, 无需兼容打包和非打包情况. 包体大小有小幅度下降( 重复打包部分)</p><img src ="http://www.cppblog.com/sunicdavy/aggbug/212468.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sunicdavy/" target="_blank">战魂小筑</a> 2015-12-12 10:52 <a href="http://www.cppblog.com/sunicdavy/archive/2015/12/12/212468.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个诡异的Unity3D的网络问题</title><link>http://www.cppblog.com/sunicdavy/archive/2015/07/06/211162.html</link><dc:creator>战魂小筑</dc:creator><author>战魂小筑</author><pubDate>Mon, 06 Jul 2015 08:11:00 GMT</pubDate><guid>http://www.cppblog.com/sunicdavy/archive/2015/07/06/211162.html</guid><wfw:comment>http://www.cppblog.com/sunicdavy/comments/211162.html</wfw:comment><comments>http://www.cppblog.com/sunicdavy/archive/2015/07/06/211162.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/sunicdavy/comments/commentRss/211162.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sunicdavy/services/trackbacks/211162.html</trackback:ping><description><![CDATA[<p>项目中, 我们使用Unity3D做客户端开发. 自己撸了一套C#网络库, 随着项目的推进, 问题来了:</p> <h1>问题</h1> <p><strong>每次Unity3D编辑器打开时, 连接服务器都会有一定几率失败, 需要反复关闭再打开编辑器3~4次后, 才能正常接收到封包</strong></p> <p><font color="#ffffff">转载请注明: 战魂小筑</font><a href="http://www.cppblog.com/sunicdavy"><font color="#ffffff">http://www.cppblog.com/sunicdavy</font></a></p> <h1><strong>探索</strong></h1> <p>我们的网络库基于C#的Begin/End系的异步Socket, 这种socket更接近C++的asio模型, 撸起来特爽.</p> <p>1. 根据经验, 这个诡异问题多半跟多线程有关系. 复查代码, 无效. </p> <p>2. 找友人更换网络库, 换阻塞Socket实现和SocketAsyncEventArgs这种实现都试过, 仍然无法解决问题.</p> <p>3. 接下来还是对Begin/End系的网络库进行日志追踪. 发现, 发送会总是成功, 连接成功和接收封包有一定几率会断掉</p> <p>我们并没有单独开线程来处理, 而是利用底层异步通知, 然后有线程安全队列切换到主线程进行投递. 因此底层的线程正常性是整个问题的焦点</p> <p>由于一直无法找到原因, 这个问题搁置了</p> <p><font color="#ffffff">转载请注明: 战魂小筑</font><a href="http://www.cppblog.com/sunicdavy"><font color="#ffffff">http://www.cppblog.com/sunicdavy</font></a></p> <h1>解决方案</h1> <p>直到有一个偶然的机会, 取过同事代码后. 突然发现第一次打开Unity3D编辑器可以直接登录. 但之后又不行. 同事提醒, 会不会是优先度问题. </p> <p>马上打开Edit-&gt;Project Settings-&gt;Script Execution Orders. <strong>提高了网络组建优先度</strong></p> <p><a href="http://www.cppblog.com/images/cppblog_com/sunicdavy/Windows-Live-Writer/Unity3D_DF1C/image_2.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/sunicdavy/Windows-Live-Writer/Unity3D_DF1C/image_thumb.png" width="394" height="267"></a></p> <p>测试, 通过, 问题解决</p> <p><font color="#ffffff">转载请注明: 战魂小筑</font><a href="http://www.cppblog.com/sunicdavy"><font color="#ffffff">http://www.cppblog.com/sunicdavy</font></a></p> <h1>总结</h1> <p><font color="#ffffff">转载请注明: 战魂小筑</font><a href="http://www.cppblog.com/sunicdavy"><font color="#ffffff">http://www.cppblog.com/sunicdavy</font></a></p> <p>一直怀疑这个问题跟Mono版本过老有关系, 但由于5.2版本到年底才更新, 之前只能自己啃bug. </p> <p>在这个问题发生后解决前, 我们还有一个相关见闻: 我们将网络部分比较稳定的代码拆分放到dll中, 通过Unity3D的机制进行加载</p> <p>结果, 网络无法初始化. 估计也是跟这个问题有关系</p> <p>总之, 有类似问题时, 可以试用脚本执行顺序大法进行尝试</p><img src ="http://www.cppblog.com/sunicdavy/aggbug/211162.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sunicdavy/" target="_blank">战魂小筑</a> 2015-07-06 16:11 <a href="http://www.cppblog.com/sunicdavy/archive/2015/07/06/211162.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unity3D工程进入代码管理前的准备</title><link>http://www.cppblog.com/sunicdavy/archive/2014/12/26/209316.html</link><dc:creator>战魂小筑</dc:creator><author>战魂小筑</author><pubDate>Fri, 26 Dec 2014 10:58:00 GMT</pubDate><guid>http://www.cppblog.com/sunicdavy/archive/2014/12/26/209316.html</guid><wfw:comment>http://www.cppblog.com/sunicdavy/comments/209316.html</wfw:comment><comments>http://www.cppblog.com/sunicdavy/archive/2014/12/26/209316.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sunicdavy/comments/commentRss/209316.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sunicdavy/services/trackbacks/209316.html</trackback:ping><description><![CDATA[<p>Unity3D默认的asset格式都是二进制的, 比如说.anim .mat .prefab .unity 还有一些是文本格式, 比如.meta. 因此在菜单Edit-&gt;Project Settings-&gt;Editor里的Asset serialization模式是混合.</p> <p>为了让代码管理工具能识别Unity3D的asset格式, 做出一些少量的合并及识别修改. 我们需要对Unity3D进行一些配置以适应代码管理工具.以下是步骤:</p> <p>Edit-&gt;Project Settings-&gt;Editor里按如下配置</p> <p><a href="http://www.cppblog.com/images/cppblog_com/sunicdavy/Windows-Live-Writer/3ae98bd118ce_1045F/image_2.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/sunicdavy/Windows-Live-Writer/3ae98bd118ce_1045F/image_thumb.png" width="512" height="331"></a></p> <p>在做出修改前, 请将之前的修改提交代码管理</p> <p>将选项设为红框内的方式, 使用显式Meta Files, 以避免在资源管理器里被被忽略的meta文件以及Asset文件使用文本格式</p> <p>设定好后, 所有的资源将重新序列化, 将修改提交代码管理工具</p> <p>&nbsp;</p> <p>代码管理工具不是玩能的, 也一定能很好的合并这些复杂文本格式. 因此我们在多人协作开发中需要遵守一些原则</p> <p>1. 先获取别人的更新, 运行无误后再提交( 最基本的 )</p> <p>2. 对有合并的asset格式, 尽量查看其修改过程, 询问他人的修改与自己的修改差异(或者是git的3方合并)</p> <p>3. 对合并错误的asset格式, 应及时修正, 手动合并, 切勿延误并提交, 影响他人<br></p> <p>参考链接: <a title="http://stackoverflow.com/questions/21573405/how-to-prepare-a-unity-project-for-git" href="http://stackoverflow.com/questions/21573405/how-to-prepare-a-unity-project-for-git">http://stackoverflow.com/questions/21573405/how-to-prepare-a-unity-project-for-git</a></p><img src ="http://www.cppblog.com/sunicdavy/aggbug/209316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sunicdavy/" target="_blank">战魂小筑</a> 2014-12-26 18:58 <a href="http://www.cppblog.com/sunicdavy/archive/2014/12/26/209316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>搭建Unity3D的2D游戏开发环境</title><link>http://www.cppblog.com/sunicdavy/archive/2014/10/10/208534.html</link><dc:creator>战魂小筑</dc:creator><author>战魂小筑</author><pubDate>Fri, 10 Oct 2014 14:30:00 GMT</pubDate><guid>http://www.cppblog.com/sunicdavy/archive/2014/10/10/208534.html</guid><wfw:comment>http://www.cppblog.com/sunicdavy/comments/208534.html</wfw:comment><comments>http://www.cppblog.com/sunicdavy/archive/2014/10/10/208534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sunicdavy/comments/commentRss/208534.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sunicdavy/services/trackbacks/208534.html</trackback:ping><description><![CDATA[<p>Unity3D引擎开发2D游戏的介绍很少, 本文以笔记方式进行介绍</p> <p><strong></strong>&nbsp;</p> <p><strong>工程参数设置</strong></p> <p><a href="http://www.cppblog.com/images/cppblog_com/sunicdavy/WindowsLiveWriter/Unity3D2D_13C63/image_2.png"><strong><img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/sunicdavy/WindowsLiveWriter/Unity3D2D_13C63/image_thumb.png" width="561" height="355"></strong></a><strong> </strong></p> <p>在创建时, 记得将最下边的模式设为2D模式</p> <p><strong>摄像机参数设置</strong></p> <p><a href="http://www.cppblog.com/images/cppblog_com/sunicdavy/WindowsLiveWriter/Unity3D2D_13C63/image_4.png"><strong><img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/sunicdavy/WindowsLiveWriter/Unity3D2D_13C63/image_thumb_1.png" width="274" height="346"></strong></a><strong> </strong></p> <p>这里需要设定的项:</p> <p>Z设为-10, 如果设为0, 将不可见物体</p> <p>ClearFlags设为纯色, 因为是2D游戏, 所以无需默认参数的天空盒</p> <p>Projection设为正交投影(Orthographic), 这是相对于3D的透视投影的</p> <p>Size根据你的设计期分辨率的半高度来设定.比如设计期, 我们以iPhone4的分辨率(960*640)为设计分辨率, 那么Size就设为640/2=320</p> <p>&nbsp;</p> <p><strong>精灵帧的导出</strong></p> <p><strong></strong></p> <p>U3D原生支持对纹理Atlas的切片以制作精灵帧, 是通过SpritePacker来做的, 不过介于TexturePacker的强大合并及纹理分布优化, 这里我们还是以TexturePacker来做例子.</p> <p>TexturePacker 官方网站: <a title="https://www.codeandweb.com/texturepacker" href="https://www.codeandweb.com/texturepacker">https://www.codeandweb.com/texturepacker</a></p> <p><a href="http://www.cppblog.com/images/cppblog_com/sunicdavy/WindowsLiveWriter/Unity3D2D_13C63/image_6.png"><img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/sunicdavy/WindowsLiveWriter/Unity3D2D_13C63/image_thumb_2.png" width="344" height="222"></a> </p> <p>将需要合并Atlas的图片拉入TexturePacker, 然后参考上图, 设定描述文件格式为Unity3D. TexturePacker将为我们导出一个png的纹理及一个txt格式的文本. 这个文本内部格式是json, 描述每个精灵帧在原图Atlas的信息</p> <p><strong>设定纹理对应像素尺寸</strong></p> <p><a href="http://www.cppblog.com/images/cppblog_com/sunicdavy/WindowsLiveWriter/Unity3D2D_13C63/image_12.png"><img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/sunicdavy/WindowsLiveWriter/Unity3D2D_13C63/image_thumb_5.png" width="285" height="164"></a> </p> <p>点击导入到U3D的png纹理, 在Inspector中奖Pixels To Units 设定为1</p> <p>默认这个值是100, 代表一张100宽100高的纹理在U3D中只有1个单位大小, 设为1后, 就是传统2D引擎的, 纹理与屏幕分辨率对应模式</p> <p><em>转载, 请注明</em><a title="http://www.cppblog.com/sunicdavy" href="http://www.cppblog.com/sunicdavy"><em>http://www.cppblog.com/sunicdavy</em></a><em> 战魂小筑</em></p> <p><strong>转换TexturePacker导出格式到Unity3D精灵帧格式</strong></p> <p>在<a title="https://github.com/autolame/TexturePackerExtended" href="https://github.com/autolame/TexturePackerExtended">https://github.com/autolame/TexturePackerExtended</a>下载一个Unity的扩展, 并甩到工程Assets中导入</p> <p><a href="http://www.cppblog.com/images/cppblog_com/sunicdavy/WindowsLiveWriter/Unity3D2D_13C63/image_8.png"><img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/sunicdavy/WindowsLiveWriter/Unity3D2D_13C63/image_thumb_3.png" width="575" height="282"></a> </p> <p>在刚才使用TexturePacker导出的txt格式文件上点击右键, 选择Process to animated Sprites</p> <p><strong>这种导出法, 适用于以原始单图片中, 以图片正中心为原点的序列帧</strong></p> <p><a href="http://www.cppblog.com/images/cppblog_com/sunicdavy/WindowsLiveWriter/Unity3D2D_13C63/image_10.png"><img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/sunicdavy/WindowsLiveWriter/Unity3D2D_13C63/image_thumb_4.png" width="549" height="319"></a> </p> <p>之后, 将Atlas小箭头展开的序列帧拉到场景中, 就可以预览动画了</p><img src ="http://www.cppblog.com/sunicdavy/aggbug/208534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sunicdavy/" target="_blank">战魂小筑</a> 2014-10-10 22:30 <a href="http://www.cppblog.com/sunicdavy/archive/2014/10/10/208534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>