1. 变量命名首字母大写
2. 如果要在蓝图定义一个接口,需要在头文件中使用 UPROPERTY(EditAnywhere), UPROPERTY 宏使得变量对 虚幻引擎 可见
3. Action Mappings (动作映射)想象成"是或否"的输入,类似于鼠标按键或摇杆按键。 当在短时间内按键、松开、双击或按住不放时,它们会进行该项操作的汇报。 离散事件的动作,诸如跳跃、射击或与物体互动都可以使用这种类型的映射。 Axis Mappings (坐标轴映射)是持续不断的 - 您可以把它们想象成为"数量"输入,例如摇杆上的杆,或者鼠标指针的位置。 它们会在每一帧汇报其值,即使在不移动时也是如此。 一般涉及到量级或方向的内容,比如行走、到处看、开车等都可以用这种方式来处理。
4. 定义一个布尔类型时:bool bGrowing; b要小写,后面的字母大写
5. 需要用到数学表达式时:FMath::Sin
CurrentVelocity.X = FMath::Clamp(AxisValue, -1.0f, 1.0f)*100.0f;
6. 关于clamp的用法:
Math.clamp(- 5 , 2 , 15 ); // returns 2 ,小于最小值时,输出最小值
Math.clamp( 4 . 6 , 2 , 15 ); // returns 4.6 ,在范围内输出本值
Math.clamp( 103 , 2 , 15 ); // returns 15 ,大于最大值时,输出最大值
7. F7在VS中编译
8. UActorComponent:UObject的子类,主要作为Actor的组件,用来控制Actor移动,渲染Actor等等。主要有两种基本的组件USceneComponent和UPrimitiveComponent。
USceneComponent:拥有一个transform,定义了位移,偏转,缩放。
UPrimitiveComponent:具有某种形式的表现,如网格,粒子等可见的东西。
9. 在UE4中实现移动鼠标或者按键来控制摄像头的移动,一般步骤
9.1 在头文件中声明函数及变量用于追溯输入,比如说 MoveForward(float AxisValue); PitchCamera(float AxisValue);
9.2 在源文件中定义声明的的函数
9.3 在SetupPlayerInputComponent 类中,绑定输入事件及代码,例如 InputComponent->BindAction("ZoomIn", IE_Pressed, this, &APawnWithCamera::ZoomIn);
9.4 在Tick中更新数据
10.静态加载指的是必须在构造函数中完成的加载方式,动态加载值得是可以在Runtime期间加载的方式,UE4源码里面,前者其实是对后者的一层封装,即FObjectFinder()是对LoadObject()的封装。But,FClassFinder()不是对LoadClass()的封装,FClassFinder()内部调用的是LoadObject()。
11. 开发调试时输出日志:GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Hello World, this is FPSGameMode1"));首参数-1,表示无需更新或刷新此消息,第二个参数表示持续时间
12.Character 基类定义两个必要函数AddControllerYawInput、AddControllerPitchInput;可直接进行绑定, InputComponent->BindAxis("Turn", this, &AFPSCharacter::AddControllerYawInput); InputComponent->BindAxis("LookUp", this, &AFPSCharacter::AddControllerPitchInput);
13.UPROPERTY()内参数的意思,参见http://blog.csdn.net/u010133610/article/details/54171590
相关代码语句:
- //获取坐标并定义
- FVector NewLocation = GetActorLocation();
- //设置actor坐标
- SetActorLocation(NewLocation);
- // 将此pawn设置为由最低数量的玩家进行控制
- AutoPossessPlayer = EAutoReceiveInput::Player0;
- //设置玩家控制器,需要添加头文件 #include "Kismet/GameplayStatics.h"
- APlayerController* OurPlayController = UGameplayStatics::GetPlayerController(this, 0);
- //判断玩家控制器的摄像机是否为CameraOne
- if ((OurPlayController->GetViewTarget()!=CameraOne)&&(CameraOne!=nullptr)){}
- //设置摄像机(融合切换)OurPlayController->SetViewTarget(CameraOne);
- OurPlayController->SetViewTargetWithBlend(CameraOne, SmoothBlendTime);
- //静态加载网格资源
- static ConstructorHelpers::FObjectFinder
- //获取屏幕中心点(方法一)
- FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY());
- FVector2D ViewCenter = FVector2D(ViewportSize.X / 2, ViewportSize.Y / 2);
- //获取屏幕中心点后,设置准星的位置GetSurfaceWidth()
- FVector2D CrossHairDrawPostion(ViewCenter.X - (CrosshairTexture->GetSurfaceWidth()*0.5f), ViewCenter.Y - (CrosshairTexture->GetSurfaceHeight()*0.5f));
- //获取屏幕中心点(方法二)
- FVector2D Center(Canvas->ClipX*0.5f, Canvas->ClipY*0.5f);