使用默认角色运行任务时,可以通过挂Unity组件的方式实现按钮UI,通过配置相应的参数实现按钮的启用、文字和点击限制等。

OperationItemExample.png

在默认角色中有对操作项的支持,若为自定义角色则需要自行处理相关逻辑

添加操作项的两种方式

  1. 在Unity中挂载DM0perationItem组件

    选择需要添加操作项的游戏物体,AddComponent -> DMBuildInScript -> DMOperationItem即可添加操作项。

  2. 使用OperationConfig.xml文件

    在组件对应的文件夹中,创建名为OperationConfig.xml的配置文件,运行时将会动态挂载操作项。

两种添加操作项的方式可以同时使用,根据不同情况自行选择添加方式。

操作项相关字段说明

字段说明
Id操作项唯一ID
Status操作项初始状态ID
Type操作项需要选择对应物品的ID
UI offset默认与当前游戏物体位置相同,设置显示位置偏移量
Oper items显示的文字、操作项状态ID和点击操作项之后的状态ID
Oper type操作项显示类型,按钮、开关和滑动条等
Oper time操作项执行时间
CD time操作项可以再次执行的等待时间
Operator anim操作项对应的角色动画ID
Operator begin pos操作项开始位置
Return knapsack id返回操作项需要物品的ID
Oper distance可以与操作项交互的最大距离
Pre condition操作项执行条件
Component status组件状态
Operator mode操作模式
Operator skill需要角色开启对应技能
Usable是否启用这个操作项

Oper items的第一个元素,Status的值必须为0,并且Oper items中的所有New status必须存在,推荐使用连续值。

Oper type

类型说明
Button单个按钮
Toggle开关
Slider滑动条
Dropdown下拉列表
Dropdown new下拉列表
Button list按钮列表

OperationConfig.xml示例

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfOperationItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <OperationItem>
    <Dir>Null</Dir>
    <Id>10001</Id>
    <Status>0</Status>
    <OperItems>
      <OperItem>
        <Value>0</Value>
        <Tips>Null</Tips>
        <Event>0</Event>
      </OperItem>
      <OperItem>
        <Value>0</Value>
        <Tips>Null</Tips>
        <Event>0</Event>
      </OperItem>
    </OperItems>
    <Type>0</Type>
    <OperType>0</OperType>
    <OperTime>0</OperTime>
    <CDTime>0</CDTime>
    <OperatorAnim>0</OperatorAnim>
    <OperatorBeginPos>Null</OperatorBeginPos>
    <ReturnKnapsackId>Null</ReturnKnapsackId>
    <OperDistance>0</OperDistance>
    <PreCondition>
      <PreCondition>
        <Id>Null</Id>
        <Status>0</Status>
        <OperCount>0</OperCount>
      </PreCondition>
      <PreCondition>
        <Id>Null</Id>
        <Status>0</Status>
        <OperCount>0</OperCount>
      </PreCondition>
    </PreCondition>
    <ComponentStatus>0</ComponentStatus>
    <OperatorStatus>0</OperatorStatus>
    <OperatorProfession>0</OperatorProfession>
  </OperationItem>
  <OperationItem>
    <Dir>Null</Dir>
    <Id>10002</Id>
    <Status>0</Status>
    <Type>0</Type>
    <OperType>0</OperType>
    <OperTime>0</OperTime>
    <CDTime>0</CDTime>
    <OperatorAnim>0</OperatorAnim>
    <OperatorBeginPos>Null</OperatorBeginPos>
    <ReturnKnapsackId>Null</ReturnKnapsackId>
    <OperDistance>0</OperDistance>
    <ComponentStatus>0</ComponentStatus>
    <OperatorStatus>0</OperatorStatus>
    <OperatorProfession>0</OperatorProfession>
  </OperationItem>
</ArrayOfOperationItem>

不同类型操作项

  1.  Button

    只有普通点击事件

  2. Toggle

    有选中和未选中状态

  3. Slider

    取值范围固定,最小值0最大值为100。Status的值为默认值,取值范围为0~100

  4. Dropdown

    同UGUI的dropdown,竖向排列

  5. Dropdown New

    横向排列的列表

  6. Button List

    横向排列的一组按钮。Status为默认值。若项中含有[Folder=true]标记时则在点击该项后自动折叠

Oper Items中每一项Text的内容,均支持富文本

每种类型均支持三种特殊的标记:[Color=red][Background=yellow][Font=22],分别为指定字体颜色、指定背景颜色和指定文字大小。Color可以写为十六进制表示,如3c45f6,内置的颜色值有:blackbluecyangraygreengreyredwhiteyellow

特殊标记对大小写敏感

DiffTypeOperation.gif

操作项点击事件

操作项点击后,将会向操作项所在的组件发送一条类型为SendType.MainToMain、senderObj为点击操作项的角色、eventType为操作项ID、param为操作项当前状态ID的一条消息。

using DM.IFS;
using UnityEngine;

public class Main : ScriptManager, IMesRec
{
    private void Awake()
    {
        sender.DebugMode = true;
    }

    public void RecMessage(SendType type, GameObject senderObj, int eventType, string param)
    {
        sender.Log(string.Format("组件[{0}]收到一条[{1}]类型的消息,发送者名称为[{2}],事件类型ID是[{3}],携带了参数:{4}",
            this.gameObject.name,
            type.ToString(),
            senderObj.ToString(),
            eventType,
            param == null ? "" : param));
    }
}

打包组件,将构建的资源放到对应目录下运行DM。

OperationClick.png

相关资源和代码可以在示例工程中找到