UE4入门笔记
UE4入门学习笔记 1:与processing编程语言对比学习
Processing和UE4
processing是一门基于java的面对对象编程语言,有关于oop的封装继承和多态的概念,同时IDE简洁易用,适合入门编程以及了解oop(面对对象编程)。
UE4不多说,其蓝图的很多概念在学习过程中发现与C++的概念类似,c++也是一门面对对象语言,因此想到可以对比学习,用简单的Processing去理解C++的很多概念(并不能代替c++制作游戏,只是方便理解oop的概念)。
自己对UE4和面对对象的理解
ue4中的actor,相当于一个class(类),每次从ue4中的列表拖拽一个actor,相当于创建了actor的一个实例(对象),这是面对对象(oop)编程的基础概念,对于actor类,可以自己编写一个父类actor,属于虚幻4引擎actor的子类,也是拖拽的对象的类,一个类可以有很多变量和函数,这个类的每一个对象(实例),都拥有类的变量和函数。
虚幻引擎中无论控制器(Controller),玩家角色(Character),可控制单位(Pawn)游戏模式(Game Mode)都是继承自Actor类。
OOP三个特征,封装 继承 多态,这里主要讲的是继承
***相当于一个actor是一个模板,每次拖拽到游戏视口,就是用这个模板生产了一个新产品。 ***
对比操作(创建类)
在ue4里创建一个蓝图类,选择actor类,进入actor编辑界面,左边栏有很多按钮,可以添加组件(Component),添加变量,函数等,其中组件也可以当成一个类,在组件里面,一类组件由一个父类控制(有三角形的组件),对父类A的操作会影响子类Aa,子类a和其他父类BC的操作不会影响父类,其中组件根(Root)是最大的父类,他的操作影响所有子类,类似祖宗。
声明变量和函数,点击add variable即可操作,变量类型有很多(整数int,浮点数,布尔值,字符串等),也可以将某个返回值或者对象当作变量,未赋值的变量在点击编译的时候可以赋值。
cylinder此时是根节点的子类,和ParticleSystem同属,而Pointlight是ParticleSystem的子类
默认的所有变量是private,点击闭着的眼睛可以改成pubilc
在Processing里操作
class Actor
{
private float a; //声明私有变量浮点数a
public int b; //声明公共变量整数b
boolean c; //声明布尔值c
String s; //声明字符串s
Actor() //在里面进行赋值操作
{
a=10.1f;
b=100;
c=true;
s="ue4";
}
}
对比操作(实例化一个对象)
在ue4里很简单,拖到视口,会自动创建一个对象,名字可以在世界大纲(右上角)找到
在Processing里操作,需要先声明类和对象,然后在setup里面实例化
ArrayList<Actor>actors=new ArrayList<Actor>(); //声明对象数组
void setup()
{
actors.add(new Actor()); //实例化
}
实战部分,用UE4制作一个火把类
首先创建新类,命名为Fire_BP,点击add component,创建一个static mesh组件并且选择cylinder,创建一个粒子系统并选择火,创建一个点光源
结构如下,粒子系统本身无光源,需要自己加上点光源,并且放在粒子系统下1,这样改变粒子系统的属性(Location,rotate,scale)时,同样改变其发出的光源位置,选择和坐标。
编译后保存
拖到视口就可以看到火把类的实例,点击此火把可以在世界大纲中看到这个对象的名字,也可以右键浏览火把类的在content里的具体位置
实战部分,编辑火把类蓝图
打开火把类的蓝图,会看到3个节点(Node);
beginplay ://这里面的函数在程序运行时执行1次
beginOverlap ://在每次与其他对象重叠时运行
eventTick ://每帧运行
对比Procssing:
void setup()
{
//这里面的函数在程序运行时执行1次,然后便跳过
}
void draw()
{
//这里面的函数在程序运行时每帧执行1次
}
蓝图如图,运行结果是火把一闪一闪
processing实现以及结果(省去了声明部分)
class pointlight{
pointlight()
{
}
void setIntensity(float intensity) //对应setIntensity蓝图![在这里插入图片描述](https://img-blog.csdnimg.cn/20200715124903571.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NrcmxsaXU=,size_16,color_FFFFFF,t_70)
{
println("s后火把强度为"+intensity);
}
}
void draw()
{
float delayTime=random(0.2, 1.0); //对应delay的duration参数
float intensity=floor(random(0,3000)); //对应setIntensity的new intensity参数
delay(int(delayTime*1000)); //对应delay蓝图
print(delayTime);
pointlights.setIntensity(intensity); //对应最后一个蓝图,对Pointlight的引用
}
本文地址:https://blog.csdn.net/skrlliu/article/details/107346289
上一篇: #Java语言基础篇(二)
下一篇: Spring 源码中一些小工具