Unreal Engine 4 SLG阵型创建学习笔记

阵型创建

方阵的创建

  • 先建立一个Actor类蓝图
  • 所用到的Blueprint:
    • for loop:循环
    • make actor:形成一个向量
    • add arrow component:添加一个箭头组件
  • 小技巧:在变量的类别(Category)处输入"名称|名称"格式可以使得开启展开编辑第二层的变量
    在这里插入图片描述
  • 使图形居中算法
    • 用原生成好的阵型X,Y向量减去X,Y向量除以了二之后的向量坐标
      请添加图片描述
  • 运行结果
    在这里插入图片描述

方阵小节

  • Category:输入"名称|名称"打开第二层变量编辑
  • 阵型居中算法:原生成的XY坐标减去XY坐标的二分之一
  • add arrow(箭头) component(组件) :添加一个箭头组件

折阵创建

  • 新建一个枚举类型变量方便后面阵型切换
    在这里插入图片描述
  • 所用到的Blueprint:
    • for loop:循环
    • make actor:形成一个向量
    • add arrow component:添加一个箭头组件
    • sequence:序列,可以同时进行操作
  • 折阵原理
    • 首先用一个循环建立一列出来
    • 然后第一个循环结束后,创建一个序列同时去执行两条侧翼的算法
    • 最后添加一层循环将第二步数量增多
      在这里插入图片描述

折阵第一步

  • 首先我们需要建立出一列
    在这里插入图片描述
    在这里插入图片描述
  • 我们使阵型居中,计算中心距算法
    • 设原坐标为X
原坐标-原坐标的二分之一(X - X / 2)

在这里插入图片描述

在这里插入图片描述

  • 我们可以将计算中心距打包成一个函数,勾上Pure(形容词:纯的,不掺杂质的)可以使其变成一个纯函数
    在这里插入图片描述

折阵第二步

  • 我们在第一层循环结束后,开始去序列展开它的侧翼,算法思路就是,每一层X数量要依次递减,然后Y轴间距依次递增
    在这里插入图片描述

    • 运行结果
      在这里插入图片描述
  • 因为我们之前有使用居中算法,所以这里我们需要加上中心距
    在这里插入图片描述

    • 运行结果
      在这里插入图片描述
  • 左翼也如此,只不过此时的左翼的Y间距是负方向的,而中心距要被减去
    在这里插入图片描述

    • 运行结果
      在这里插入图片描述

折阵第三步

  • 这一步为整个成形的阵型添加X的数量,算法思路,添加一个for循环在最前面然后将X的数量坐标加到各个步骤里面
    在这里插入图片描述
    • 运行结果
      在这里插入图片描述
  • 此时方阵的数量已经完整显现出来,再就是将这个X排数量加到侧翼里面去
    在这里插入图片描述
    • 运行结果
      在这里插入图片描述
  • 一个折阵阵型就展现了出来

折阵小节

  • 中心距算法:原坐标-原坐标的二分之一。即:(X - X / 2)
  • 向下增加X数量时记得乘以-1
  • 拓展
    • 如果要一个actor去切换阵型,我们需要添加一个enumeration(枚举)变量
      在这里插入图片描述
    • 采用switch来选择
      在这里插入图片描述
    • addunique:添加项在数组
    • 将每一个添加的组件放到数组里面去,方便日后好管理
      在这里插入图片描述
    • 记得在运行前要清除一下数组,以免调用这些函数的时候导致未知的错误
    • clear:清除一个数组删除所有内容
      在这里插入图片描述

三角阵的创建

  • 介绍两种创建三角阵的算法

第一种三角阵算法

  • 所用到的Blueprint:
    • for loop:循环
    • make actor:形成一个向量
    • add arrow component:添加一个箭头组件
  • 第一种三角阵原理:首先我们利用两个for循环创建一个正方向直角三角阵,第一层for循环的下标被总循环数量减去是第二层for循环的结束变量,然后让三角形每一列向右边移动底层间距的一半,第一次移动0次,第二次移动一次,第三次移动二次依次类推
    在这里插入图片描述
第一种三角阵第一步
  • 首先利用两个for循环建立出一个直角三角形
    在这里插入图片描述
    • 运行结果
      在这里插入图片描述
第一种三角阵第二步
  • 让原位置加上每次移动的行间距距离
    在这里插入图片描述
    • 运行结果
      在这里插入图片描述
  • 使三角形居中算法,让原位置减去原位置的一半(X-X/2)
    在这里插入图片描述
    • 运行结果
      在这里插入图片描述

