日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UE4学习-鼠标事件(按下、释放、物体抓取、计算重量、触发开门)

發布時間:2023/12/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UE4学习-鼠标事件(按下、释放、物体抓取、计算重量、触发开门) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 關鍵類
  • 鼠標按下、釋放事件
  • 物體抓取
  • 計算物體重量

關鍵類

本篇博文用到的關鍵類有:

UInputComponent 用來綁定鼠標的按下和釋放事件 BindAction

UPhysicsHandleComponent 設置被抓取物體的抓取,移動,釋放
GrabComponentAtLocationWithRotation
ReleaseComponent
SetTargetLocation

UPrimitiveComponent 抓取組件抓取的對象
還可以獲取質量 GetMass

鼠標按下、釋放事件

首先,添加鼠標事件,在項目設置中,引擎->輸入->操作映射,按加號,添加一個映射對象,然后添加一個鼠標左鍵事件,一個空格鍵事件。

在代碼中創建一個 UInputComponent對象。

在grabber.h文件中,定義個人建議使用前置聲明,把頭文件放在cpp里面去包含。

并且添加兩個函數,一個表示按下,一個表示釋放。

#include <Components/InputComponent.h>void Grab();void Release();UInputComponent* inputComponent = nullptr;

在cpp文件中添加:

// Called when the game starts void Ugrabber::BeginPlay() {Super::BeginPlay();inputComponent = GetOwner()->FindComponentByClass<UInputComponent>();if (nullptr != inputComponent){UE_LOG(LogTemp, Warning, TEXT("find inputComponent"));inputComponent->BindAction("grab", IE_Pressed, this, &Ugrabber::Grab);inputComponent->BindAction("grab", IE_Released, this, &Ugrabber::Release);}else{UE_LOG(LogTemp, Error, TEXT("not find inputComponent"));}}void Ugrabber::Grab() {UE_LOG(LogTemp, Warning, TEXT("inputComponent press")); }void Ugrabber::Release() {UE_LOG(LogTemp, Error, TEXT("inputComponent release")); }

然后在虛幻編譯器中進行編譯,運行,鼠標按下釋放,空格按下釋放,都能打印日志,表示事件被觸發。

物體抓取

首先給pawn添加組件

編譯,保存。

添加的句柄對應的類是UPhysicsHandleComponent。

在grabber.h文件中,定義個人建議使用前置聲明,把頭文件放在cpp里面去包含。

并且添加兩個函數,一個表示按下,一個表示釋放。

class UPhysicsHandleComponent; UPhysicsHandleComponent* physicsHandel = nullptr;

在grabber.cpp文件中添加:

BeginPlay() {physicsHandel = GetOwner()->FindComponentByClass<UPhysicsHandleComponent>(); }// Called every frame void Ugrabber::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) {Super::TickComponent(DeltaTime, TickType, ThisTickFunction);// 設置抓取物體跟隨移動if (physicsHandel && physicsHandel->GrabbedComponent){physicsHandel->SetTargetLocation(getLineEnd());} }void Ugrabber::Grab() {UE_LOG(LogTemp, Warning, TEXT("inputComponent press"));FHitResult hit = lineTrace();UPrimitiveComponent* primit = hit.GetComponent();if (hit.GetActor() && physicsHandel){UE_LOG(LogTemp, Warning, TEXT("Grab"));physicsHandel->GrabComponentAtLocationWithRotation(primit, NAME_None, primit->GetOwner()->GetActorLocation(), GetOwner()->GetActorRotation());} }void Ugrabber::Release() {UE_LOG(LogTemp, Error, TEXT("inputComponent release"));if (physicsHandel){physicsHandel->ReleaseComponent();} }

這里把物體的抓取和釋放的函數修改了。

計算物體重量

要計算物體重量,需要給物體添加一個選項: 生成重疊事件

還要給物體設置重量,桌子20kg,椅子10kg。

一定要把物體的 生成重疊事件 這個選項勾選,否則沒法被檢查到。物體質量也沒法計算。

在openDoor.h文件中添加一個函數:

float GetTotalMassInTrigger();

在openDoor.cpp文件中添加如下代碼:

