射线检测就是从一个点(Vector3)开始沿着一个方向(Vector3)发射一段距离,在轨迹之间与物体发生碰撞时,它就会停止。
通过射线检测在一个平台上创建对象:
LayerMask的使用:
我们发现这样创建的物体会挡住我们的射线,如果我们想让射线穿越我们创建的物体,这样就要使用到layermask。
LayerMask类型其实是一个int型,我们可以通过public static int NameToLayer(string s)
和public static string LayerToName(int i)
来转换。
这样,射线就会穿越cylinder层,和别的其它层发生碰撞。
自动回收
现在考虑让这些标记在一定时间后自动消失
在创建对象的时候添加这个动作组件:
创建与销毁的成本
我必须认识到,从资源创建对象的成本是最高的GameObject instance = Instantiate(Resources.Load("enemy"));
,克隆的成本是较高的,在存储许可的条件下,缓存常用的对象,例如子弹等等。
我们使用简单工厂来负责创建和管理这些标记,工厂需要做到的工作是,当对象创建之后,2秒之后释放时不是销毁,而是透明化,并放到未使用列表中,当再次需要产生对象时,先检查工厂的未使用列表中有没有可用的,如果有,则恢复透明度,并放置在对应的位置,如果是第一次创建,那么就创建一个新的,否则就使用一个作为克隆模板。
参考资料:
[Unity3D]射线碰撞检测+LayerMask的使用 转