UEC中的C++基础

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



相关代码语句:

  1. //获取坐标并定义  
  2. FVector NewLocation = GetActorLocation();    
  3. //设置actor坐标  
  4. SetActorLocation(NewLocation);               
  5. // 将此pawn设置为由最低数量的玩家进行控制  
  6. AutoPossessPlayer = EAutoReceiveInput::Player0;  
  7. //设置玩家控制器,需要添加头文件 #include "Kismet/GameplayStatics.h"  
  8. APlayerController* OurPlayController = UGameplayStatics::GetPlayerController(this, 0);  
  9. //判断玩家控制器的摄像机是否为CameraOne  
  10. if ((OurPlayController->GetViewTarget()!=CameraOne)&&(CameraOne!=nullptr)){}  
  11. //设置摄像机(融合切换)OurPlayController->SetViewTarget(CameraOne);  
  12. OurPlayController->SetViewTargetWithBlend(CameraOne, SmoothBlendTime);  
  13. //静态加载网格资源  
  14. static ConstructorHelpers::FObjectFinder  
  15. //获取屏幕中心点(方法一)  
  16. FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY());  
  17. FVector2D ViewCenter = FVector2D(ViewportSize.X / 2, ViewportSize.Y / 2);  
  18. //获取屏幕中心点后,设置准星的位置GetSurfaceWidth()  
  19. FVector2D CrossHairDrawPostion(ViewCenter.X - (CrosshairTexture->GetSurfaceWidth()*0.5f), ViewCenter.Y - (CrosshairTexture->GetSurfaceHeight()*0.5f));  
  20. //获取屏幕中心点(方法二)  
  21. FVector2D Center(Canvas->ClipX*0.5f, Canvas->ClipY*0.5f);  

猜你喜欢

转载自blog.csdn.net/zhangmei126/article/details/78934077