【UE4】Editor内の便利なコピーとペーストについて 【★】

※この記事で使用しているUnrealのVersionは04.22.0 です。
※今回の記事にサンプルプロジェクトはありません(不要なため)

エディター内いろんな場所でのコピーについて レベル【★】

〇レベル上の詳細内のコピー

よく、位置(Location)、回転(Rotation)、拡大・縮小(Scale)などをコピー&ペーストをする作業なんかはあるかと思います。

そんな時X,Y,Zをそれぞれコピー・ペーストしたりしていませんか?

これらは、それぞれのプロパティ上で右クリックすると、「コピー」と「貼り付け」という項目が出てきて、丸ごとコピー&ペーストを行うことができます。

また、コピーした情報をテキストに張り付けるとこんな形になります。

↓位置情報をコピーしたテキスト

(X=-390.000000,Y=280.000000,Z=125.000000)

また、トランスフォーム情報だけでなく、ほぼすべてのプロパティはコピーすることができます(一部出来ないものもあります)

・アセットの場合

↑をテキストに張り付けたもの↓

StaticMesh'/Game/ThirdPerson/Meshes/Linear_Stair_StaticMesh.Linear_Stair_StaticMesh'

・ENUMの場合

↑をテキストに張り付けたもの↓

Normal

・配列の場合

↑をテキストに張り付けたもの↓

("A","B","C","D")

ちなみに、テキストで上記の法則で書いたものをプロパティに貼り付けることもできます。
配列なんかは、外部で羅列を生成したものを張り付けるとすごく楽かと思います。

〇コンテンツブラウザのアセットリファレンスコピー

コンテンツブラウザ上のアセットのコピーは、中の情報はコピーされずに、リファレンスのみコピーされます(レベル上の詳細のアセットの参照をコピーした時と同じ)

↑をテキストに張り付けたもの↓

Texture2D'/Game/Mannequin/Character/Textures/UE4Man_Logo_N.UE4Man_Logo_N'

ちなみに複数選択状態でのコピーもできます。

↑をテキストに張り付けたもの↓

Texture2D'/Game/Mannequin/Character/Textures/UE4_Mannequin_MAT_MASKA.UE4_Mannequin_MAT_MASKA'
Texture2D'/Game/Mannequin/Character/Textures/UE4Man_Logo_N.UE4Man_Logo_N'
Texture2D'/Game/Mannequin/Character/Textures/UE4_LOGO_CARD.UE4_LOGO_CARD'
Texture2D'/Game/Mannequin/Character/Textures/UE4_Mannequin__normals.UE4_Mannequin__normals'

当然ペーストすると、元のアセットの情報をもとにアセットが生成されます。

複数をテキスト化できるところを応用すると、Reference Viewerから、参照されているアセット一覧をテキスト化するのが簡単になります。

ReferenceViewerで選択したアセットたちが、コンテンツブラウザ上で選択されるのでそのままコピーする。そして、テキストなどに張り付ける。

少々回りくどいですが、割と便利なのでオススメです。

〇ビューポート・ワールドアウトライナー上のアクターコピー

レベル上に配置されているアクターをコピーした際は、参照だけでなく、配置情報などの詳細もコピーされるため、レベル上に簡単に複製できます(当たり前ですが)

↑をテキストに張り付けたもの↓

Begin Map
Begin Level
Begin Actor Class=/Script/Engine.StaticMeshActor Name=Linear_Stair_StaticMesh Archetype=/Script/Engine.StaticMeshActor'/Script/Engine.Default__StaticMeshActor'
Begin Object Class=/Script/Engine.StaticMeshComponent Name="StaticMeshComponent0" Archetype=StaticMeshComponent'/Script/Engine.Default__StaticMeshActor:StaticMeshComponent0'
End Object
Begin Object Name="StaticMeshComponent0"
StaticMesh=StaticMesh'"/Game/ThirdPerson/Meshes/Linear_Stair_StaticMesh.Linear_Stair_StaticMesh"'
bOverrideLightMapRes=True
OverriddenLightMapRes=128
StaticMeshDerivedDataKey="STATICMESH_46A8778361B442A9523C54440EA1E9D_2C1BC8F50A7A43818AFE266EB43D9060Simplygon_5_5_2156_18f808c3cf724e5a994f57de5c83cc4b_545C07034C4CD50D46BBB1AB02DFBF8A0100000001000000010000000100000000000000010000004000000000000000010000000000803F0000803F0000803F0000803F000000000000803F00000000000000000000344203030300000000"
OverrideMaterials(0)=None
VisibilityId=1
BodyInstance=(MassInKgOverride=0.000000)
RelativeLocation=(X=-390.000000,Y=280.000000,Z=125.000000)
CustomProperties
End Object
StaticMeshComponent="StaticMeshComponent0"
RootComponent="StaticMeshComponent0"
ActorLabel="Linear_Stair_StaticMesh"
FolderPath="ArenaGeometry/Walkway"
Tags(0)="A"
Tags(1)="B"
Tags(2)="C"
Tags(3)="D"
End Actor
End Level
Begin Surface
End Surface
End Map