float UopenDoor::GetTotalMassInTrigger() {if (nullptr == trigger){return 0.0f;}TArray<AActor*> actArr;trigger->GetOverlappingActors(OUT actArr);float totalMass = 0.0f;for (const AActor* act : actArr){totalMass += act->FindComponentByClass<UPrimitiveComponent>()->GetMass();}UE_LOG(LogTemp, Warning, TEXT("total mass %f"), totalMass);return totalMass; }// Called every frame void UopenDoor::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) {Super::TickComponent(DeltaTime, TickType, ThisTickFunction);// if (nullptr != trigger && trigger->IsOverlappingActor(pawn))if(trigger && GetTotalMassInTrigger() > 25.0f){openDoor();lastTime = GetWorld()->GetTimeSeconds();}if (GetWorld()->GetTimeSeconds() - lastTime > openTime){closeDoor();} }

在 TickComponent 函數中添加了質量判斷,還修改開門的方式,桌子和椅子一共的重量添加,才能觸發開門。

運行起來,桌子和椅子一起在觸發器范圍內,總質量為30kg,觸發機關,門打開了。

當然角色老是會在空中飄著,給角色也設置一個模擬物體的屬性,這樣物體就帶重力了,跳上去也會慢慢落下來。


到此,游戲基本完成,下篇博文會使用藍圖對開門等操作,設置動畫效果。

總結

以上是生活随笔為你收集整理的UE4学习-鼠标事件(按下、释放、物体抓取、计算重量、触发开门)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 足交在线观看 | 国产欧美一区二区视频 | 影音先锋久久 | 日韩精品免费在线观看 | 亚洲国产日韩精品 | www.色午夜| 97高清国语自产拍 | julia一区二区中文久久97 | 一卡二卡在线观看 | 免费黄色网址在线 | wwwwxxxx国产| 日韩一区二区三区在线播放 | 欧美激情一区二区三区蜜桃视频 | 久久亚洲av无码西西人体 | 99涩涩| 99色| 成人永久免费视频 | 日韩在线视频网址 | 国产乱码精品一区二区三区忘忧草 | 狠狠爱欧美 | 日韩午夜免费视频 | 久久久99精品国产一区二区三区 | 欧美福利在线视频 | 国产精品99久久久久久动医院 | 秋霞电影网一区二区 | av色资源| 久久影视网| 富婆如狼似虎找黑人老外 | 素人女裸体 | 欧洲做受高潮欧美裸体艺术 | 日韩欧美在线看 | av久热 | 人妻熟女aⅴ一区二区三区汇编 | 美女国产在线 | 国产精品美女www爽爽爽 | 久色91| 欧洲精品一区 | 老司机久久精品视频 | 国产一级做a| 三级男人添奶爽爽爽视频 | 国产剧情精品 | 国产精品日韩精品 | 国产精品成av人在线视午夜片 | 国语播放老妇呻吟对白 | 天天欧美 | 欧美 国产 精品 | 欧洲精品免费一区二区三区 | 日韩在线观看一区二区 | 九一毛片 | 国产精品国产三级国产aⅴ无密码 | 国产性自拍 | 成人7777 | 超碰997| 91天天 | 亚洲毛片在线 | www.黄色国产 | 菊肠扩张playh | 性欧美videos另类艳妇3d | 欧美色图11p | 精品视频网站 | 极品色av | 伊人成人在线观看 | 国产亚洲精品久久久久久久 | 亚洲综合热 | 高清毛片aaaaaaaaa片 | 五级黄高潮片90分钟视频 | 国产大片在线观看 | 两口子交换真实刺激高潮 | 日本免费色 | 欧美区一区| 黑人3p波多野结衣在线观看 | 天堂资源在线观看 | 色综合av综合无码综合网站 | 欧美激情图片 | 美国免费高清电影在线观看 | 亚洲欧美韩日 | 国产精品久久精品 | 美女脱了裤子让男人捅 | 边打电话边做 | 午夜精品久久久久久久久久久久 | 激情深爱五月 | 寻找身体恐怖电影免费播放 | 伊人网欧美 | 无码日韩精品视频 | 六月激情婷婷 | 天天做天天干 | 99视屏| 饥渴丰满的少妇喷潮 | 成年人免费视频网站 | www.欧美精品 | 天堂在线官网 | 中文字幕在线视频一区 | 欧美日韩综合在线观看 | 后入内射欧美99二区视频 | 人人看人人草 | 少妇高潮惨叫久久久久 | 国产精品videos | 亚洲成人av一区二区 | 久久国产91 |