




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
本頁面的內容:編輯器快速詞匯查找表項目文件和文件從GameObjects到Actors如何在虛幻4中編寫代碼在虛幻4中編寫游戲邏輯代碼常見問題然后呢?本指南從一個Unity的用戶視角來整體看待虛幻4,并幫助將Unity的開發經驗應用到虛幻4的世界中。編輯器下面是Unity編輯器和虛幻編輯器的圖片,用顏色標識了同類的區塊。每個區塊也添加了標簽,對應于虛幻術語表。虛幻編輯器完全可以通過對各個區塊的拖拽做到窗口布局的自定義。編輯資源素材在Unity中,Inspector分頁時用來編輯當前項目中選中的素材。在虛幻4中,細節面板則用來展示并修改當前選中物體的屬性,然后大量的編輯修改則需要專用的窗口或分頁。編輯每種類型的資源時都會打開分頁窗口,類似于網頁瀏覽器。當然這些分頁窗口也可以任意拖拽,并懸浮在其他窗口之上作為獨立窗口顯示。快速詞匯查找表下表左側包含了常見的Unity術語,右側是對應的(或差不多的)虛幻4術語。虛幻4的關鍵詞直接鏈接到更進一步的虛幻在線文檔中。分類Unity虛幻4游戲內容類型Component組件GameObjectActor,PawnPrefab藍圖類編輯器界面HierarchyPanel世界大綱Inspector細節面板ProjectBrowser內容瀏覽器SceneView視口網格物體Mesh靜態網格物體SkinnedMesh骨骼網格物體材質Shader材質,材質編輯器Material材質實例特效ParticleEffect特效,粒子,級聯Shuriken級聯游戲界面UIUMG(虛幻示意圖行UnrealMotionGraphics)動1E|Animatio圖2DSpriteEditorPaper2D編程C#C++Script藍圖物理RaycastLineTrace,ShapeTraceRigidBody碰撞,物理運行平臺iOSPlayer,WebPlayer支持的平臺項目文件和文件那么目錄和文件時怎么回事和Unity的項目一樣,虛幻的項目也存在于自有的目錄,并有自己的項目文件。可以通過雙擊一個.uproject文件打開虛幻編輯器并加載該項目,或者右鍵來查看更多選項。項目目錄中包含不同的子目錄,保存了游戲的資源內容和源代碼,以及各種配置文件和二進制文件。最重要的就是Content子目錄和Source子目錄。我的資源素材應該放在哪里?在虛幻4中,每個項目都有一個Content文件夾。類似于Unity項目的Asset目錄,這里就是游戲資源素材保存的地方。要向游戲中導入素材的話,只需要將素材文件拷貝到Content目錄,它們便會自動導入并出現在內容瀏覽器中。當使用外部程序修改這些資源時,編輯器中的資源也會自動的被更新。支持哪些通用資源文件格式?Unity支持很多文件格式。虛幻4也支持最通用的文件格式,如下表:資源類型支持的格式3D.fbx,.obj貝占圖.png,dds,.exr,.psd,.hdr聲音.wav字體.ttf,.otf視頻.mov,.mp4,.wmv場景是如何保存的?在Unity有一個地圖文件,對應于Unity場景。地圖文件保存了關卡的數據以及其中的物件,以及光照數據和某些關卡特定的設置。如果修改項目的設置?所有的項目設置都可以在主菜單的Edit/ProjectSettings中找到。類似于Unity的設置,能夠對項目設定所需要的信息(比如項目的名稱和圖標),配置游戲輸入的綁定,并定義運行項目時為“玩家設置”的部分,在虛幻中,我們叫“平臺設置”,并且可以在項目設置的“平臺”分類里找到。源文件在哪里?在Unity中,人們習慣于將C#的源文件放在資源目錄中。虛幻4工作機制有點不同。對那些擁有C++代碼的項目,可以在項目目錄中找到一個Source的子目錄包含多種文件,包括C卄源文件(.cpp)和頭文件(.h),以及編譯鏈接的腳本(.Build,cs,.Target,cs)然后,只有藍圖的o項目則不會有Source目錄。在虛幻4中開始使用C++最方便的做法是用編輯器的菜單項來AddCodeToProject(在主菜單的文件菜單中),或應用某個模板來新建一個C++的項目。可以直接在內容瀏覽器中直接看到C++類,并通過雙擊它們便能直接在VisualStudio或Xcode中打開該文件。從GameObjects到ActorsGameObject去哪里在Unity中,一個GameObject是可以被放置在世界中的一個'‘東西”。在虛幻4中對應的是一個Actoro在虛幻編輯器中,可以從物體面板中直接拖一個空的Actor放置到場景中:Youtube視頻雖然可以通過搭建并擴展空的Actor來制作游戲,但虛幻4提供了各種特殊類型的Actor并預制了它們的特性,比如Pawn(用于作為玩家或者AI的角),樣,可以直接將它們拖拽至場景中,并給它們添加組件,或自定義屬性。之后可以學習到更多相關內容,這里只需要了解虛幻4有個(Gameplay框架Gameplay/Framework來協同各種特殊的Actor一起工作。虛幻4中的Actor還是和Unity中的GameObjects有不同之處。在Unity中,GameObject是C#的類并且無法直接擴展。在虛幻4中,Actor是C++類,可以很容易的被繼承或擴展來自定義。我們之后將會談論更多!組件在哪里?在Unity中,可以通過為一個GameObject添加組件來達到給予一定的功能。在虛幻4中,也可以為Actor添加組件。在向關卡中放置了一個空的Actor后,點擊添加組件按鈕(在細節面板中并選擇一個組件來添加。這里我們通過放置一個空的Actor來創建一個火炬,并為它添加一個網格物體組件面的例子中看到,光源和粒子是連接到網格模型的。之后在復合Actor和復合GameObject中會有重要的描述討論。從Unity的prefabs到虛幻4的藍圖類Unity的工作流程是基于prefabs的。在Unity中,倉建一系列GameObjects以及它們的組件,并為它們創建prefabo然后便可以在世界屮放置prefab的實組件,并為它們創建prefabo然后便可以在世界屮放置prefab的實在虛幻4中,創建一個Actor以及它的組件,選擇它并點擊藍圖/添加腳本按鈕(在細節面板中)。然后選擇保存藍圖類的地方,并點擊創建藍圖來保存新建的藍圖!Youtube視頻新建的藍圖類可以在內容瀏覽器中找到。可以直接雙擊打開編輯它們,也可以將它們拖拽到任意場景關卡中。腳本組件和MonoBehaviour在哪里?在Unity中,GameObject有腳本組件,并可以添加C#腳本。可以創建MonoBehavior子類并定義那個組件做什么。虛幻4也有類似的內容。可以自由創建全新的組件類并將它應用于任意Actoro組件類可以使用藍圖腳本創在細節面板中,添加組件(AddComponent)的下拉框中,可以看到創建新組件,或者選擇已經存在的組件:在Unity中,當創建新的MonoBahaviour時,將會有一個框架類文件,并有Start()函數和Update()函數。在虛幻4中,也會有一個框架類,有~個InitializeCo()函數和一個TickComponent()函數,它們和Start>Update具有類似的行為。如果創建一個藍圖腳本組件,則會有可視化節點來表示函數:可編輯腳本Actor藍圖類這是個很酷的虛幻4功能:新建的Actor藍圖類可以擁有自己的可視化藍圖腳本編輯!這樣能夠為整個物體添加邏輯,而不僅僅是每個組件。結合繼承結構關系(稍后下Classessupportingvisualscriptin旦UE4alsosupportsC++Classesimplementedwithcode化腳本編輯,虛幻4還支持通過代碼C++類來實現。這里是雙方的System.Collections;publicclassMyComponent:MonoBehaviour//UsethisforinitializationvoidStart()))#pragmaonce#include^GameFramework/Actor.h〃#include〃MyActor.generatedclassAMyActor:publicGENERATED_BODY()intCount;//SetsdefauItvaluesforthisactor5sproperties.AMyActor()//AllowsTick()tobecalledPrimaryActorTickbCanEverTick=true;//CalledwhenthegamestartsorwhenspawnedvoidTick(floatDeltaSeconds)Super::Tick(DeltaSeconds);GLog->Log(FString::FromInt(Count));};虛幻4藍圖虛幻4藍圖類的擴展性Unity的prefabs和虛幻4的藍圖類在游戲中類似的實例化。然后的藍圖類在游戲中類似的實例化。然后Unity在prefabs之間的關系上有并發的問題,這限制了創作的擴展性。在虛幻4中,可以通過擴展已有的藍圖類來創建新的藍圖類,并定義新的屬性,組件功能及可視化腳本功能。比如,在虛幻4中,可以創建一個藍圖類叫做Monster,實現基本的怪物功能,比如追擊人類。然后可以創建一個叫做Dragon的藍圖類來擴展它(某種特定的怪物,添加了火焰吐息的功能),再有一個Grue(一種當它變黑是就有可能吃人的怪物),以及其他8種類型。這樣一些Monster的子類都繼承了基礎的Monster類的功能,并在此基礎上添加新的能力。在Unity中,則需要創建很多不同的GameObject的prefabs:為Dragon創建一個,為Grue創建一個,等等。假設這時希望為所有的怪物添加某個功能,比如使用一個Speak組件來說話,在Unity中則需要更新所有的10個prefabs,拷貝粘貼到每個中。在虛幻4中,只需簡單的修改Monster的藍圖類,并為它添加新的Speak的能力,便做完了!Dragon,Grue以及其他8種Monster的子類都會自動的繼承這個說話的新功能,并不需要去修改這些子類。但還有更多!我們關于藍圖類所說的一切,都同樣適用于C++的類,也同樣對Actors和組件適用。我們的體系設計時考慮支持各種不同程度的開發形式,具有功能上的可擴展性,可以為10個開發人員的項目服務,也可以為100個人的項目人員服務。那么應該用藍圖腳本還是C++代碼呢?或者同時使用?可視化系統對策劃、美術以及面向可視化編程的程序員是非常好用的,它能夠可視化的管理游戲內的物體,并且容易訪問。完全可以通過藍圖就完成一個游戲的制作。請參考TappyChicken示例,它是一個完整戲體系,制作復雜的AI行為,或者新增引擎功能。對于已有C++技能的開發人員而言,可以翻閱一下在虛幻4中的C++編程簡述頁面。大部分的項目都將是混合使用藍圖和C++。很多開發者使用藍圖來創作程容易且有趣,但會在之后的性能調整和更嚴格的引擎使用時將部分藍圖或全部藍圖腳本轉移至C++0藍圖類也能擴展C++類虛幻4的游戲開發中很多令人著迷的過程來存在于程序員用C++實現新的功能,而策劃和美術在藍圖中使用這些功能,并提出更多要求!下圖是針對一個虛幻4的射擊游戲項目中實現拾取物品過程時,團隊的一種形式,混合了C++類的編程實現,以及藍圖類用于處轉換組件在Unity中,每個GameObject都有一個轉換組件(TransformComponent),賦予該GameObject在世界中的位置、角度以及縮放比例。在虛幻4中類似,Actor有一個RootComponent,能夠作為場景組件的任意子類,場景組件賦予Actor在世界中的位置、角度及縮放比例,這些參數會費賦予該Actor的組件關系結構中在它之下的所有組件。很多有用的組件都是場景組件的子類,因此讓它們具有位置信息是非常有用的!即便只放置一個空的Actor,虛幻4也會為它創建一個"默認場景Root組件”,這是一個最簡單的場景組件。當放置一個新的場景組件時,默認場景Root則會被替換掉。復合物體在Unity中,可以構建GameObject之間的關系并將他們的轉換組件綁定,來創建復合物體。在虛幻4中,通過整潔的組件繼承便能創建復合游戲物體。從來得到,由于他們有轉換功能,類似于Unity中的轉換的綁定。Actor的各個組件(所有組件的基類)只能直接依附到Actor自己身上。我是否應該用組件來創造其他一切?其實這完全取決于你自己,大部虛幻4中已經提供了一些特殊類型的Actor用于某種能力并總是附帶某些組件。比如一個Character總是會包含一個CharacterMovement組件。有一些在引擎中常見的Actor類型,并且大部分種類的游戲都會Actor的一種類型,用于表現一個可供控制的游戲物體,比如是玩家的角色。Pawn通常都是被玩家或者AI通過Controller控制并移動。通過將Pawn和Controller的分離,我們可以編寫AIController,用于控Controller-一個更為特殊的Controller,用于從玩家的手柄中獲得輸入信息,或者鼠標鍵盤中獲得殊瑞星納西,并將這些信息驅動它所控制的Pawn或者Character的行為。那么所有的東西都是Actor咯?并不是所有的。Actor是虛幻4中最常見的用于游戲的類,并是唯一能夠在世界中被創建生成Spawn的類。因此任何被放置在關卡中的東西都將是一個Actor另外一個需要知道的重要類型是ObjectoObject實際0上是所有虛幻引擎的類的基類,包括Actor以及一些其他的類。這是一個比Actor更加底層的類,具備一些作為虛幻引擎類的可預料的功能,比如反射和序列化。Object是一個非常基礎的類,當我們需要定義一個新的類但又并非Actor的時候會使用它。比如ActorComponent是Gameplay框架是什么東西?好吧,這里開始事情變得一點點瘋狂也做了同樣的事情。在Unity中可以基于GameObjects和組件來創建所頂層提供了叫做Gameplay框架的部分,而Unity中并沒有這塊內容。雖然做一款游戲并不是一定要用到它,但如果用的話會非常酷!基本上來說,它提供了一些基礎功能,如果遵循它的邏輯,您將能夠很容易的獲得一些很贊的功能,否則可能花費很多時間,并且實現也很困難,或者很難改造。(比如完整的多人游戲支持!)已有大量的酷炫游戲基于虛幻的Gameplay框架之上制作,花點時間來了解該框架的機制是很值得的。沒錯,最終您將具有您自己的框架形式,如果想要這么做當然完全沒問題!但虛幻4當前已有數以百計的炫酷開發者在使用它,因此我們花點時間來了解一下。要使用Gameplay框架,只需要了解一些預制的Actor類,比如Pawn,Character,和PlayerController,并逐步了解虛幻的網絡復制和網絡其他功能。現在我們先回到最基本的部分。如何在虛幻4中編寫代碼我曾習慣于在MonoDevelop中寫代碼對于藍圖腳本,只需要虛幻編輯器——所有的東西都已經包括了!要編寫C++代碼,在Windows平臺下載VisualStudio的免費版本,如果是Mac的話則需要安裝Xcode當第一次創建一個新0項目(或者為已有項目添加代碼)時,虛幻4將會自動的創建VisualStudio的項目文件。您只需要在內容瀏覽器中雙擊一個C++的類便能在VisualStudio中打開它,或者在主菜單的文件菜單中點擊OpenVisualStudio在虛幻4中有個重要的不同:有時必須要手動的更新oVisualStudio的項目文件(比如,下載了UE4的新版本,或者對源代碼文件的磁盤存放位置做了人為改變)。可以通過在主菜單中點擊RefreshVisualStudioProject或者在項目目錄中右鍵點擊.uproject文件并選擇GenerateVisualStudioprojectfi.les便可。編寫事件函數(Start,Update等)如果您曾用MonoBehaviors工作,那一定熟悉諸如Start,Update和OnDestroy等方法。以下是對Unity的行為和對應的虛幻4的Actor和組件的比較。在Unity中,我們可能有一個簡單的組MonoBehaviour<請記住,在虛幻4中,您可以直接為Actor寫代碼而無需創建新的組件來添加代碼。這其實是很常見并有意義的。類似于Unity的Start,OnDestroy和Update函數,虛幻4在Actor中有類似的方法:C++:UCLASS()classAMyActor:publicAActor{GENERATED_BODY()voidBeginPlay();//Calledwhendestroyed?voidEndPlay(constEEndPlayReason::TypeEndPlayReason);//Calledeveryframetoupdatethisactor.voidTick(floatDeltaSeconds);};藍圖:在虛幻4中,組件具有不同的函數。以下是示例:C++:UCLASS()classUMyComponent:publicUActorComponent(GENERATED_BODY()//CalledaftertheowningActorwascreatedvoidInitializeComponent();//CalledwhenthecomponentortheowningActorisbeingdestroyedvoidUninitializeComponent();//ComponentversionofTickvoidTickComponent(floatDeltaTime,enumELevelTickTickType,FActorComponentTickFunction*ThisTickFunction);};藍圖:請記住,在虛幻4中調用基類的方法很重要。比如,在UnityC#中可能是調用base.UpdaUMyComponent::TickComponent(floatDeltaTime,enumELevelTickTickType,FActorComponentTickFunction*ThisTickFunction)(//CustomtickstuffhereSuper::TickComponent(DeItaTime,TickType,ThisTickFunction);YoumayhavenoticedsomethingsbeginwithandotherswithprefixindicatesanObjectsub-classforexampleisusedformostplaindatastructuresornon-UObjectclasses.您也許已經注意到C++中有些以“A”開頭,而其他一些以“U”開頭。前綴“A”代表它是一個Actor的子類,而前綴“U”代表它是一個Object的子類。還有其他一些前綴,比如“F”用于代表一個平鋪的數據結構體,或者其他非Uboject的類。在虛幻4中編寫游戲邏輯代碼好了,現在開始稍微深入一些。我們將談論一下創建游戲所需要的編程話題。因為您了解Unity,我們來面向C#的用戶解釋C++的功能,當然您也可以使用藍圖來完成幾乎所有的事情!我們盡可能的為范例提供C++的同時也提供藍圖。先說一下一些通用的游戲邏輯編程模式,以及如何在虛幻中實現。許多在Unity中的函數在虛幻中都有類似的函數。我們先從最常見的開始。InstantiatingGameObject/SpawningActor在Unity中,我們使用Instantiate函數來新建物體的實例。該函數使用任意的UnityEngine.GameObjectEnemyPrefab;publicVector3SpawnPosition;publicQuaternionSpawnRotation;GameObjectNewGO=(GameObject)Instantiate(EnemyPrefab,SpawnPosition,SpawnRotation);NewG0name="MyNewGameObject〃;在虛幻4中,根據不同的需要,有一些不同的函數用于創建物體。NewObject用于創建新的UObject類型實例,而SpawnActor用于創建新的AActor類型實例。首先我們總體說一下UObject和NewObject。在虛幻中UObject的子類很像Unity中ScriptableObject的子類。對于游戲過程中,它們是那些不需要在游戲世界中創建并看見的存在。在Unity中,如果要創建自己的ScriptableObject子類,可能會像下面這樣的初MyScriptableObjectNewSO=ScriptableObject中,如果要創建UObject的繼承類,是像下面這樣的初始化:UMyObject*NewObj=NewObject();那么Actor呢?Actor的在世界(C++中的UWorld)中生成是通過SpawnActor方法。如何獲取World對象?有些UObject會提供一個GetWorld的方法,所有的Actor則都具有這個方法。您可能已經注意到,并沒有傳遞一個Actor,我們傳遞了一個Actor的“class”來作為生成Actor的參數。在我們的范例中,是一個AMyEnemy類的任意子類。但如果想要創建某個東西的"拷貝",就像Unity的Instantiate函數那樣,該怎么做呢?NewObject和SpawnActor函數也能通過給一個"模板”對象來工作。虛幻引擎會創建該一個對象的拷貝,而不是從零創建一個新的對象。這將會拷貝該CreateCloneOfMyActor(AMyActor*ExistingActor,FVectorSpawnLocation,FRotatorSpawnRotation){UWorld*World=ExistingActor->GetWorld();FActorSpawnParametersSpawnParams;World->SpawnActor(ExistingActor->GetClass(),SpawnLocation,SpawnRotation,SpawnParams);您也許想知道“從零開始創建”在這里具體是什么意思。每個對象類在創建時都有一個默認模板,包含了它的默認屬性和組件。在創建時如果您并不像修改這些默認屬性,并沒有提供你自己的模板,虛幻將使用這些默認值來創建該對象。為了更好的說明這個,我們MonoBehaviour(publicintMylntProp=42;publicSphereColliderMyCollisionComp=null;//Createthecollisioncomponentifwedor?talreadyMyCollisionComp=gameObjectAddComponent();MyCollisionCompMyCollisionComp.radius=在上面這個例子中,有一個int屬性,默認是42,并有一個SphereCollider組件默認半徑是20。在虛幻4中,利用對象的構造函GENERATED_BODY()int32MylntProp;USphereComponent*MyCollisionComp;MylntPropMylntProp=42;MyCollisionComp=MyCo11isionComp->RelativeLocation=FVector::ZeroVector;MyCollisionComp->SphereRadius=20.Of;}在AMyActor的構造函數中,我們為這個類設置了屬性的默認值。請注意CreateDefaultSubobject函數。我們可以用它來創建組件并賦予組件默認值。所有子對象都將使用這個函數作為默認模板來創建,也可以在子類或者藍圖中對它進行修改。類型轉換在這個例子中,獲取了一個己知的組件,并將它轉C#:Collidercollider=gameObject.GetComponent;SphereCollidersphereCollider=colliderasSphereCollider;if(//...虛幻4C++:UPrimitiveComponent*Primitive=MyActor->GetComponentByClass(UPrimitiveComponent::StatieClass());USphereComponent*SphereCollider=Cast(Primitive);if(SphereCollider!=nullptr){//...銷毀GameObject/ActorUnityC++藍圖Destroy(MyGameObject);UnityC++藍圖Destroy(MyGameObject,1);MyActor->SetLifeSpan(l);禁用GameObjects/ActorsUnityC++BlueprintMyGameObjectSetActive(false);//HidesvisiblecomponentsMyActor->SetActorHiddenlnGame(true);////DisablescollisioncomponentsMyActor->SetActorEnab1eCo11ision(false);//StopstheActorfromtiekingMyActor->SetActorTickEnabled(false);通過組件訪問GameObject/ActorUnityC++藍圖GameObjectParentGO=MyComponentAActor*ParentActor=MyComponent->GetOwner();點擊查看大圖通過GameObject/Actor訪問組件UnityMyComponentMyCompMyActor->FindComponentByClass();藍圖查找GameObjects/Actors//FindGameObjectbynameGameObjectMyGO=//FindObjectsbytypeMyComponent[]Components=FindObjectsOfType(typeof(MyComponent))asMyComponent[];foreachforeach(MyComponentComponentinComponents)//FindGameObjectsbytagGameObject[]GameObjects=GameObjectFindGameObjectsWithTag(/zMyTagz,);foreach(GameObjectGOinGameObjects)(//...//FindActorbyname(alsoworksonUObjects)AActor*MyActor=FindObject(nullptr,TEXT(〃MyNamedActor〃));//FindActorsbytype(needsaUWorldobjecAMyActor*MyActor=*It;//...//FindUObjectsbytype{UMyObject*MyObject=*It;//…////FindActorsbytag(alsoworksonActorComponents,useTObjectlteratorinstead)for(TActorlteratorIt(GetWorldO);It;++It)(AActor*Actor=*It;//...)為GameObjects/Actors添加標簽MyGameObject.tag=〃MyTag〃;//ActorscanhavemultipletagsMyActor.Tags.AddUnique(TEXT(〃MyTag〃));為MonoBehaviours/ActorComponents添加標簽//ThischangesthetagontheGameObjectitisattach//ComponentshavetheirownarrayoftagsMyComponent.ComponentTagsGameObjects/Actors和MonoBehaviours/ActorComponents的標簽MyTag//...)//ChecksifanActorComponenthasthistag辻物理:剛體vs.兀組件在Unity中藥給一個GameObject物理特性,需要給它一個剛體組件。在虛幻中,任何元組件(C++中為盒形),StaticMeshComponent,以及SkeletalMeshComponent和Unity不同,oUnity將碰撞體和可視物體分列到不同的組件中。而虛幻則將潛在的物理碰撞和潛在的可視效果組合到了Primitivecomponent中。任何在世界中具有形狀的物體,要么就是能夠被渲染顯示,要么就是能作物理交互,它們都繼承于Primitivecomponent。層vs通道在Unity中,它們被稱為"層(Layer)"。虛幻使用碰撞通道(CollisionChannel)來描RayTraceUnityC#:GameObjectFindGOCameralsLookingAt()Vector3Start=Cameratransfonn.position;Vector3Direction=CameraDistance=100.Of;RaycastHitHit;XHlinseyiiHdeoejleuieq;Aqpejeindodste6^OuMedjegJjopvpejouBippvsujejeciu/v\eds,jeAe|deq;ejou6|//IsitiejedsuuejedAjenouoisinoojeoejleq;tnoqeseipedojdsnoueAOjvBui^oonsiejeujeouMecipuij::」o||o」iuoo_oAe||A|/\|\/八c//Raycastoutfromthecamera,onlycollidewithpawnsFVectorStart=P1ayerCameraManager->GetCameraLocation();FVectorEnd=Start+boolbHit=GetWorld()->LineTraceSingle(Hit,Start,End,ECC_Pawn,Params);//Hit.ActorcontainsaweakpointertotheActorthatthetracehit)returnnullptr;)虛幻4藍圖:點擊查看大圖。觸發器UnityC#:publicclassMyComponent:MonoBehaviour)voidOnTriggerEnter(ColliderOther)//..?voidOnTriggerExit(ColliderOther)classAMyActor:publicGENERATED_BODY()//MytriggercomponentUPROPERTY()UPrimitiveComponent*Trigger;Trigger=CreateDefaultSubobject(TE//Bothcollidersneedtohavethi//Setthecollisionmodeforthecollider//Thismodewillonlyenablethecolliderforraycasts,sweeps,andoverlapsSetCo11isionEnabled(ECo11isionEnabled::QueryOnly);voidBeginPlay()//RegistertofindoutwhenanoverlapoccursOnActorBeginOverlapAddDynamic(this,&AMyActor::OnTriggerEnter);OnActorEndOverlapAddDynamic(this,&AMyActor::OnTriggerExit);Super::BeginPlay();)voidEndPlay(constEEndPlayReason::TypeEndPlayReason)OnActorBeginOverlapRemoveDynamic(this,&AMyActor::OnTriggerEnter);OnActorEndOverlapRemoveDynamic(this,&AMyActor::OnTriggerExit);Super:EndPlay(EndPlayReason);UFUNCTIONOvoidOnTriggerEnter(AActor*Other);UFUNCTIONOvoidOnTriggerExit(AActor*Other);虛幻4藍圖:還可以在這里讀到更多關于設置碰撞的響應。岡I」體運動UnityC#:publicclassMyComponent:MonoBehaviourrigidbody.isKinimatic=true;rigidbody.velocity=transformforward*10.Of;)在虛幻4中,碰撞組件和剛體組件是同一個組件,它的基類是UPrimitiveComponent,它也有不同的子類(USphereComponent,UCapsuleComponent等)來配合不同的需求。classAMyActor:publicUPrimitiveComponent*PhysicalComp;PhysicalComp=CreateDefaultSubobject(TEXT(//CollisionAndPhysPhysicalComp->SetSimulatePhysics(false);PhysicalComp->SetPhysicsLinearVelocity(GetActorRotation())輸入事件UnityC#:publicclassMyPlayerController:MonoBehaviour(//..?GetAxis("Horizontal〃);//…classAMyPlayerController:publicAPlayerControllerGENERATED_BODY()voidSetuplnputComponent()Super::SetupInputComponent();&AMyPlayerController::HandleFirelnputEvent);InputComponent->BindAxis("Horizontal",this,&AMyPlayerController::HandleHorizontalAxisInputEvent);InputComponent-〉BindAxis("
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 溫州理工學院《音樂》2023-2024學年第一學期期末試卷
- 山東中醫藥高等專科學校《比較憲法》2023-2024學年第二學期期末試卷
- 上海體育大學《流體機械CAD》2023-2024學年第二學期期末試卷
- 武漢電力職業技術學院《食用菌栽培與加工技術》2023-2024學年第二學期期末試卷
- 商場鋪位租賃合同書二零二五年
- 荒山荒地承包合同書范例
- 二零二五離婚撫養費給付標準
- 質押借款合同模板二零二五年
- 二零二五社保補償金協議
- 私人房屋裝修安全協議書
- 醫院藥品信息管理系統(DOC)
- isa-381g站用變接地保護測控裝置技術使用說明書南網版v3
- 計算機應用基礎(中等職業學校校本教材)
- 完整版健康管理師
- 沈陽終止解除勞動合同范文證明書(三聯)
- 廣東省中型灌區續建配套與節水改造工程初步設計報告編制指南17
- 哲學專業英語詞匯
- 2022年教師資格《初中道德與法治學科知識與教學能力》真題卷
- SOP標準作業指導書1
- 基于內模控制的模糊PID參數的整定外文文獻翻譯完稿
- 最全可自由編輯的中國各省市地圖
評論
0/150
提交評論