なにやら長いテキストになりましたが、たとえば「Tags(0)=”A”」の部分に注目するとプロパティもコピーされているのがわかります。

この部分を
Tags(0)=”E”
と変えてペーストしてみると、

ActorのTags内の0番目の配列の中身が”E”になっているのがわかります。

これを応用して、テキストを生成するツールを作ったりすることもできます(Blutilityなどで生成したほうが早かったりもしますが)

ちなみにフォルダーもコピーできます。

↑をテキストに張り付けたもの↓

Begin FolderList
Folder=ArenaGeometry/Arena
End FolderList

〇BluePrintのノードコピー

ブループリントのノードも当然コピー&ペーストができます。

↑をテキストに張り付けたもの↓

Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_1"
FunctionReference=(MemberParent=Class'"/Script/Engine.KismetSystemLibrary"',MemberName="PrintString")
NodePosY=80
AdvancedPinDisplay=Hidden
EnabledState=DevelopmentOnly
NodeGuid=167DC8B9466AFFB5CDAF849139DADC3A
CustomProperties Pin (PinId=D1F42CC046A43ADD4C151384EECE0829,PinName="execute",PinToolTip="\n実行",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=220B37E244C7E5282AAF77B54F6DD6BA,PinName="then",PinToolTip="\n実行",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=56A60C77481ED1294E63EAA6AD676341,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="ターゲット\nKismet System Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=Class'"/Script/Engine.KismetSystemLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,DefaultObject="/Script/Engine.Default__KismetSystemLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=BB6428FA4138A5889485B3B7D09EA056,PinName="WorldContextObject",PinToolTip="World Context Object\nObject Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=Class'"/Script/CoreUObject.Object"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=C961CEFC4671F51511A5C4B20563BFEA,PinName="InString",PinToolTip="In String\nString\n\n出力する文字列(ストリング)",PinType.PinCategory="string",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,DefaultValue="Hello",AutogeneratedDefaultValue="Hello",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=28DAC5F34B8BE3DC67DBF9A29D9DC6F3,PinName="bPrintToScreen",PinToolTip="Print to Screen\nBoolean\n\nスクリーンに出力するかどうか",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,DefaultValue="true",AutogeneratedDefaultValue="true",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
CustomProperties Pin (PinId=62ED0FE14F3132F183127EB90938A950,PinName="bPrintToLog",PinToolTip="Print to Log\nBoolean\n\nログに出力するかどうか",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,DefaultValue="true",AutogeneratedDefaultValue="true",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
CustomProperties Pin (PinId=0AFACDE14279722C8FC1A69DF233D205,PinName="TextColor",PinToolTip="Text Color\nLinear Color 構造体\n\nコンソールに出力するかどうか",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,DefaultValue="(R=0.000000,G=0.660000,B=1.000000,A=1.000000)",AutogeneratedDefaultValue="(R=0.000000,G=0.660000,B=1.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
CustomProperties Pin (PinId=8D7823354C563CE6BD9C2AAD6E65B0F7,PinName="Duration",PinToolTip="Duration\nFloat\n\n表示する長さ(スクリーンに表示するときのみ) マイナス値の場合コンフィグから読み込みます。",PinType.PinCategory="float",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,DefaultValue="2.000000",AutogeneratedDefaultValue="2.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
End Object

これもテキスト側をいじったりすることで編集はできますが、
↑のテキストをご覧になるとわかりますが、エディターが日本語版のものをコピーすると、コメント部分の日本語までコピーされてしまいます。

一応日本語設定のエディターでコピーしたノードを英語設定のエディター上のBPグラフにペーストしても問題はありませんでした(PrintStringノードで検証)

ただ、英語版でコピーしたものと日本語版でコピーしたものの結果が違うため、何か怖いです(日本語なのはコメント部分だったので、安全が保障されているかもしれませんが)

また、プロジェクトが違っても、グローバルな関数やマクロなどはコピー&ペーストで行き来はできますが、固有の関数などは、ノードの箱だけできて機能しないものになります。

・↓別のプロジェクトに、それには存在しない関数をペーストした場合

コピーやペーストは便利です。
が、この辺はアセットやアクターのコピーにも言えますが、ご利用は計画的に行いましょう。

◯+αメモ

ちなみにブループリントの「検索結果」ウィンドウで、出た結果もコピー出来ます。

↑をテキストに張り付けたもの↓

イベントグラフ
Print String
Print String
Print String
Print String
Print String

が、ブループリントの全検索のウィンドウでコピを行っても、何もコピーされません…。
(また、すべて選択をしても選択されない)

以上