【IdeaVR2019快捷操作(四)】-python二次开发功能介绍

四、交互功能及python二次开发使用避坑


4.1 Python二次开发注意事项

由于内置图形化编辑器所做的功能有限,设置的主要事件功能比较少,主要有对节点颜色、颜色亮度、节点材质纹理、设置节点可见性、气味、节点手柄相替换、逻辑组合、逻辑结束九个属性事件,可以实现的功能是不是很多,所以我们可以使用Python进行开发,(软件支持Python二次开发)。
Python如何安装依赖库在在下面介绍,插上Python这个大平台就可以实现很多功能,当然在实现功能的同时需要对计算机图形学相关知识进行了解,以此来编写程序。我主要是使用Python与VScode编辑器对其他功能进行编写,并拖入图形化编辑器中协同使用。
Python程序的使用需要借助VScode编辑器进行开发。当我们安装好VScode之后,需要启动IdeaVR2019,点击菜单—工具—设置—脚本设置,将前面保存的 VSCode 安装路径复制到如下的位置,完成设置。如下图
在这里插入图片描述

在这里插入图片描述

这是我最为艰难的一部分,因为之前没有unity3D的开发经验,再加上网络上并没有这方面的教程,我真的是摸着石头走路,一步一步的进行摸索出来的教程,这是最为重要的部分,愿学弟学妹们在学习的过程中可以少走弯路。

4.1.1 内置Python

在进行二次开发的时候,里面内置的有一个帮助文档是要求我们进行Python下载安装,并设置使用Vscode进行开发。但在我进行了一星期的测试使用后,这个教程是有些许误解的。当时进行内置模板代码的使用时,我想测试一下其中的matplotlib包,因为要数据分析用,但一直没有导入成功。
直到最后,我在对软件安装文件进行浏览时,发现它内置python3.6.6,在ThirdPart文件夹里面,如下图。也就是软件已经安装了python,我们在编译的时候只需要选择对应python版本就行了。在vscode中按f1选择python解释器就可以使用了。
在这里插入图片描述

里面是没有配置matplotlib包的,你需要在cmd中使用python -m pip install matplotlib 下载,版本尽量用低版本的,我用的是2.2.5,其他的包也是类似(cmd需要切换到这个python文件夹)。再进行安装成功之后,拖入图形化编辑器,如果成功即可。
这是一个非常重要的事情,如果这个问题不明白,后续的二次开发只能修改它内置的模板文件,而其中的模板文件有一些是导入不成功的,原因就是缺少了包文件,或者包文件版本不匹配。
在这里插入图片描述
Python文件名字务必用英文,python文件的名字就是类的名字,务必用英文,命名之后就不要修改,修改之后因为名称和类的名字不一样导入不成功。如果修改了,请把class 后面的类名改成文件名。

4.1.2 python二次开发使用说明

Python程序的使用
(1) 首先我们打开交互编辑器,界面的左下角是 Python 脚本相关的 UI,可以直接拖入交互编辑器界面。
在这里插入图片描述
(2) 拖入节点之后会有创建脚本的提示,需要输入脚本文件的名称,文件命名规则与 Python 类命名规则一样,存储路径要求全英文字符。然后点击保存就可以创建脚本了。
在这里插入图片描述
(3)脚本单元创建好完成之后,就可以双击 Python 图形进行编辑,默认会打开我们内置的python编辑器进行编辑,我们也可以使用VScode常用编辑器进行编辑。
在这里插入图片描述


IdeaVR内置的其中Python代码
主要分为绑定节点类型,触发节点类型,事件类型节点。
(1)绑定节点
绑定节点类型交互编辑器UI部件如下图所示,顾名思义就是不用触发,不需要激活,运行之后就立即工作,与某个节点绑定,对这个节点进行操作。
在这里插入图片描述

import IVREngine  #导入内置工程文件
class teachBindNode:
    def __init__(self):
        self.node = None
        IVREngine.setType(IVREngine.ITR_NODE_TYPE.BIND_NODE)
    def OnGUI(self):
        IVREngine.addSocket(IVREngine.ITR_SOCKET_TYPE.NODE, True, "node")
    def Update(self):
        self.node.setRotateZ(16)