第二种三角形算法

  • 所用到的Blueprint:
    • for loop:循环
    • make actor:形成一个向量
    • add arrow component:添加一个箭头组件
  • 第二种三角阵原理:实现还是两个for循环构建一个上直角三角形第一层for循环的下标是第二层for循环的结束,然后这两个循环循环结束后,接上两个循环反方向的上直角三角形向下移动一个单位每一行的单位减一然后抹除最后一行,就是一个完整的三角形了。

在这里插入图片描述

第二种三角形第一步
  • 利用两个for循环构建一个上直角三角形
    在这里插入图片描述 + 运行结果可能是倒过来的
    在这里插入图片描述
  • 我们把视角拉过来就行
    在这里插入图片描述
第二种三角形第二步
  • 这一步很乱,我们需要来搞清楚一下逻辑
  • 我们把X看作是下,Y看作左
    • 首先我们要减少一步,所以在X数量减一的基础上再次减一来抹除最后一行
    • 然后第三个for循环的下标乘以X间距加上原来间距也就是向下移动一个单位
    • 最后第四个for循环的下标乘以Y间距乘负一(这也就是反方向)加上X间距乘以负一(反方向)就行了
      在这里插入图片描述
    • 运行结果
      在这里插入图片描述

三角阵小节

  • 两个三角形的形状不一样所以注意循环做直角三角形的时候注意算法不一样
  • 第一个三角阵的居中算法原坐标-原坐标的二分之一。即:(X - X / 2)
  • 第一种三角阵是让直角三角形每一层向右方向挪移,第二种三角阵是两个上三角阵组拼一起,第二个上三角阵向下挪移,除去最后一层

圆阵创建

  • 所用到的Blueprint:
    • for loop:循环
    • make actor:形成一个向量
    • add arrow component:添加一个箭头组件
    • rotate vector around axis:返回一个绕一个向量旋转的结果,就是使用向量绕某个轴旋转
    • select:选择语句
  • 圆阵原理:为了实现圆的实现,虚幻为我们提供RotateVectorAroundAxis函数(绕某个轴旋转)让我们容易实现,首先我们先用一个for循环建立一个基本圆,然后用一个for去循环基本圆的数量,注意半径的变化。由于难以解释直接看步骤会比较清晰一些。

圆阵第一步

  • 先用一个简单循环去创建一个圆
    在这里插入图片描述
    • 运行结果
      在这里插入图片描述

圆阵第二步

  • 再用一个循环增加圈数,这里注意半径的变化,所以我们将半径提取成一个变量,和圈数的下标进行相乘得到不同的半径位置,注意圈数的开始循环从一开始,圈数变量就不用减一了,因为0乘然后数都得0,所以圈数开始时从1开始
    在这里插入图片描述
    • 运行结果
      在这里插入图片描述

圆阵第拓展三步(填充)

  • 此时的圆阵看着很疏松,我们可以在第一层循环上,让圈数下标去乘以圆阵数量,注意这里半径也要变化,因为圆阵数量变了,半径也要随之改变
    在这里插入图片描述
    • 运行结果
      在这里插入图片描述

圆阵拓展第四步(创建一个接口选择是否填充)

  • 增加两个select语句,去判断是否选择填充
    在这里插入图片描述
    • 运行结果
      在这里插入图片描述

圆阵拓展第五步(创建一个半圆)

  • 先将圆的度数提取出来为变量,将这个变量的取值范围控制在[0,360]之间,这样我们可以去判断圆度数是360就不需要让圆数量的循环加一次,因为整除特性向下取整,我们半圆看着会少一个,就让它多一次循环,但是360度时就不会,所以360以下全部加一次循环,也就是一个完整的半圆了,还是用select语句,如果圆度数是360无变化,否则让循环加1
    在这里插入图片描述

在这里插入图片描述

  • 附一张高清
    请添加图片描述
    • 运行结果
      在这里插入图片描述

圆阵小节

  • rotate vector around axis:返回一个绕某个轴旋转的结果
    • rotate:v.(使)选择
    • vector:n.矢量,向量
    • around:adv.围绕
    • axis:n.轴,轴线
  • 注意圆阵数量改变时,一定要注意半径也要随之更改
  • 增加圈数时,开始标要为1,因为0乘任何数为0,就会在一开始时候出现没必要的bug
  • 半圈时,不是360度,箭头会少一个,这是因为整除特性,所以我们要加一个箭头,来达到视觉上的正确

自定义阵型01

  • 所用到的Blueprint:
    • for loop:循环
    • add arrow component:添加一个箭头组件
    • get section from static mesh:获取静态网格资源
    • set world scale 3D:设置组件中的相对缩放,使其在世界空间中处于提供的比例中
  • 自定义阵型01原理:就是利用在建模软件上建立好的模型采用UE提供的函数get section from static mesh获取网格资源来进行遍历这些点信息然后添加组件上去

