当前位置: 移动技术网 > IT编程>开发语言>Java > UE4入门笔记

UE4入门笔记

2020年07月16日  | 移动技术网IT编程  | 我要评论

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下面的蓝图类可以看做Actor的子类,同时也是一个父类

***相当于一个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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网