cryengine3 C++添加结点,制作插件

有两种方法可以添加结点:

1.在code/solutions目录下编译sln文件,如CryEngine_GameCodeOnly.sln,编译成功后,添加结点直接在Flownodes目录下。定义类,有相应的模板文件可用。最终生成CryGame.dll(不同版本输出不同),相当于编译了Editor文件,自定义结点称为原程序自带部分,但这样容易影响程序其它部分。


2.写独立的plugin,即自定义结点,用vs建立项目,会有cryengine wizard向导,工程建立在code目录下,最后在Bin64/Plugins目录下有相应的dll文件,在vs中可通过"项目属性"查看设置,x86/x64,release/debug等。(注:一般debug版本比release版本大很多,且没有代码优化,导致加入定义插件后帧率低,速度慢,建议release版) 这种方法,工程文件一般只有3个.cpp+3个.h文件,但引用了code目录中其它文件,比如Code\CryEngine\CryCommon,CryAction等,在vs项目属性命令行中,可以看到-I等文件包含命令。flownode结点添加同第一种方法。


单独开发插件,需要安装Plugin_SDK(code目录中有相应文件夹),其中Plugin_SDK/project/Plugin_Settings.props文件,显示了vs开发cryengine插件的项目基本属性,包括--引用的文件位置,输出dll文件位置等,是对所有开发插件公用的文件!


两种方法都可以调试,vs项目属性,“调试-》命令”,设置后可以在vs中打开Editor,加入断点,在flowgraph中调试,运行到断点可直接在vs中通过监视,调用栈等查看实时信息。


定义结点模板如下:

#include  "StdAfx.h"  
#include "Nodes\G2FlowBaseNode.h"  
class CTutorialNode :public CFlowBaseNode < eNCT_Instanced >  
{  
    enum EInput// 输入端与输出端  
    {  
        EIP_Activate,  
        EIP_Left,  
        EIP_Right  
    };  
    enum EOutput  
    {  
        EOP_Result  
    };  
      
      
    //核心运算  
    //端口被触发时调用,我们大部分都在这个地方写逻辑  
    virtual void ProcessEvent(EFlowEvent evt, SActivationInfo *pActInfo)  
    {  
        switch (evt)  
        {  
        case IFlowNode::eFE_Activate://激活  
        {  
            if (IsPortActive(pActInfo, EIP_Activate))  
            {  
                float left = GetPortFloat(pActInfo, EIP_Left);  
                float right = GetPortFloat(pActInfo, EIP_Right);  
                float ans = left * right;  
  
                //把ans值更新到输出端口数组  
                ActivateOutput(pActInfo, EOP_Result, ans);  
            }  
        }  
            break;  
  
        }  
    }  
  
      
    //配置节点的显示,输入和输出  
    virtual void GetConfiguration(SFlowNodeConfig &config)  
    {  
        static const SInputPortConfig inputs[] =  
        {  
            InputPortConfig_Void("Activate", "MyDes:Trigger the calculation"),  
            //端口名,默认值,描述  
            InputPortConfig<float>("Left", 0, "MyDes2:The left side of the calculation"),  
            InputPortConfig<float>("Right", 0, "MyDes2:The right side of the calculation"),  
            { 0 }  
        };  
        static const SOutputPortConfig outputs[] =  
        {  
            OutputPortConfig<float>("Reslut", "The Result of the calculation"),  
            { 0 }  
        };  
  
        config.pInputPorts = inputs;  
        config.pOutputPorts = outputs;  
        config.sDescription = _HELP("Multiplies two numbers");  
        config.SetCategory(EFLN_APPROVED);  
  
    }  
  
    //其它。。  
    //这个函数并不需要我们重写任何的实现,我们在在内存为这个函数只需要添加一个声明  
    virtual void GetMemoryUsage(ICrySizer *s) const  
    {  
        s->Add(*this);  
    } 
      
};  
REGISTER_FLOW_NODE("Tutorial:Multiplier", CTutorialNode);//注册  
  
附结点类型:<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
enum ENodeCloneType  
{  
    //单例,只能产生一个实例  
    eNCT_Singleton,     // node has only one instance; not cloned  
      
    //创建实例  
    eNCT_Instanced,     // new instance of the node will be created  
      
    //创建相同的复制版  
    eNCT_Cloned         // node clone method will be called  
};                                                     --http://m.blog.csdn.net/blog/u011707076/41724039

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值