坑
GameObject.GetComponentsInChildren<>(可抽象为find()、*transform据说也一样 *:错了,可以找到只要transform组件没有关掉)不能找到active为fasle的物体
对于sprite(或image资源建立的游戏对象而言,如果靠gameObject.enable来控制显示和隐藏,enable=false后将无法再次获取并显示。想要控制其显示和隐藏,可以用这个方法来获取它的SpriteRenderer(或者image),然后再enabled=false掉,实现切换显示内容的功能
解决问题tips
一是一个方法不行,可以想想别的方法
比如gameobject控制显示不行换成spriterenderer
二是不熟悉api导致的入坑,所以要多看api?
找出问题tips
一、调试,思考坑出在哪一环节
二、抽象问题,如将GetComponentsInChildren<>抽象为获取、查找…(方便查到更多相关资料)
小坑
autolayout好像只有gridLayout需要子物体加上了elementLayout才能生效(后面发现又不需要了???莫名其妙)
坑之二
viewport的mask或者2Dmask貌似对sprite没有用,只对image有用,因为image是靠Canvas Renderer组件渲染,而sprite是靠Sprite Renderer组件在3D空间上渲染。因此sprite需要专门的spriteMask,并且并不是在viewport加上spriteMask就可以,还得靠新创建一个spriteMask才行(因为viewport本身使用Canvas Renderer渲染),还有哇,这个组件的sprite(mask)需要不透明的,如果透明则需要显示的内容sprite也会透明(猜测是由于需要将透明和不透明部分区分开来的缘故,如果透明的部分也可以作为mask的话会导致形状和不透明部分有出入)
配合灰度sprite(import setting-advanced-alpha source-from gray scale)
image的透明部分不会自动裁剪掉,所以给ta的点击事件加上代码如下(需要修改sprite资源为readable)
private void