【UE4】【C++】蓝图添加UI(准心……)、获得准心对准的方向(进行旋转……)
2018-03-04 02:29
736 查看
蓝图添加UI:
1、创建UI
2、
添加Image
3、添加对应的图片以及调整瞄点的位置以及瞄位(相对于图片的位置)
位置(直接移动白色的❀到30,50)
瞄位(设置0.5,0.5的Alignment即可将瞄点瞄到图片中心)
4、在PlayerController中加入UI
Create Widget(先创建出UI)--->Add to Viewport(加入到屏幕中)
获得准心对准的方向:(C++)
已提供的方法:
GetViewPortSize(int32& SizeX, int32& SizeY)
//这两个值(SizeX,SizeY)被赋予了值:屏幕的XY(PlayerController内的方法)
//准心的位置(SizeX*X对应的瞄位Alignment(蓝图中设置的),SizeY*Y对应的瞄位Alignment)
DeprojectScreenPositionToWorld(float ScreenX, float ScreenY, FVector& WorldLocation, FVector& WorldDirection)
//由屏幕上的准心位置(返回准心的世界坐标WorldLocation和瞄准的方向WorldDirection)
PlayerCameraManager->GetCameraLocation()
//PlayerController下的方法,获得摄像机的位置,作为StartLocation(射线起点)
GetWorld()->LineTraceSingelByChannel( //返回布尔值(撞到为true)
struct FHitResult& OutHit, //返回出射线射到的目标
const FVector& Start, //射线起点
const FVector& End, //射线终点
ECollisionChannel TraceChannel, //设置射到的目标是哪种类型(ECC_Visibility)
const FCollisionQueryParams& Params /* = FCollisionQueryParams::DefaultQueryParam */, //有默认值
const FCollisionResponseParams& ResponseParam /* = FCollisionResponseParams::DefaultResponseParam *//有默认值
)
void ATankPlayerController::Tick(float DeltaTime) {
//Move to AimLocation 移动视线
AimToTarget();//不停的寻找我们要撞击哪一个点
}
1、创建UI
2、
添加Image
3、添加对应的图片以及调整瞄点的位置以及瞄位(相对于图片的位置)
位置(直接移动白色的❀到30,50)
瞄位(设置0.5,0.5的Alignment即可将瞄点瞄到图片中心)
4、在PlayerController中加入UI
Create Widget(先创建出UI)--->Add to Viewport(加入到屏幕中)
获得准心对准的方向:(C++)
已提供的方法:
GetViewPortSize(int32& SizeX, int32& SizeY)
//这两个值(SizeX,SizeY)被赋予了值:屏幕的XY(PlayerController内的方法)
//准心的位置(SizeX*X对应的瞄位Alignment(蓝图中设置的),SizeY*Y对应的瞄位Alignment)
DeprojectScreenPositionToWorld(float ScreenX, float ScreenY, FVector& WorldLocation, FVector& WorldDirection)
//由屏幕上的准心位置(返回准心的世界坐标WorldLocation和瞄准的方向WorldDirection)
PlayerCameraManager->GetCameraLocation()
//PlayerController下的方法,获得摄像机的位置,作为StartLocation(射线起点)
GetWorld()->LineTraceSingelByChannel( //返回布尔值(撞到为true)
struct FHitResult& OutHit, //返回出射线射到的目标
const FVector& Start, //射线起点
const FVector& End, //射线终点
ECollisionChannel TraceChannel, //设置射到的目标是哪种类型(ECC_Visibility)
const FCollisionQueryParams& Params /* = FCollisionQueryParams::DefaultQueryParam */, //有默认值
const FCollisionResponseParams& ResponseParam /* = FCollisionResponseParams::DefaultResponseParam *//有默认值
)
void ATankPlayerController::Tick(float DeltaTime) {
//Move to AimLocation 移动视线
AimToTarget();//不停的寻找我们要撞击哪一个点
}
void ATankPlayerController::AimToTarget() { FVector HitLocation; if (GetSightRayLocation(HitLocation)) { //移动炮台 } } bool ATankPlayerController::GetSightRayLocation(FVector &OutHitLocation) { int32 ViewportSizeX, ViewportSizeY; GetViewportSize(ViewportSizeX, ViewportSizeY);//这两个值被赋予了屏幕的大小(PlayerController内的方法) FVector2D ScreenLocation = FVector2D(ViewportSizeX*CrosshairXLocation, ViewportSizeY*CrosshairYLocation);//准心在屏幕的位置 FVector WorldLocation; FVector WorldDirection; //LookDirection if (DeprojectScreenPositionToWorld(ScreenLocation.X, ScreenLocation.Y, WorldLocation, WorldDirection)) { //返回一个bool值以确定找到没有 GetLookVectorHitLocation(WorldDirection, OutHitLocation); return true; }; return false; } //返回一个射线撞击点 bool ATankPlayerController::GetLookVectorHitLocation(FVector LookLocation, FVector & OutHitLocation) { //创建射线 (起点、终点) FVector StartLocation = PlayerCameraManager->GetCameraLocation();//PlayerController下的方法(获得摄像机的位置) FVector EndLocation = StartLocation + LookLocation * LineTraceRange; FHitResult HitResult; if (GetWorld()->LineTraceSingleByChannel( HitResult, StartLocation, EndLocation, ECollisionChannel::ECC_Visibility )) { OutHitLocation = HitResult.Location;//传出具体的撞击点位置 return true; } OutHitLocation = FVector(0.0f);//没找到也要对传出的值赋予一个默认值 return true; }
相关文章推荐
- 【UE4】【C++】判断是否撞击到物体、从蓝图中获取组件(炮管、炮塔)、根据瞄准的方向进行(角色)旋转
- 【UE4】【C++】添加UI(血条)
- UE4使用控件蓝图——添加UI血量和速度信息
- 【UE4】【C++】枚举类(对于不同状态显示不同的颜色准心)C++设置状态,蓝图设置颜色(UI颜色绑定)
- UE4纯蓝图添加C++遇到的一个坑
- 使用蓝图(Blueprint)绑定多播委托(Multicast Delegate)【UE4】【C++】
- 25-UI基础通过控件的 transform 属性,对控件进行移动,缩放,旋转操作,(补充简单动画)
- UE4 C++与蓝图交互
- UE4 C++创建删除文件夹(对本地文件夹进行操作)
- 【UNREAL ENGINE 游戏开发】开篇之UE4的BLUEPRINT(蓝图)与C++(新童鞋必看)
- UE4之c++使用多播代理调用蓝图
- UE4 蓝图教程(四) UI
- UE4 C++与蓝图交互
- UE4:c++中添加触发器事件
- 获得设备方向 UIInterfaceOrientation
- UIDeviceOrientation判断当前机器硬件的旋转方向
- 关于SubSonic3.0插件使用Json反序列化获得的实体进行更新操作时,只能执行添加而不能执行修改(编辑)操作的处理
- UE4迁移继承自C++的蓝图类(痛苦经历)
- [UE4]蓝图调用c++
- 虚幻UE4蓝图添加数学表达式