Unreal学习笔记 - 绘制准心

在屏幕中央绘制准心

创建继承于HUD的蓝图类。在Gamemode中将原始HUD指向到新的HUD蓝图上

然后在创建的蓝图类中加入如下节点:
/images/unreal/HudDrawTexture.png
ReceiveDrawHUD为绘制事件调用
DrawTexture为绘制贴图的方法,需要传入绘制贴图,屏幕坐标,绘制大小,UV宽高,填充颜色(纯白贴图可以通过修改填充颜色的方法来修改绘制图形颜色)

Unreal学习笔记 - 图形选项

在选项中用户根据自己的环境调整游戏的画质

使用Execute Console Command输入指令

  • 屏幕缩放 r.screenPercentage [百分比][0~100]
  • 视距 sg.ViewDistanceQuality [Low|Medium|High|Wow][0|1|2|3]
  • 抗锯齿 sg.AntiAliasingQuality [Low|Medium|High|Epic][0|1|2|3]
  • 后期处理特效(视觉效果) sg.PostProcessQuality [Low|Medium|High|Epic][0|1|2|3]
  • 阴影质量 sg.ShadowQuality [Low|Medium|High|Epic][0|1|2|3]
  • 贴图质量 sg.TextureQuality [Low|Medium|High|Epic][0|1|2|3]
  • 特效 sg.EffectsQuality [Low|Medium|High|Epic][0|1|2|3]
  • 垂直同步 r.VSync [0|1]
  • 设置屏幕分辨率 r.SetRest [640x480|1280x720|1366x768|1920x1080|..(格式为 宽度x长度 后缀可以跟上wf表示window或fullscreen)]
  • 设置全屏模式 r.FullScreenMode [0|1|2]

    0: normal full screen (renders faster, more control over vsync, less GPU memory, 10bit color if possible)
    1: windowed full screen, desktop resolution (quick switch between applications and window mode, full quality)
    2: windowed full screen, specified resolution (like 1 but no unintuitive performance cliff, can be blurry, default)

Unreal学习笔记 - 使用JoinSession成功加入服务器但是无法跳转到服务器当前地图

现象

创建session后。第二个找到可用的session,但是当前玩家数量显示为0。并且加入后无法跳转到服务器当前的地图。
日志如下:

1
2
3
4
5
6
7
LogGameMode:Display: Match State Changed from InProgress to LeavingMap
LogGameState: Match State Changed from InProgress to LeavingMap
LogNet: Browse: 10.10.85.66:0//Game/Maps/StartLevel
LogInit: WinSock: Socket queue 32768 / 32768
PacketHandlerLog: Loaded PacketHandler component: Engine.EngineHandlerComponentFactory (StatelessConnectHandlerComponent)
LogNet: Game client on port 0, rate 10000
LogNet: UPendingNetGame::InitNetDriver: Sending hello. [UNetConnection] RemoteAddr: 10.10.85.66:0, Name: IpConnection_78, Driver: PendingNetDriver IpNetDriver_77, IsServer: NO, PC: NULL, Owner: NULL

解决方案

原因在于使用CreateSession创建完毕后使用OpenLevel进行跳转。需要给予OpenLevel参数Options中写入listen关键字才可以成功跳转

具体原因可以查看Unreal控制台命令相关说明

Unreal学习笔记 - 使用steam来进行多人联机

配置

在DefaultEngine.ini添加如下设置

1
2
3
4
5
6
7
8
9
10
11
12
[/Script/Engine.GameEngine]
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")

[OnlineSubsystem]
DefaultPlatformService=Steam

