层
层(Layer)在物理系统中用于选择性地启用或禁用实体之间的碰撞 。
在YAHAHA中,层可通过脚本访问,开发者可设置和编辑层,将实体分配到特定层,并调整碰撞关系以控制哪些层可相互作用。默认情况下,所有实体位于第1层,层编号可在1到31之间更改。
SetPhysicsLayer
使用SetPhysicsLayer为实体设置层:
local userDefinedLayer_11 = 11
local entity_A = YaEntity.New(8)
PhysicsAPI.SetPhysicsLayer(entity_A, userDefinedLayer_11)
本例中,我们定义了第11层,并将ID为8的实体放入该层。
CollisionGroupSetCollidable
将实体分配到不会发生碰撞的层:
local userDefinedLayer_11 = 11
local userDefinedLayer_12 = 12
-- 忽略第11层与第12层之间的碰撞
PhysicsAPI.CollisionGroupSetCollidable(userDefinedLayer_11, userDefinedLayer_12, false)
local entity_A = YaEntity.New(8)
local entity_B = YaEntity.New(9)
-- 为实体A设置第11层,为实体B设置第12层
PhysicsAPI.SetPhysicsLayer(entity_A, userDefinedLayer_11)
PhysicsAPI.SetPhysicsLayer(entity_B, userDefinedLayer_12)
本例中,我们将第11层与第12层的碰撞设为忽略,然后将实体A分配到第11层,实体B分配到第12层。这样,不同层的两个实体将不会发生碰撞。
QueryPhysicsLayer
使用射线检测指定层上的实体:
local userDefinedLayer_11 = 11
-- 使用射线检测第11层上的实体:
local queryInstance = YaQueryParameter.Instance()
local queryParam = queryInstance:QueryPhysicsLayer(userDefinedLayer_11)
local queryResult = PhysicsAPI.RaycastSingle(float3.New(0, 10, 0), float3.New(0, 1, 0), queryParam)
print(queryResult.Entity.EntityId)
本例中,我们使用射线向上检测第11层上的实体,并返回第一个被击中的实体ID。