对应代码如上
第一行代码 import IVREngine,导入IVREngine,通过这个库我们可以控制场景的 节点,制作 UI 界面,控制动画播放,还有一些图形学的数学库。
class teachBindNode:表示声明了一个 teachBindNode 类(文件名必须也是teachBindNode),每一个脚本图标都是这个类的实例,这个类定义三个函数,第一个__init__(self)是这个类的构造函数,在创建或者拖入图标到交互编辑器中,这个函数会首先执行,self.node = None,这里声明了一个类成员变量 node,表示我们要控制的节点,因为还没有链接场景的节点,所以暂时赋值为 None,因为节点在其他函数体调用时会用到。
IVREngine.setType(IVREngine.ITR_NODE_TYPE.BIND_NODE) 调用了IdeaVR 的库,这个函数就是用来设置脚本图标的类型,这里根据字面意思可以看出这里设置了绑定节点的类型, 参数是一个枚举类型。
第二个OnGUI函数 主要是设定该脚本图形的端口节点和图形 UI,在这个例子中该函数 调用IVREngine库中的addSocket方法创建了一个ITR_SOCKET_TYPE.NODE类型的socket, 通过这个 socket 我们可以和场景中的节点链接起来,第二个参数 True 表示添加的 socket 在交互编辑器中的位置,如果是 False 表示在节点的右边。字符串’node’表示成员变量 self.node 的变量名这两个东西要一样才能实现通信。
第三个Update函数,在使用过程中,每一帧都会运行其中写的功能,函数体 self.node.setRotateZ(16)表示对链接的节点每一帧都会旋转 16 度。连接方式如图
在这里插入图片描述
(2)触发节点
触发节点类型在交互编辑器UI部件如下图所示,需要激活,需要触发,需要链接任务,类似于鼠标和键盘等激活方式,区别是激活方法需要你自己去在代码里面进行编写。

在这里插入图片描述

import IVREngine#导入工程文件
class chufa:
    def __init__(self):
        IVREngine.setType(IVREngine.ITR_NODE_TYPE.TRIGGER)#触发节点类型
    #激活方式
    def Update(self):
        if IVREngine.getMouseButton(0):
            IVREngine.next()

在 UpDate 函数中,通过一个 if 语句判定鼠标左键是否被按下(每一帧都会检测),按下了就会执行触发链接的交互编辑器节点,如下图连接的就表示会触发节点隐藏显示在代码中当执行到 IVREngine.next()后就会执行该触发连接的下一个事件图形。
在这里插入图片描述

(3)事件类型
在交互编辑器UI部件如下图所示,与触发器连接使用,对某个节点,视频等类型进行操作。类似于交互设置颜色,显隐等功能。
在这里插入图片描述

import IVREngine
class event:
    def __init__(self):
        self.node = None
        IVREngine.setType(IVREngine.ITR_NODE_TYPE.EVENT)#设置事件类型
    def OnGUI(self):
        IVREngine.addSocket(IVREngine.ITR_SOCKET_TYPE.NODE, True, 'node')
    def Update(self):
        self.node.setEnabled(0)#设置节点显影

下面介绍程序运行流程:
__init__脚本的构造函数,每次进入创建脚本图形或保存脚本时都会执行
OnGUI 拖入脚本进入图形化交互界面的时候函数会运行,用于设定脚本在图形化交互界面的图形样式,仅会在 Editor 端执行;
Start 在平台运行的时候点击的时候只运行一次,用于初始化,执行在__init__之后;
Update 在平台运行之后,每帧都会运行;
On Destroy 在平台运行结束时候执行,主要用于资源析构;
具体运行流程如下。
图3.4.14  UI界面运行流程图

当然在编写的时候不是说每个都长这样子,可以灵活运用进行设计,实现自己的功能即可。之后我会介绍一个UI登陆界面的设计,他就是不需要设置节点类型,开始就运行的一个程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值