AC.Channels4Observation

AgentComponent_VLabChannels4Observation

简要说明:

  • 观察规则组件,用来判断当前是否满足进入观察模式的条件,暂时只在VR环境起作用。
  • 目前有两种观察模式,分别是显微镜(整个屏幕变黑后显示图像);以及量筒(在量筒旁边显示一个小窗口)。

void InitData(int deviceID, string path)

简要说明:

  • 初始化,会自动设置主相机

参数:

参数名 类型 说明
deviceID int 元器件的entityID
path string 挂在组件的子节点路径(比如显微镜的目镜),为空值时会默认在元器件根节点挂脚本

void InitInfo4microscope(string stagePath)

简要说明:

  • 记录进入微观模式需要的信息(显微镜调用)

参数:

参数名 类型 说明
stagePath string 显微镜的载物台路径

void InitInfo4Mark(Vector3 uiDistance)

简要说明:

  • 记录进入观察刻度模式需要的信息(量筒调用)

参数:

参数名 类型 说明
uiDistance Vector3 刻度窗口相对于凹液面的偏移量

void SetWork(bool isWork)

简要说明:

  • 设置所有判断规则是否起作用

参数:

参数名 类型 说明
isWork bool 当外部规则不满足时(比如显微镜没有放在桌子上),将此值设为false

void AddTiltRule(bool useRoot, int axisType, float angle)

简要说明:

  • 添加倾斜规则(与世界重力垂直线相比)

参数:

参数名 类型 说明
useRoot bool 是否使用元器件根节点作为主体
axisType int 以主体哪一条轴线为基准进行判断(0上、1下、2左、3右、4前、5后),建议值1
angle float 角度阈值

void AddSimpleAngleRule(bool useRoot, int axisType, float angle)

简要说明:

  • 添加简单角度规则

参数:

参数名 类型 说明
useRoot bool 是否使用元器件根节点作为主体
axisType int 以主体哪一条轴线为基准进行判断(0上、1下、2左、3右、4前、5后),显微镜建议值1
angle float 与相机的角度阈值

void AddCompositeAngleRule(bool useRoot, float updownAngleLimit, float leftrightAngleLimit)

简要说明:

  • 添加复合角度规则(挂在子节点上时,要求其与父物体无相对旋转)

参数:

参数名 类型 说明
useRoot bool 是否使用元器件根节点作为主体
updownAngleLimit float 上下角度限制
leftrightAngleLimit float 左右角度限制

void AddViewRule(bool useRoot, LuaTable viewScope)

简要说明:

  • 添加视野规则

参数:

参数名 类型 说明
useRoot bool 是否使用元器件根节点作为主体
viewScope LuaTable 条件判定的视野范围限制,有四个值,分别代表X.min, X.max, Y.min, Y.max,取值范围[0,1]例如{0.3f, 0.6f, 0.3f, 0.6f},代表屏幕九宫格的中间那一块,建议值{0,1,0,1}

void AddDistanceRule(bool useRoot, float distanceLimitUp, float distanceLimitDown)

简要说明:

  • 添加距离规则

参数:

参数名 类型 说明
useRoot bool 是否使用元器件根节点作为主体
distanceLimitUp float 相机在物体上方时的距离限制
distanceLimitDown float 相机在物体下方时的距离限制

6、例子

    -- 初始化
function XianWeiJingElementAgent:AddInteract()
    -- vr 观察规则初始化
    self.VLabChannels4Observation:Bind(self.entityId)
    -- 把组件挂在目镜上并初始化
    self.VLabChannels4Observation:InitData(self.entityId, "GameObjScale/MeshPoint/XianWeiJing_new/MuJingTong/MuJing_10x")
    -- 传入进入观察模式需要的参数(量筒需要使用InitInfo4Mark(Vector3 uiDistance))
    self.VLabChannels4Observation:InitInfo4microscope("GameObjScale/InteractPoint/VRImage")
    -- 添加距离规则(使用目镜部件计算距离,相机在上方时距离限制为15cm,相机在下方时距离限制为5cm)
    self.VLabChannels4Observation:AddDistanceRule(false, 0.15, 0.05)
    -- 添加自倾斜规则(使用显微镜本体计算倾斜角,使用显微镜下轴计算(0,-1,0),下轴与重力轴角度误差不超过20度)
    self.VLabChannels4Observation:AddTiltRule(true, 1, 20)
    -- 添加视野规则(判断显微镜本体是否在观察视野内,观察视野定义为相机全部视野)
    self.VLabChannels4Observation:AddViewRule(true, {0,1,0,1})
    -- 添加简单角度规则(使用目镜部件计算角度,使用目镜下轴(0,-1,0)计算,下轴与相机视线夹角不超过20度)
    self.VLabChannels4Observation:AddSimpleAngleRule(false, 1, 20)
end

function XianWeiJingElementAgent:OnEntireMove(objPath,eventType,WorldPos,offset,isFocus)
    self:LBABaseInteractiveMove(objPath,eventType,WorldPos,offset,isFocus)
    -- 观察规则生效控制
     -- 元器件移动时,不可被观察
    if eventType == "BeginMove" then
        self.VLabChannels4Observation:SetWork(false)
     -- 元器件结束移动后,可以被观察
    elseif eventType == "EndMove" then
        self.VLabChannels4Observation:SetWork(true)
    end
end