这周的开发视频不更新了,着实没有什么像样的新内容,最近打算把阴影的效果改成类似stoneshard的样子,无奈碰到很多坑。具体如下:
坑1、
(资料图片)
tilemap.color = Color.black
Tilemap的color不要设置成黑色,否则对tile的任何修改都会被黑色覆盖。
设置Tilemap的color并不是设置Tilemap初始化时的每个Tile的初始颜色,他的设置和设置SpriteRenderer的color类似,是与tile中的sprite相互叠加的。
坑2、
tilemap.SetColor(pos,color)
这个设置的是某个位置上的color,设置并不一定成功。如果tile来自asset(不是通过代码动态创建的静态资源)则很有可能颜色被锁住了,需要先解锁颜色设置。
tilemap.RemoveTileFlags(pos, TileFlags.LockColor);
坑3、
tilemap.RefreshAllTiles();
刷新所有的Tiles,同样的方法还有
tilemap.RefreshTile(pos)
他的作用并不是将修改的内容推送到显示缓冲区;类似的功能在OpenGL等API中有,修改不一定显示到屏幕,需要代码人工推送,主要是为了节省性能,比如多次设置后一次性推送。但这个接口并不是这样。如果tile的资源来自asset,则Refresh会将tile重新设置回asset的设置,之前的SetColor无效。
坑4、
Color lightingColor = new Color(1.0f, 1.0f, 1.0f, 0.0f);
tilemap.RemoveTileFlags(pos, TileFlags.LockColor);
tilemap.SetColor(pos, lightingColor);
Tile curTile = fowMap.GetTile<Tile>(pos);
Debug.Log(string.Format("设置完颜色后再次获取颜色为:{0}!", curTile.color.a));
如果tile来自asset,则设置他的颜色后,虽然显示上颜色正确,但当前位置获取的颜色仍然是asset的Tile的颜色。即便你重新锁定颜色tilemap.AddTileFlags(pos, TileFlags.LockColor);也无济于事。
所以最稳妥的办法是不使用SetColor方法了,改用SetTile。给光照,阴影,暗处三种表现分别使用3个不同的Tile,虽然资源多了两张,但恶心的bug会少很多。
坑5、
跟Tilemap没有关系,而是Component的自定义面板。如果一个Component的新增一个自定义属性后,所有包含这个Component的prefab都会更新,这个自定义属性获得一个默认值。当修改Component的默认值后,prefab的值并不会更新。所以如果没有把这个参数公布出来就不容易发现。
X 关闭
2021年北向资金流入超4300亿元 外资热情拥抱中国资产
尽管面临疫情反复等多重不利因素,外资在2...北交所董事长徐明:北交所成立以来股票平均上涨98.9%
北京证券交易所董事长徐明8日表示,北交所...宁吉喆:2021年中国GDP将连续第二年超百万亿元
中国国家发改委副主任兼中国国家统计局...中国黄金消费市场渐回暖 “古法金”饰品获年轻消费者青睐
2022世界珠宝发展大会正在海口举行。8日在...观察:中国首条民营控股高铁开通之“时”与“势”
杭台高铁首趟列车即将发车。张煜欢摄1月8...中国生态环境保护实现“十四五”起步之年良好开局
中国生态环境部7日在北京召开2022年全国...人社部发布信用管理师国家职业技能标准
近日,人力资源和社会保障部对外发布了《...云南永善佛滩顺河梯级电站全面推进建设
日前,云南省永善县顺河村举行了佛滩顺河...中老铁路的背后 “税务专车”一路同行
2021年12月3日中老铁路正式开通运营,仅需...哈啰出行投资成立装饰工程公司 注册资本200万元
企查查APP显示,3月18日,上海钧住装饰工程有限公司成立,法定代表...Copyright © 2015-2022 南方建筑工程网版权所有 备案号:粤ICP备18023326号-21 联系邮箱:855 729 8@qq.com