[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480

[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"

完成对steam的引用。其中

480 SteamDevAppId 是 Valve 的测试应用 ID,所有人共享。随着工作的深入您需要自己的应用 Id,但 Steam 的大部分功能均可通过测试 ID 使用。

如果仅需要本地LAN联机。可以值添加

1
2
[OnlineSubsystem]
DefaultPlatformService=Steam

模块

在项目插件选项中勾选OnlineSubsystemSteam完成steam在线子系统模块的导入。

使用

创建会话

加入会话

查找会话

销毁会话

进阶

不满足于默认的功能?想要诸如好友、成就、语音…这些steam的拓展功能?在UnrealForum有一款插件正是满足了这些需求Advanced Sessions Plugin而且这款插件是完全免费的

Unreal学习笔记 - 修复右键菜单

背景

重装了一下Unreal。发现不知道为什么.uproject文件没有被自动关联。谷歌了一下找到了修复的解决方案。
原文:http://www.davidmoore.info/blog/2014/09/05/fix-the-missing-right-click-menu-for-unreal-engine-projects-uproject/

不过可能是因为适用于老版本的Unreal。新版本的Unreal的文件结构发生了变化。包括很多谷歌上的描述也是使用的原文的结构。而我用的Unreal 4.13.1版本并不适用。因此进行了一些修改。贴出解决方案cmd命令行文件。
不过该版本适用于自编译的Unreal引擎。对于使用Launcher安装的版本来说并不适用因此在原来的基础上进行了一些修改具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
:: UnrealProjectMenuRegistration.cmd
::
:: This batch file will try to find where the Unreal Engine is installed, then update your registry
:: to register the Unreal Project File type (and its right click menu for things such as generating
:: Visual Studio project files, and launching)
::
:: Run as an Administrator, as it's required for writing to HKLM.
::
:: Author: David Moore <[email protected]>
::
:: 二次修改:moonrailgun
:: http://www.moonrailgun.com/

::@ECHO OFF

echo.
echo Locating where Unreal Engine Launcher...
set UnrealLauncherDir= %~pd0

IF "%UnrealLauncherDir%"=="" GOTO CannotFindUnrealEngine

echo.
echo Using Unreal Engine directory: %UnrealLauncherDir%

set LauncherPath=%UnrealLauncherDir%Engine\Binaries\Win64\UnrealVersionSelector.exe

echo.
echo Adding registry keys for the Unreal Project right click menu...

:: HKLM\SOFTWARE\Classes\.uproject
reg ADD "HKLM\Software\Classes\.uproject" /ve /d Unreal.ProjectFile /f
IF ERRORLEVEL 1 (
echo Couldn't write to registry. Did you forget to run this batch file as an administrator?
goto TheEnd
)

:: HKLM\SOFTWARE\Classes\Unreal.ProjectFile
reg ADD "HKLM\Software\Classes\Unreal.ProjectFile" /ve /d "Unreal Engine Project File" /f

:: HKLM\SOFTWARE\Classes\Unreal.ProjectFile\DefaultIcon
reg ADD "HKLM\Software\Classes\Unreal.ProjectFile\DefaultIcon" /ve /d "\"%LauncherPath%\"" /f

:: HKLM\SOFTWARE\Classes\Unreal.ProjectFile\shell\open
reg ADD "HKLM\Software\Classes\Unreal.ProjectFile\shell\open" /ve /d "Open" /f
reg ADD "HKLM\Software\Classes\Unreal.ProjectFile\shell\open\command" /ve /d "\"%LauncherPath%\" /editor \"%%1\"" /f

:: HKLM\SOFTWARE\Classes\Unreal.ProjectFile\shell\run
reg ADD "HKLM\Software\Classes\Unreal.ProjectFile\shell\run" /ve /d "Launch game" /f
reg ADD "HKLM\Software\Classes\Unreal.ProjectFile\shell\run" /v Icon /t REG_SZ /d "\"%LauncherPath%\"" /f
reg ADD "HKLM\Software\Classes\Unreal.ProjectFile\shell\run\command" /ve /d "\"%LauncherPath%\" /game \"%%1\"" /f

:: HKLM\SOFTWARE\Classes\Unreal.ProjectFile\shell\rungenproj
reg ADD "HKLM\Software\Classes\Unreal.ProjectFile\shell\rungenproj" /ve /d "Generate Visual Studio project files" /f
reg ADD "HKLM\Software\Classes\Unreal.ProjectFile\shell\rungenproj" /v Icon /t REG_SZ /d "\"%LauncherPath%\"" /f
reg ADD "HKLM\Software\Classes\Unreal.ProjectFile\shell\rungenproj\command" /ve /d "\"%LauncherPath%\" /projectfiles \"%%1\"" /f

:: HKLM\SOFTWARE\Classes\Unreal.ProjectFile\shell\switchversion
reg ADD "HKLM\Software\Classes\Unreal.ProjectFile\shell\switchversion" /ve /d "Switch Unreal Engine version..." /f
reg ADD "HKLM\Software\Classes\Unreal.ProjectFile\shell\switchversion" /v Icon /t REG_SZ /d "\"%LauncherPath%\"" /f
reg ADD "HKLM\Software\Classes\Unreal.ProjectFile\shell\switchversion\command" /ve /d "\"%LauncherPath%\" /switchversion \"%%1\"" /f

:Done
echo.
echo Done.
echo.
goto TheEnd

:CannotFindUnrealEngine
echo.
echo DOH! Can't find the Unreal Engine.
echo.
goto TheEnd

:TheEnd
pause

用法

将文件保存为UnrealProjectMenuRegistration.cmd到Epic Game根目录下(Epic Games\Launcher\UnrealProjectMenuRegistration.cmd)
右键点击以管理员的身份运行。如果有杀软拦截请选择允许
完成后尝试重启电脑/重启Epic Games Launcher完成关联操作

Unreal学习笔记 - 综合

材质

通过绘制顶点贴图来让一个材质混合两种贴图

用于地面水潭。墙上青苔等等

在材质中获取顶点颜色vertex color 。选中RBGA任意一数值将两种贴图(漫反射,法线,高光贴图)以插值的方式混合起来。连接到对应输出

然后在unreal编辑器中用画笔工具进行绘制(注意选择的颜色通道)

蓝图

蓝图是通过调用Unreal预先写好的API与基本C++语法以及内置标准宏指令将图形编译成c++语言的一种方式。简单易懂,不需要考虑复杂的内存操作而使得程序员能够专注于逻辑上的操作。
缺点:有些时候复杂的逻辑可能会导致蓝图的线路布的一团糟,减少可读性

骨骼

动作

免费资源

mixamo上可以下载到很多丰富的游戏动作与角色资源。更重要的是。这些资源都是免费的!你只需要申请一个免费的Adobe账号就能拥有它。

使用blender+ridigy导出动画

非常重要!
https://www.youtube.com/watch?v=jiXwDxCZtOc
解决Blender与Unreal接合时的很多奇怪的问题

动画偏移

动画偏移即在一个pose中根据一些参数混合多个pose。可以实现如角色转头。枪指向的目标和玩家想要指向的一致。一样的效果。

混合空间

动画蒙太奇

根骨骼运动

UMG

在原始stale UI架构上更新的一种UI方式。比之前的UI系统更为友好

网络

事件复制

Unreal 有三种RPC方式进行事件的网络调用

  • 多路传输:已在位置为服务器。向客户端执行该流程
  • 只在客户端运行:已在位置为服务器。向所属客户端执行该流程
  • 只在服务端运行:已在位置为客户端,想所属服务端执行该流程

ionic——使用本地代理服务器解决http跨域问题

在ionic开发中我们常常会遇到http请求相关问题。在设备中我们常用的方法是使用白名单插件cordova-plugin-whitelist。通过在config.xml中配置<access origin="*"/>参数来对http请求进行本地化而解决跨域问题。但是我们在实际开发中我们经常使用ionic serveionic run ios -l -c -s来进行调试工作。使用白名单插件无法正常运行。这里就要使用代理服务器了。

什么是代理服务器

代理服务器就是一个将http请求进行中转的服务器。以代理服务器的名义去访问远程服务器。而ionic CLI就提供了一个本地的代理服务器来解决$http跨域的问题

如何使用代理服务器

在项目根目录下找到文件ionic.config.json添加proxies字段。如下:

1
2
3
4
5
6
7
8
9
10
{
"name": "test",
"app_id": "",
"proxies": [
{
"path": "/api",
"proxyUrl": "http://api.yourdomain.com"
}
]
}

使代理服务器监控path字段的http请求。将相应请求通过代理服务器中转发送到proxyUrl字段的地址上

当你访问/api的时候。实际上是发送到http://api.yourdomain.com。如请求/api/data.json。实际上请求的是远程服务器http://api.yourdomain.com/data.json的数据。在项目目录中api文件夹其实不存在

同时代理服务器能设置多个以满足不同的需求

定义常量方便切换开发环境与发布环境

代理服务器的使用仅在ionic CLI环境在才能工作。在真机下实际上是会真的访问/api目录导致404错误的。为了解决问题需要设置全局常量以方便不同环境下的切换。

1
2
.constant('ApiServer', '/api')
//.constant('ApiServer', 'http://api.yourdomain.com')

使用如下:

1
2
3
4
5
6
7
8
9
.controller('test',function($scope, ApiServer){
var url = ApiServer + "/data.json"
$http.get(url)
.success(function(data,status,headers,config) {
console.log(data);
}).error(function(data,status,headers,config){
console.log(status);
});
})

MMD静画渲染

最近花了几天时间去入了一下MMD的大坑。想着渲染几张静画来当一下桌面的壁纸。不过裙子什么的真是太难弄了。物理引擎有点坑。

第二弹

纯黑背景下的微笑miku

第三弹

天台miku

第四弹

黄昏下的教室之新房45°

第五弹

星夜下的爱蜜莉雅