2018-11-15 17:21:01 xiaoxiaolooi 阅读数 256
  • 从这里开始虚幻4-Editor介绍 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2396 人正在学习 去看看 杨石兴

unreal GIS 模块

unreal4 源代码模块

自从unreal4 开源以来,osg ogre 渐渐不能用来吃饭,于是本着听人劝吃饱饭的思想,转头unreal门下,继续为混口饭事业,投身革命。可是unreal的c++编程基本没有什么例子可看,只好自己从头做起。

  1. 开发者驱动
  2. 编辑器
  3. 工程目录
  4. 基础框架代码
  5. 第三方库

在这里插入图片描述
这个是文档目录,代码量难以阅读,决定从以下三方向入手,第一次写文字,真心不容易。
1.案例编写使用unreal4 的普通界面搭建自定义三维场景 介绍 editor层的基础代码
2.添加GIS地图属性信息 介绍 驱动层的基础代码
3.程序化植物合成 介绍 与unreal基础平台结合
以后会陆续跟新到这里
推荐大家使用 阿里云 https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=ic4sfgeu

2017-02-12 18:15:52 shangguanwaner 阅读数 6685
  • 从这里开始虚幻4-Editor介绍 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2396 人正在学习 去看看 杨石兴

Unreal Engine 4 动态切割模型实现

《合金装备:复仇》里面,有一个很有趣的设定,游戏里大部分的场景和物件都可以用主角的刀动态切割。
UE4中的ProceduralMeshComponent这个组件可以很容易的就实现这种功能,下面介绍下实现的方法。

准备模型

首先我们准备一个模型。
准备一个模型

我做了一个简单的圆柱体,用来测试。注意需要切割的地方,为了保证细节,多放点顶点。
为了能够动态切割,我们要勾选这个模型的Allow CPUAccess选项。
勾选AllowCPU Access

新建蓝图

新建一个Actor蓝图,为它添加两个组件,一个是StaticMeshComponent,一个是ProceduralMeshComponent,在Construct Script中,将StaticMesh的模型数据拷贝到ProceduralMesh中去。
拷贝模型数据

调整ProceduralMesh参数

出于优化的目的,ProceduralMeshComponent默认勾选了UseComplexAs SimpleCollision这个属性,为了实现我们切割下来的能正常的进行物理模拟,需要把这个属性给取消勾选。
这里写图片描述

实现切割

这里写图片描述
SliceProceduralMesh实现模型的切割。说下几个参数:
* PlanePosition是切割平面的位置
* PlaneNormal 是切割平面的法线,也就是朝向
* Create Other Half 切割下来的部分,是否创建新的ProceduralMesh
* Cap Option No Cap,切面不缝合,Create New Section For Cap; 缝合,使用自定义的材质来贴补缝合的面; Use Last Section for Cap,使用模型的材质来贴补缝合的面。
具体效果如下:
这里写图片描述

2015-09-01 23:40:52 dongdongbusi 阅读数 888
  • 从这里开始虚幻4-Editor介绍 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2396 人正在学习 去看看 杨石兴

Unreal 4 术语简介

标签: unreal4 游戏引擎 游戏开发

翻译自ue4官方文档

Objects

UE4中的objects和其他c++框架(QT、cocos2d-x)一样,具有垃圾收集、元数据等功能。
官方文档的描述:

The base building blocks in the Unreal Engine are called Objects and contain a lot of the essential “under the hood” functionality for your game assets. Just about everything in Unreal Engine 4 inherits (or gets some functionality) from an Object. In C++, UObject is the base class of all objects; it implements features such as garbage collections, metadata (UProperty) support for exposing variables to the Unreal Editor, and serialization for loading and saving.

Actors

在关卡摆放的游戏对象就是Actor。Actor可以可以作位置体积变换。在UE4中可以用蓝图或者c++来创建Actor。如果用c++,AActor是所有Actor的基类。
常用Actor:

- StaticMeshActor   环境
- CameraActor       相机
- PlayerStartActor  玩家起始

Components

组件component就是一个个可以附加到Actor上的功能点。人是Actor,会开车就是一个component。这个和和u3d里的概念类似的。ue4有很多组件,例如位置变换、audio等。

pawns

Actor的子类,用于表示人形角色或者其他具备avatar模型的角色。玩家以及NPC都是pawns。

Characters

pawn 的子类。用于表示玩家角色,具备输入控制、碰撞等属性。

PlayerController

玩家角色控制器?怎么翻译无所谓啦,反正就是用来接收玩家的输入并将这些输入信息关联到游戏中的角色。
在多人游戏中,每个客户端有且只有一个玩家控制器,客户端通过这个与服务端交互。

AIController

顾名思义,控制游戏中AI角色。

Brushes

用画刷画出来的游戏对象?不是很理解这个概念。反正画在游戏场景里的都是actor,可以用bursh画一些BSP(basic shape),例如圆柱体、立方体等等。

Levels

关卡,相当于游戏场景,里面有个中游戏对象。UE4中每个关卡都会被单独保存成.umap文件。

World

所有的level组成一个world。

GameModes

看了下文档,感觉似乎GameRule更适合它的意义。GameMode就是游戏的规则:玩家怎么加入游戏、游戏能否暂停、关卡的切换条件和方式等等。

GameStates

游戏状态,例如玩家的连接状态、比分等信息。

PlayerStates

玩家信息,例如姓名、职业、种族、等级、比分等等。