自定义阵型01第一步

  • 我们首先需要导入一个模型,这个模型上的点需要自己在建模软件上勾画好的。

自定义阵型01第二步

  • 因为有了直接模型,我们可以直接使用get section from static mesh函数来获取它所有点的位置信息,然后用for循环将其都进行遍历箭头组件,但是需要注意的是,这样做到时候缩放模型的时候,这些箭头也会跟着缩放,所以我们需要使用set world scale 3D函数来设置组件的缩放大小。
    在这里插入图片描述
    • 运行结果
      在这里插入图片描述

自定义阵型01小节

  • 这种阵型有局限性,需要在建模软件里面将模型信息建立好,才能使用get section from static mesh函数来获取其信息
  • set world scale 3D:可以设置组件大小
  • get section from static mesh:获取静态网格信息
    • section:n.部分

自定义阵型02

  • 所用到的Blueprint:
    • for loop:循环
    • add arrow component:添加一个箭头组件
    • set collision enable:设置组件的碰撞类型
    • set visibility:设置组件的可见性
    • set static mesh:设置静态网格材质
    • get material:获取材质
    • set material:设置材质隐藏
    • get actor transform:获取自身actor位置
    • transform location:局部空间转世界空间
    • line trace for objects:对象直线跟踪(根据碰撞类型进行跟踪)
    • inverse transform location:世界位置转局部位置
  • 自定义阵型02原理:就是拿一个没有点信息的模型,去采用物理碰撞,来检测到这些点,然后进行添加组件在这些点信息上。

自定义阵型02第一步

  • 首先我们可以添加一个mesh进来,让这个模型不可见也没有碰撞
    在这里插入图片描述
    在这里插入图片描述

自定义阵型02第二步

  • 当选择自定义02的时候就打开它的检测但是无物理碰撞与可见
    在这里插入图片描述

  • 设置它的碰撞的通道为载具(自己设置即可推荐是不常用的碰撞类型)在这里插入图片描述

自定义阵型02第三步

  • 首先把模型的碰撞类型要改成复杂碰撞类型最精密的碰撞
    在这里插入图片描述

  • 现在可以建立一个矩阵的线段去检测碰撞点,记得要转换空间类型,设置好矩阵范围,然后使用居中算法将矩阵居中在模型上
    在这里插入图片描述

自定义阵型02第四步

  • 现在我们可以去把检测到的位置信息去添加上组件,记得要世界位置转局部位置。
    在这里插入图片描述
    • 运行结果
      在这里插入图片描述

自定义阵型02第五步

  • 现在导入一个没有点信息的模型上去,也能检测到信息然后添加上组件
    在这里插入图片描述
  • 然后如果要隐藏模型,在都结束后,可以使用材质隐藏,直接隐藏模型可能会出bug,如果模型有多个材质球,可以用循环遍历隐藏模型
    在这里插入图片描述
  • 最后导入进来的新模型也要加上复杂碰撞
    在这里插入图片描述
    • 运行结果
      在这里插入图片描述

自定义阵型02小节

  • 注意检测时的位置转换
  • 使用材质隐藏不容易出现碰撞bug,如果是多材质球就循环去隐藏
  • 对于模型记得开复杂碰撞类型才能更好去检测碰撞

箭头朝向

  • 所用到的Blueprint:
    • branch :if语句
    • for each loop:数组的循环
    • get actor transform:获取actor位置
    • get world location:获取组件的世界位置
    • transform location:局部位置转世界位置
    • find look at rotation:为起始位置对象找到指向目标位置的旋转(朝向一个方向)
    • set world rotation:设置世界空间组件的旋转
  • 原理思路:建立一个游标对象,使用UE提供的函数来向游标旋转。

箭头旋转第一步

  • 先建立一个actor变量,打开show 3D widget,这样在世界空间里面就会有一个游标
    在这里插入图片描述
    • 运行结果
      在这里插入图片描述
  • 然后使用一个if语句来判断是否打开朝向,使用for循环来将组件的朝向一律变换,获取组件世界位置,获取目标点位置,目标点位置注意局部转换,然后使用find look at rotation函数来找到朝向旋转的位置,最后设置组件旋转即可
    在这里插入图片描述
    • 运行结果
      在这里插入图片描述

箭头旋转第二步

  • 如果需要将箭头翻转朝向,我们可以将旋转的z轴减去一个180
    在这里插入图片描述
    • 运行结果
      在这里插入图片描述

箭头朝向小节

  • UE有提供专门旋转的函数可以供给旋转
    • find look at rotation:为起始位置对象找到指向目标位置的旋转(朝向一个方向)
    • set world rotation:设置世界空间组件的旋转
  • 箭头反向时将旋转的方向z轴减去180即可
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值