AdvancedLocomotionSystemV4分析(二):攀爬系统
ALS系统的攀爬系统思路比较简单,播放蒙太奇配合位置的刷新。缺点是没有中间状态,意味着无法打断或者做平移等
后面我打算尝试改成加入中间过程的攀爬系统
AdvancedLocomotionSysemV4分析(一):移动和脚步IK
AdvancedLocomotionSystemV4分析(三):动作叠加
ALS系统的攀爬系统思路比较简单,播放蒙太奇配合位置的刷新。缺点是没有中间状态,意味着无法打断或者做平移等
后面我打算尝试改成加入中间过程的攀爬系统
AdvancedLocomotionSysemV4分析(一):移动和脚步IK
AdvancedLocomotionSystemV4分析(三):动作叠加
最近对UE4商城
AdvancedLocomotionSysemV4
进行了一波初步分析,感觉这个项目已经包含了大多数情况能用得到的动画表现,从移动表现中比较容易出问题的脚步问题到IK、攀爬、翻滚、布娃娃以及动作叠加等模块都有讲到打算参考这个项目的思路重新实现一边动画逻辑,顺便对其中重要的模块和知识点记录一下
这一篇先从基础的移动逻辑,包括转身、起跳等,再顺带看一下脚步IK的实现
AdvancedLocomotionSystem分析(二):攀爬系统
AdvancedLocomotionSystemV4分析(三):动作叠加
此文讲解如何使用Git版本的小乌龟插件
由于git默认的黑窗口对于部分开发人员特别是美术人员比较不太友好,所以很多人会选择使用可视化的TortoiseGit
(小乌龟)插件来协作开发
首先必须先安装git,
无脑下一步安装完毕,如需了解git如何使用,可以参考本人另外一篇文章
然后下载小乌龟插件,可以随意搜索下载,或者使用如下地址下载
无脑下一步安装,成功以后右键菜单会添加小乌龟按钮
先来一张最简化的流程图,上下两部分分别用文字或者命令来解释流程
如果有使用过SVN
的同学,在这里要说明git
与SVN
在使用上会多一步操作,也就是git
分布式特点的体现,
git
会有本地仓库一个概念,SVN
的Commit
意味着已经把本地修改推送到了远程服务器端,但是git
的commit
只是提交到本地仓库,在本地仓库存储着几乎与远程服务器同步的信息,包括所有文件信息、提交日志、分支信息等,也就意味着git
可以在没有网络的时候也同样可以维护着一个仓库内容,在需要的时候在同步到远程服务器,这一点对于人数比较多的团队协作开发是优于svn
的
在正常使用小乌龟之前,需要先配置一下环境
如果使用GitHub
仓库,需要到GitHub
去注册一个账号,比较简单此步忽略
如果是本地仓库的协作开发的,用已经搭建好的本地仓库ip去注册(例如192.168.1.111),然后需要管理员授权以后就可以参与开发
然后在开发之前,需要生成本地密钥,作为开发权限的一种判定
打开小乌龟安装目录,打开PuTTYgen
界面如下
用Generate
来生成密钥,或者如果你已经用git生成过密钥,就可以使用Load
选项来加载之前生成的私钥,记得勾选AllFile
选项
然后进入如下界面
用 SavePublicKey
和SavePrivateKey
按钮来保存一份本地的密钥文件,我这里把私钥保存为了toPrivate.ppk
文件
接下来进入下一步
打开软件Pageant
,双击以后如果没有出现窗口记得在右下角找到一个图标,打开以后如下窗口
点击AddKey
添加刚才保存的密钥(toPrivate.ppk
)
如果到这里之前的步骤提示你需要输入账户/密码的,这是git初始化的时候需要初始化账户,请参考我的git文档完成这一步
目前掌握的信息每次电脑启动时都需要手动添加key,此坑先留着,以后研究
至此,小乌龟的环境已经配置完毕
我在github
上有一个测试仓库,我们直接用此仓库来进行测试
地址为git@github.com:VJien/Test.git
右键GitClone
,输入URL,保持其他默认,点击OK
拉取成功
我们来对test.txt
文件做个修改,然后在新建要给文件 1.txt
test
文件里面我们加入一些字符串,保存以后该文件变为红色感叹号
在该目录下右键小乌龟选择Dif
,我们在同时用GitBase窗口来对比一下
看到如下提示,表示该文件被修改了
可以右键单击一个文件来选择回退(Revert)或者提交(Commit),似乎不需要Add
操作,对于新创建的文件1.txt
会不一样,一般需要先Add
再Commit
,对于用惯了黑窗口的我来说,这里还是有区别的
这里我们直接点击大窗口下面的Commit
提交测试一番
在Message
里输入本次提交的名称,记得输入容易查找的名称,万一以后翻看日志如果发现都是 一对0102之类的会很崩溃
点击Commit
显示成功
在该窗口上有Push
按钮,不过一般我们需要先Pull
合并远程仓库的内容(除非是单人开发)
无论是Pull
还是Push
都需要选择正确的分支,即上图的RemoteBranch
,因为不同的分支是用于不同功能或者人员使用的,同时也需要比对本地的分支信息
拉取成功以后可以在窗口按钮里找到拉取信息差异对比等,这个自行测试
然后是提交,一般选好分支,其他保持默认选项
先来一个所有功能的图
add
标记需要提交的文件,在GitBase
内是所有修改和新创建的都需要add的,在小乌龟里需要对新创建的进行add操作
创建新的分支和切换分支,类似GitBase
的git checkout -b 分支
/git checkout 分支
操作
回退操作,test
文件修改以后即红色感叹号的形况下,点击Revert
后见下图
选中点击OK以后就将此文件回退到之前版本
解决冲突,这个是新手非常头大的一个问题,也是经常会出现的问题
我在其他文件拉取了这个工程,然后对test
文件做了修改,然后回到此文件下同时对test
文件修改,这一操作就模拟了协作开发时的冲突问题
然后拉取以后就发生冲突了
然后点击resolve
选项进行处理
第一个选项可以看冲突信息,当然不是所有文件都可以看到;同时也可以在下图所示的地方选择使用哪个版本的内容
第3,4选项分别选择使用远程还是本地
解决完成后就再commit->pull->push操作,中间如果有警告出现可以忽略直接进行下一步
在合并分支之前,首先要确保本地有需要合并的分支信息,比如master
分支需要合并test
分支,但是test
分支是在远程电脑上创建的,本地还没有这个分支,那就先需要进行fetch
操作
然后就可以找到所有分支了
使用merge
操作就可以把test
分支合并到本地
虚幻商城有一个非常成熟而且有诚意的VR框架,涵盖了基本上VR可以用到的所有主流功能,同时也有PC和移动端的支持。
趁着项目需求借机分析一下这个框架,后续打算基于此扩展适用于项目的框架
2020.8.21:
1.纯蓝图+组件的思路搭建,使用起来不算麻烦也不能算太方便,学习成本还是有的
2.解耦做的不是特别的好,很多类之间有强依赖,少一个就报错
3.功能做的非常完善,该有的基本的有了
4.性能无实测,但是各类组件无脑Tick初步看有性能压力
5.部分内容比如地图、边缘发光、武器/弓箭交互等单独拎出来都是非常实用的功能
以上的这些都可以用EU_Widget
来生成
放置在场景中的具体对象,主要就是为了配置Info_Level
,在BP_GameInstance_Main
类中直接通过方法GetCurrentLevelClass
从此对象去要到Info_Level
用于加载子关卡,比如当前关卡是TestMainMap,LevelsToLoad设置为TestMap01,那么在进入TestMainMap后会自动加载TestMap01
切换关卡的选项,首先设置时间变量,如果是0就是瞬间加载,可以设置天空球贴图和背景色
关卡面板的UI布局信息,可以参考demo演示的布局,见下图
本地化文字有关的一个变量,此框架是用表格的方式设置本地化。
此变量作为DataTable的RowName读取表格
对应平台的pawn设置
LevelImage变量决定关卡在Map面板下的显示图片,如下图
维护后期效果的类,主要目的是用于高光显示,当然高光显示还有其他几个方式,只是后期方式效果比较好
玩家起始位置,内部主要实现了一个传送玩家并校准位置的方法
VR玩家需要继承自BP_Pawn_VR
或者BP_Pawn_VR_Char
,区别在于后者提供了一个半身小白人模型
自定义对应MotionController
的类,框架给的BP_MotionController_Hands
内通过4个ChildrenActor
分别实现模型、传送、菜单、移动功能,具体功能类如下
如果设置了Controller Mesh Override
,就会用相应的模型覆盖上面设置的模型
对应平台的按键映射
在配置按键映射的DataAssets内相关的teleport选项
RotateDerees
:对应按键映射中的TurnLeft
和TurnRight
的转向角度
按键的起始点在Pawn内,如下截图
调用到BP_MotionController
内的方法KeyInput
,然后遍历调用所有BP_MComp
组件的方法FunctionInput
,然后继承自BP_MComp
的组件各自实现/重写按键对应的逻辑,一般可以用一个Switch来做
如需要添加自定义按键事件,修改枚举Enum_Control_Function
即可
如图所示,框架默认给予2个RadialMenu事件,分别可以设置2个面板,
如图所示,手部内测的面板,通过设置该组件配置
一个次级面板,在RadiaMenu面板中如果指定了对应的类就可以触发此面板,比如指定了BP_Radial_Button_Pallet_Bookmarks
,在此组件内就可以配置相应的Bookmarks内容
此组件又非常多的功能,之后逐步细讲
首先要回顾一下Info_Level
类中有一个ActorInfos
列表,需要在里面添加所有需要用到的表
如上图所示,我们需要的DA_Test资源需要从PDA_ActorList
创建,此类是继承自PrimaryDataAsset
的蓝图类,内部就是创建了一系列变量;然后把这个资源放入Info_Level
内
然后我们右键自建蓝图类,CreateDatatableEntry
,主要选择标签和ActorList
,创建后自动生成基础的DataAsset,即可添加到之前创建的DA_Test
内
然后我们以Map_Demo_UI
关卡做测试,找到类BP_Pallet_ObjectDropper
的Comp_UI_Pallet
组件,配置如下
运行以后就得到如下结果
关于选择的组件,比较基础也比较有用
对于VR玩家,默认使用Trigger
按键类出发select功能
对应上面的变量SelctionTypes
,点击以后就自动生成按钮
自定义PressSelect
事件就可以
需要配合组件Comp_ListenToTrigger
使用,点击以后Comp_ListenToTrigger::TriggerSingle
能执行
可以设置ActorsToTrigger
变量来让其他类收到Listen消息
设置ComponentTagToSearch
可以对类内的不同模型进行筛选
详情请看后面的Comp_WindowObject
配置请看后面的Comp_Visual
,区别于SelectMenu+VisualChange
的组合,如果直接指定Visual
则是直接切换,无菜单提示
配合光源和Light组件一起使用
详情请看后面的Comp_Open
详情请看后面的Comp_Active
拖拽组件,可以平移和旋转拖拽,一般需要配合Latch
组件来使用
在被拖动的模型中加入插槽AttachPoint
来指定交互点
确保交互模型可以被射线检测到
挂上Comp_Drag
,然后需要配合Comp_Latch
使用,该组件可以使用默认值
在交互模型中加入以上2个组件所需要的tag,默认为Drag,Latch
可以配合Comp_ListenToServer
使用,可以监听每次到达极值的时间,或者Tick的Drag事件
同一个类下可以挂载多个Drag组件来拖动不同的模型组件,记得修改identifier
和ComponentTagToSearch
,也需要修改Latch组件的ComponentTagToSearch
变量,也不要忘记区分不同模型的Tag
如果是spline模式,在类内创建一个spline组件
抓取组件,对于VR玩家可以有射线和接触抓取两种方式,不过具体的功能会有区别,见下图
PhysicsHandle
的抓取机制,一般的需要把模型放到root位置KeyInput
和Thumbsticks
方法中配合Grab组件一起使用,目的是
需要特别注意的是,需要设置此组件的朝向问题,默认是X轴检测
特殊的吸附配套组件,后者吸附到前者
最终效果
在之前Grab组件中已经有用到,主要作用是用来锁定位置
主要设置就是LatchType
除了上面的Grab用到的功能,该组件还有其他作用
设置为Light
模式,需要配合组件Comp_Light
使用,在类内需要至少给一个光源,对于多个光源可以一起被作用
测试类如下图
如果使用
ListenToSingle
模式那么对于Drag过来的事件按50%作为临界点开关
详情请看后面的Comp_Active
详情请看后面的Comp_Open
详情请看后面的Comp_WindowObject
配合其他可以发送active事件的组件使用,如select.
该组件可以收到事件ActiveStateChanged
和ConstActiveStateChanged
,自行实现后续的逻辑
配合其他可以发送Open事件的组件,比如Select或者Drag组件,来实现移动、旋转或者缩放的操作
需要将key的值对应到交互模型的tag
可以通过Listen组件来监听其他类的事件发送
一般搭配Drag组件来模拟按钮效果
如上图所示,绿色模型开启overlap效果,增加tag成员overlap
,drag
抓取其他物件对绿色部分overlap以后就能模拟按钮效果
主要是文字和图片说明的窗口,可以配合Select组件展示
需要注意的是挂载此组件的类必须注册到PDA_Actor_List
里面,否则框架没有判空直接报错,具体请看之前Info_level
以及Data_Assets
内容
改变外观的组件,一般配合select组件的selectionMenu
模式,然后在SelectionTypes
内添加VisualChange
成员来实现
封装了UMG的组件,同时方便于交互
Widget_Button
Button
我们创建一个继承自Widget_Pallet_Button_Normal
的UMG,直接放入测试UMG中,监听Pressed
事件即可得到点击事件
创建一个Button,点击交互后就可以走到Pressed
事件
要注意
Clicked
事件无效
待补充….
小地图的使用,分为2D和3D两种模式
在需要显示在地图上的类中需要挂载组件Comp_MapLocation
设置Icon及尺寸,以及是否支持旋转缩放等选项
SubstitueMaterial可以用来覆盖原有材质,让物体在小地图里显示特殊材质
然后需要若干个地面,用框架中的类BP_Floorplanmeasurement
指定贴图,该贴图最好跟场景的样貌匹配,给定FloorName,用于显示在面板上的名称
使用类BP_2DMap
,直接拖入场景中即可,记得设置InitTab
使用类BP_3DMap
,拖入场景中以后需要给与变量Measurement
一个地面单位即可显示3D地形;
或者直接使用Comp_Child_3DMap
也是一样的,记得把地形的缩放拷贝到这个类的缩放中,不然会导致变形
第一步我们需要将虚拟机的网络模式修改为桥接模式
,并且勾选复制物理网络连接状态
选项
ubuntu在20.4版本以后修改IP的方法与之前的有了比较大的区别,在之前的版本是通过编辑/etc/network/interfaces
文件去修改IP,在新版本以后修改的配置文件是
/etc/netplan/01-cloud-init.yaml
,这个01
可能每个人不相同,网上有些人是00,我这边是01
所以,我们用用sudo vim /etc/netplan/01-network-manager-all.yaml
打开,输入以下指令
1 | # Let NetworkManager manage all devices on this system |
上面的222是你自己设定的IP地址,前面需要参考你真是物理IP的情况
然后输入sudo netplan --debug apply
应用
然后通过ifconfig
查看IP
git 是一种基于命令的版本控制系统,全命令操作,没有可视化界面
gitlab 是一个基于git实现的在线代码仓库软件,提供web可视化管理界面,通常用于企业团队内部协作开发
当然还有github也可以用作代码仓库,较多用于个人
git的使用和安装推荐本人另外一篇博客git使用指北
推荐下载VMwareWorkstation,可以到官网下载,然后百度搜索绿色方法
然后我们安装Linux镜像,本人使用的是Ubuntu20.4版本,这个网上一搜一大堆,随意选择版本,初学者可以选择桌面版本,如这里下载
然后一路安装,运行,设置root账户等
这里推荐虚拟机的使用2核,至少使用超过4GB的内存,本人直接上40GB
如果是桌面版,右键进入终端,非桌面版忽略
1 | sudo apt update |
1 | cd /tmp |
到tmp
目录安装gitlab,当然你可以自己选择目录
1 | sudo bash /tmp/script.deb.sh |
该脚本将设置您的服务器以使用GitLab维护的存储库。这使您可以使用与其他系统软件包相同的软件包管理工具来管理GitLab。完成后,您可以使用以下apt
命令安装实际的GitLab应用程序
1 | sudo apt install gitlab-ce |
此条命令将在系统上安装必要组件
如果在安装gitlab使有如下报错,可以今夏如下操作
1 | # apt-get install gitlab-ce |
修改安装脚本
1 | sudo vim /etc/apt/sources.list.d/gitlab_gitlab-ce.list |
OLD
1 | deb https://packages.gitlab.com/gitlab/gitlab-ce/ubuntu/ focal main |
NEW
1 | deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu focal main |
再次执行
1 | sudo apt update |
参考链接:https://gitlab.com/gitlab-org/gitlab-foss/-/issues/2370
1 | sudo ufw status |
检查防火墙状态,如果没有防火墙需要apt安装
1 | sudo ufw allow http |
然后通过上述3条命令让防火墙支持http\https\OpenSSH
再次检查以后大概会有如下状态
1 | Status: active |
1 | sudo vim /etc/gitlab/gitlab.rb |
该文件比较大,在顶部找到``external_url `,按照如下注释修改
1 | external_url 'https://example.com' // 此处修改为您的域名或ip地址,不用加端口 |
然后查找letsencrypt['contact_emails']
,如果没有先忽略跳过,如果有则进行如下修改
1 | letsencrypt['contact_emails'] = ['sammy@example.com'] // 此处修改为您的邮箱地址 |
然后重新配置GitLab
1 | sudo gitlab-ctl reconfigure // 每次修改配置文件都需要重新配置 |
本人在这一步遇到一个报错,最后一句是
Please upgrade your ACME client to a version that supports ACMEv2 / RFC
解决方法是在
/etc/gitlab/gitlab.rb
中添加letsencrypt['enable'] = false
重启
1 | sudo gitlab-ctl restart |
常用命令 | 说明 |
---|---|
sudo gitlab-ctl reconfigure | 重新加载配置,每次修改/etc/gitlab/gitlab.rb 文件之后执行 |
sudo gitlab-ctl status | 查看 GitLab 状态 |
sudo gitlab-ctl start | 启动 GitLab |
sudo gitlab-ctl stop | 停止 GitLab |
sudo gitlab-ctl restart | 重启 GitLab |
sudo gitlab-ctl tail | 查看所有日志 |
sudo gitlab-ctl tail nginx/gitlab_acces.log | 查看 nginx 访问日志 |
sudo gitlab-ctl tail postgresql | 查看 postgresql 日志 |
systemctl enable gitlab-runsvdir.service | 开机启动 |
systemctl disable gitlab-runsvdir.service | 禁止开机自启动 |
在Web浏览器中访问GitLab服务器的域名:
1 | https://example.com // 您external_url配置的地址 |
第一次访问需要设置管理员密码,记得保存,之后如果没有gitlab账户就需要创建一个并登陆,然后就可以正常创建项目了
有时候因为各种原因需要修改仓库端的虚拟机ip,也就意味着gitlab需要修改ip地址
这些操作很基础,在上面也讲了,但是修改IP以后本人发现原有的证书就无效了,应该是第一次部署的时候默认会生成我们IP对应的证书,我这边的第一次部署的ip地址是192.168.1.111
如下图
后面因为网段改为了2,所以整体把虚拟机和gitlab地址都改成了2段,然后运行gitlab就发现如下日志
直接告诉我招不到证书文件,于是翻遍资料最后找到一个粗暴的方法,手动生成证书文件
1 | openssl req -nodes -newkey rsa:2048 -keyout 192.168.2.110.key -out 192.168.2.110.csr |
上面的ip地址需要替换你对应的地址
私钥会提示输入密码,记住了跟着提示输入
输入以后跟着提示输入你的信息,我这边老老实实的输入了正确信息,不确定可否随意输入
1 | Country Name (2 letter code) [XX]:CN |
1 | cp -v /etc/gitlab/ssl/192.168.2.110.{key,original} |
1 | openssl x509 -req -days 1460 -in /etc/gitlab/ssl/192.168.2.110.csr -signkey /etc/gitlab/ssl/192.168.2.110.key -out /etc/gitlab/ssl/192.168.2.110.crt |
1 | chmod 600 /etc/gitlab/ssl/192.168.2.110.* |
有文章提示可以删除
.csr
文件,我这里没删除也没遇到问题如果需要删除,运行
rm -v /etc/gitlab/ssl/192.168.2.110.csr
然后重新配置gitlab,重启gitlab就可以了
创建仓库流程于github非常类似而且非常简单
然后我们需要为项目添加成员,如下图输入其他成员的邮箱或者用户名,添加以后其他用户自己登陆后也能看到项目了
完成仓库操作以后可以添加SSH Key来允许用户提交
然后我们可以在windows端clone下来,就可以正常git流程操作了
本文主要介绍UE4下的JSON文件的读写
首先我们需要扩展普通的文件读写方法
1 | bool UTestLib::V_LoadStringFromFile(const FString& FileName, const FString& RelativePath, FString& result) |
此方法是以工程目录下的Content路径为基础的,如果需要指定其他路径就需要替换 FPaths::ProjectContentDir()
方法或者干脆直接把整个路径给公开
本文描述了如何简单的创建自定义的视图和节点
后续补充具体功能开发
创建插件TestGraph
1 | "Projects", |
在模块类里声明2个变量
1 | class UEdGraph* GraphObj;//图表实例的类型,定义了该图表的行为(例如保存图表 |
构造GraphObj
,指定GraphObj
内的Schema
创建GraphEdSlate
,同时把GraphObj
指定给GraphEdSlate
1 | GraphObj=NewObject<UEdGraph>(); |
在返回中添加次Slate
类
1 | return SNew(SDockTab) |
EdGraphSchema
里定义了图表操作的大部分全局行为FBlueprintEditorUtils::CreateNewGraph
中将UEdGraph
和EdGraphSchema
建立映射FEdGraphSchemaAction
类主要执行了一个PerformAction
,用于生成UEdGraphNode
生成节点
1 | UEdGraphNode* FTestGraphSchemaAction::PerformAction(class UEdGraph* ParentGraph, UEdGraphPin* FromPin, const FVector2D Location, bool bSelectNewNode /* = true */) |
右键点击空白页面,用于创建选择节点
1 | void UTestGraphSchema::GetGraphContextActions(FGraphContextMenuBuilder& ContextMenuBuilder) const |
如上图,显示3个对应的名称
右键点击节点后的效果,产生例如BreakLink
之类的效果
此方法在4.24版本(不确定之前哪个版本开始)有更改如下
1
2 virtual void GetContextMenuActions(class UToolMenu* Menu, class UGraphNodeContextMenuContext* Context)const//新版本
void GetContextMenuActions(const UEdGraph* CurrentGraph, const UEdGraphNode* InGraphNode, const UEdGraphPin* InGraphPin, class FMenuBuilder* MenuBuilder, bool bIsDebugging) const; //旧版本
1 | void UTestGraphSchema::GetContextMenuActions(class UToolMenu* Menu, class UGraphNodeContextMenuContext* Context) const |
1 | UENUM() |
重写CanCreateConnection
设置节点的连接方式
1 | virtual const FPinConnectionResponse CanCreateConnection(const UEdGraphPin* A, const UEdGraphPin* B) const |
使用自定义的类FTestConnectionDrawingPolicy
来定义连接方式
1 | class FConnectionDrawingPolicy* UTestGraphSchema::CreateConnectionDrawingPolicy(int32 InBackLayerID, int32 InFrontLayerID, float InZoomFactor, const FSlateRect& InClippingRect, class FSlateWindowElementList& InDrawElements, class UEdGraph* InGraphObj) const |
EdGraphNode
是图表节点实例的类型,定义了节点的行为AutowireNewNode
定义了节点的自动连接行为( 参考上述在schema创建的时候调用)class UTestNode_Hello :public UEdGraphNode
重写2个方法
AllocateDefaultPins
:用于创建节点
GetNodeTitle
:标题
可以参考系统的节点
目录大多在
\Engine\Source\Editor\GraphEditor\Public\KismetPins\
1 | void UTestNode_Hello::AllocateDefaultPins() |
此类是用于显示具体效果的
1 | void Construct(const FArguments& InArgs, UEdGraphNode* InNode);//构造跟默认slate不一样 |
1 | GraphNode= InNode;//自带的变量,存储对应的UEdGraphNode |
1 | void STestNode::UpdateGraphNode() |
2种方式,可以手动指定Pin,也可以使用系统的Pin
1 | //手动指定所有Pin |
1 | //使用系统的Pin |
用来设置Pin的显示和布局
如果不重写,就使用系统自带的Pin(非常的小)
1 | void STestNode::AddPin(const TSharedRef<SGraphPin>& PinToAdd) |
继承自FConnectionDrawingPolicy
1 | //.h |
1 | void FTestConnectionDrawingPolicy::DetermineWiringStyle(UEdGraphPin* OutputPin, UEdGraphPin* InputPin, /*inout*/ FConnectionParams& Params) |
如果不重写就使用默认的贝塞尔曲线
1 | //绘制直线+流动的泡泡 |
可以用工厂类来注册Node,Pin,ConnectionPolicy
重写如下方法
1 | virtual TSharedPtr<class SGraphNode> CreateNode(class UEdGraphNode* Node) const { return NULL; } |
1 | TSharedPtr<class SGraphNode> FTestNodeFactory::CreateNode(class UEdGraphNode* Node) const |
然后在模块加载的时候注册,这样就可以去掉在schema内的内容
1 | FEdGraphUtilities::RegisterVisualNodeFactory(MakeShareable(new FTestNodeFactory)); |
1 | //virtual class FConnectionDrawingPolicy* CreateConnectionDrawingPolicy(int32 InBackLayerID, int32 InFrontLayerID, float InZoomFactor, const FSlateRect& InClippingRect, class FSlateWindowElementList& InDrawElements, class UEdGraph* InGraphObj)const override; |