虚幻5学习笔记,疑点
常用操作
运行时,调试相机,按~键,输入ToggleDebugCamera 。进入自由视角
常用节点
- gate节点:用于控制该流程通不通,执不执行。
- Flip Flop节点:反转执行,一次A,一次B。
- Set Timer by Event节点:设置定时器,定时执行用户自定义事件,可循环执行。需要用户自己定义一个事件。通过三个点…进行搜索用于自定义事件。
- Append节点:拼接字符串
- Take High Res Screenshot节点:进行屏幕截图,Filename可以输入绝对路径,无法存储中文路径。
- Get Actor of Class节点:获取actor类对象,返回第一个出现的。
- Set Actor Location And Rotation节点:设置actor实例的本地坐标。
- add timeline节点:节点,可以获取一个根据时间动态变化的值。可以不放在每一帧的事件函数Event Tick中。该节点的update会逐帧平滑的生成插值。
- Set Material节点:为某个静态网格设置材质。
- 快速查询某个案件节点:搜索keyboard,找到。
视角创建
从0到1创建视角。而不是使用第三人称的蓝图,官方第三人称蓝图在开始时候,会创建该一个对象。
首先,世界场景设置的pawn类就是会在游戏开始时候,在PlayerStart的位置创建游戏对象。
我们需要自己创建蓝图
创建Pawn蓝图如下,需要设置自动控制玩家0。完成显示摄像机的绑定。
到此运行游戏,主相机画面已经绑定到空物体BP_pawn的相机上,
方法2:
创建一个Actor类型蓝图BP_camera,直接创建弹簧臂+相机。然后将该蓝图放到场景中。
修改自己创建的BP_playercontroller,如下图。
self指代的是该PlayerController,通过视角混合完成主摄像机的绑定。
物体沿spline线移动
spline绘制路径
首先创建v_path_BP蓝图,类型使用actor?
拖入场景中后,在细节面板选择vSpline,通过selected Points选择节点,在场景中F聚焦,按住ALT键可以拖动可以新增节点。
使用actor蓝图
设置好路径后,对物体进行控制,我们可以在actor蓝图中编辑事件图表。这里如果使用actor蓝图。要明白你在资源文件夹中创建的actor本质是一个类,而你要使用该actor,需要拖动到场景中才能运行。并且,你如果想在actor蓝图中获取场景中的其他actor实例,使用的只有get Actor Of Class节点。该节点返回在场景中查询得到的首个对应的Actor实例,该方法在多个相同actor时候会条理不清晰。
使用关卡蓝图
在这里我们使用关卡蓝图。
获取设置的路径实例
首先我们使用V_path_BP蓝图拖动到场景中设置路径,然后我们需要关卡蓝图中使用该蓝图实例,通过在大纲面板中选中该实例对象,并且回到蓝图,右键发现出现为V_path_BP创造引用,由此可以得到准确的实例化对象。
然而我们如果使用get Actor Of Class节点,则获取不那么精确,在场景中只有一个该actor类型时候等于该效果。
设置时间轴
设置一个时间轴用于控制Lerp参数变化。
双击进入时间轴,添加自定义轨道alph,然后设置关键帧,时间长度。 变化范围0-1。
获取移动中曲线点的坐标
完成后回到事件图表窗口,将自定义的输出alph连接到 Lerp的alpha输入上,相当于控制百分比。a作为初始值,而Path曲线的总长度输入给B,输出一个长度。通过该该长度在Path曲线上去去找坐标。将该坐标赋值给物体即可。
注意:Get Transform at Distance Along Spline节点获取path曲线坐标时候,需要设置参数选择世界坐标or本地坐标。
更新物体坐标
最后,使用Set Actor Location And Rotation,设置物体坐标。
真实相机模拟仿真
创建一个Pawn,为其添加电影摄像机组件CineCamera,可以通过蓝图time line节点动态调整当前焦距,实现相机的拉近拉远效果。
材质、材质实例化
材质的设置
材质的设置:https://blog.csdn.net/weixin_49367526/article/details/146411592?spm=1001.2014.3001.5501
材质实例化
材质中的常量,可以右键提升为参数。
在资源面板中,右键材质可以创建材质实例,该实例只能调整之前在材质中设置的参数,且该参数必须对主材质节点有贡献才会在实例中显示。
C++代码的使用
我的vs游戏开发组件安装未完全?必须重新进再次编译才能使得虚幻5的蓝图节点生效,否则不生效。虽然实时编译是打开的,但是没用。
创建用户代码编写的蓝图类
打开工程项目
其中文件ILS_simulation2.Build.cs
// ILS_simulation2.Build.cs
// Fill out your copyright notice in the Description page of Project Settings.using System.IO;
using UnrealBuildTool;public class ILS_simulation2 : ModuleRules
{public ILS_simulation2(ReadOnlyTargetRules Target) : base(Target){PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });//vincent增加}
}
编译的自定义蓝图类无法在蓝图编辑界面搜索到
项目克隆的问题
由于项目克隆,项目名称发生了变化。而项目的模块默认是与项目名称一致的,导致用户自己编译的蓝图C++类在蓝图编辑界面搜索不到。由于我的项目是从名称为ILS_simulation2项目克隆得到的TracyDataSets_1项目。所以
检查步骤
-
确认类文件是否在项目源码中 确认 .Build.cs 文件中模块设置正确。打开你模块的
-
YourModule.Build.cs,确认是否包含必要的模块依赖:
PublicDependencyModuleNames.AddRange(new string[] {"Core", "CoreUObject", "Engine", "InputCore"
});PrivateDependencyModuleNames.AddRange(new string[] {"Slate", "SlateCore"
});
- 确认 .uproject 文件中包含了你的模块。打开 YourProject.uproject,确保 “Modules” 中包含了你的模块,比如:
"Modules": [{"Name": "YourModule","Type": "Runtime","LoadingPhase": "Default"}]
如果是给蓝图节点用的 Runtime 函数类,Type 可以是 “Runtime”
如果你做的是编辑器插件中的功能,可能需要 “Editor” 类型
- 确认包含在编译目标中
如果你创建了新的模块,还要确保它被添加到 .Target.cs 或 .Editor.Target.cs 的 ExtraModuleNames 中:
比如 YourProjectEditor.Target.cs文件中:ExtraModuleNames.AddRange(new string[] { "YourProject", "YourModule" });
using UnrealBuildTool;
using System.Collections.Generic;public class ILS_simulation2Target : TargetRules
{public ILS_simulation2Target(TargetInfo Target) : base(Target){Type = TargetType.Game;DefaultBuildSettings = BuildSettingsVersion.V5;ExtraModuleNames.AddRange( new string[] { "ILS_simulation2" } );}
}
- 重新编译并清理缓存
删除那两个文件夹后,可能需要对文件TracyDataSets_1.uproject右键,生成项目文件,否则打开后项目处于卸载状态。在虚幻界面打开vs的本质应该是打开的TracyDataSets_1.sln。
C++自定义蓝图类测试代码
//VincentSQLite.h
#pragma once#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "VincentSQLite.generated.h"UCLASS()
class ILS_SIMULATION2_API UVincentSQLite : public UBlueprintFunctionLibrary
{GENERATED_BODY()
public:UFUNCTION(BlueprintCallable, Category = "vincentSQLite")static FString vvCombineStrings(const FString& A, const FString& B);
};
//VincentSQLite.cpp
#include "VincentSQLite.h"FString UVincentSQLite::vvCombineStrings(const FString& A, const FString& B)
{return A + B+"vincent";
}