2017-08-03 17:31:31 noahzuo 阅读数 2282
  • 从这里开始虚幻4-Editor介绍 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2396 人正在学习 去看看 杨石兴

这篇博客介绍了UE4的内存模型相关的东西与我在运用UE4时相关的一些心得。

由于整个内存模型比较复杂,因此这篇博客的点可能会比较散乱……可能日后会进行整理(也可能不会


UObjectFUObjectItem

  • UE4运行的基本单位是UObjet,然而UObject针对于内存相关的东西都储存在结构体FUObjectItem中。有个全局变量GUObjectArray,可以通过以下代码来遍历所有的Objects:
for (FRawObjectIterator It(false); It; ++It)
{
    FUObjectItem* ObjectItem = *It;
    UObject* obj = ObjectItem->Object;
}
  • 可以通过如下代码来获得一个UObject对应的ObjectItem
FUObjectItem* ObjectItem = GUObjectArray.ObjectToObjectItem(Object);
  • GUObjectArray中有几个函数可以通过索引和ObjectItem、Object的相互获取,对应的函数为IndexToObjectObjectToIndexIndexToObjectUnsafeForGC等。

  • GUObjectArray中所有的UObjectArray的分布是有顺序的——那些不会被GC的UObject,例如各StaticClass、核心Object,GamePlayInstance等会放在前面;而那些有可能被GC的UObject,则放在后面。此外,GUObjectArray中有个变量ObjLastNonGCIndex,用于分隔这两类UObject

    /**
     * Returns true if this object is "disregard for GC"...same results as the legacy RF_DisregardForGC flag
     *
     * @param Object object to get for disregard for GC
     * @return true if this object si disregard for GC
     */
    FORCEINLINE bool IsDisregardForGC(const class UObjectBase* Object)
    {
        return Object->InternalIndex <= ObjLastNonGCIndex;
    }

FUObjectCluster相关

Cluster指得是一组UObject为一簇,这群UObject同生共死,每个Cluster有一个根rootUObject

  • 每一个FUObjectItem里面有一个变量ClusterRootIndex,这个储存的是当前Object所在的Cluster的root object所在GUObjectArray的索引。
    // UObjectArray.h
    // UObject Owner Cluster Index
    int32 ClusterRootIndex; 
  • 引擎中有一个全局变量FUObjectClusterContainer GUObjectClusters,用于管理内存中所有的Clusters。
// Get the number of all clusters that have been allocated. 
GUObjectClusters.GetNumAllocatedClusters()

但很奇怪的,在我新建的若干个测试关卡/项目中,这个值一直为0……

  • 一个关卡ULevel不可以成为一个Cluster的root,原因是在这个时候(postload之后)仍然有很多被Level引用的assets并未构建它们自己的Cluster。
bool ULevel::CanBeClusterRoot() const
{
       // We don't want to create the cluster for levels in the same place as other clusters (after PostLoad)
       // because at this point some of the assets referenced by levels may still haven't created clusters themselves.
       return false;
}

虽然ULevel本身不可以作为Cluster Root,而相反的是它会创建一个特殊的actor container,用来储存原本应该位于Cluster的actors。这是由于只有某些特殊的actor种类才能用于Cluster,所以剩下的那些不能被cluster的actors需要通过actor container来进行引用。

  • ULevel中使用ClusterActors数组用于储存那些用于Cluster的Actors;用ActorsForGC储存那些剩下的Actors。主食中提到不希望Level直接去引用那些本就是Cluster的Actors,注释中提到这会导致变慢(针对于cluster的Reference很慢,可能是如果引用了cluster里面的actor,那么会导致整个cluster也会添加对应的引用关系,从而导致引用的层级变多吧……)
    TArray<AActor*> ClusterActors;
    for (int32 ActorIndex = Actors.Num() - 1; ActorIndex >= 0; --ActorIndex)
    {
        AActor* Actor = Actors[ActorIndex];
        if (Actor && Actor->CanBeInCluster())
        {
        ClusterActors.Add(Actor);
        }
        else
        {
        ActorsForGC.Add(Actor);
        }
    }

引用相关

  • 如何获得一个UObject所引用的其他UObject
TArray<UObject*> CollectedReferences;
FReferenceFinder ObjectReferenceCollector(CollectedReferences);
ObjectReferenceCollector.FindReferences(Object);
  • 一度看了看Reference是怎么跑起来的,后来发现大部分的从UClass派生出来的类会制定对应的ClassAddReferenceObjects方法,这个方法用于制定该类会和哪些东西产生对应的引用……

<未完待续>

2019-09-27 13:38:02 u011760195 阅读数 280
  • 从这里开始虚幻4-Editor介绍 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2396 人正在学习 去看看 杨石兴

注册Github账号

什么你还没有GitHub账号?
那就快去注册一个啊!

注册UE4账号

进入UE4官网,按照套路自行完成账号注册。

绑定Github账号

右上角账号名称下拉菜单点个人进入设置界面,如下图:
在这里插入图片描述

左侧Tab栏选择连接的账户,找到Github点击连接。
在这里插入图片描述

绑定成功后,Epic Games的注册邮箱会收到一封已连接提示的邮件。

找不到源码

但这时候登录Epic Games界面,主界面上方出现来自EpicTeamAdmin的邀请函。

在这里插入图片描述

绑定之后便可查看UE引擎源码
在这里插入图片描述

Unreal4

阅读数 1774

没有更多推荐了,返回首页