2019年7月16日に行われた「UE4モバイル勉強会 in 東京」におけるカニパンチ様(@CrabPunch)による講演の資料です。
https://connpass.com/event/137717/
動画はこちら:https://www.youtube.com/watch?v=luYTZHI0byg
2019年7月16日に行われた「UE4モバイル勉強会 in 東京」におけるカニパンチ様(@CrabPunch)による講演の資料です。
https://connpass.com/event/137717/
動画はこちら:https://www.youtube.com/watch?v=luYTZHI0byg
An Agile Way As an SET at LINE
伊藤 宏幸(LINE株式会社 LINE開発3室 SET/@hageyahhoo)
LINE Developer Meetup in Tokyo #39 Testing & Engineering
での発表資料です
https://line.connpass.com/event/91423/
本資料は旧版です。最新内容は以下のリンクよりご確認をお願いいたします。
https://www.slideshare.net/EpicGamesJapan/cedeckyushu-2017-ue4tips
SlideShare上での表示ですとノードの文字が見えないため、Download推奨です。
2017年8月31日にパシフィコ横浜にて開催されたCEDEC2017の講演資料です。UE4におけるモバイル向け機能・開発時の注意点・Tipsについて説明しています。(Epic Games Japan 岡田 和也)
http://cedec.cesa.or.jp/2017/session/ENG/s59102d4c80be6/
Game Server Services(GS2) はゲームサーバーに割いていた開発リソースを削減し、ゲームを面白くすることにリソースを集中し、より短い期間でより価値の高いゲームを世の中に提案していける環境づくりを目標として開発されました。
かつてゲームエンジンを自社開発していた時代から、汎用ゲームエンジンを使った開発に開発スタイルは変化しました。サーバー分野でもこの変化が起こる日は間近です。
本セッションでは GS2 を使ったサーバー開発をしないゲーム開発をについて解説します。
データ分析SDK導入によるメリットは大きいですが、一方でその導入による工数の確保やクラッシュの危険性に疑問を持つ方も多いのではないでしょうか。
今回はマーケティングプラットフォーム「Repro」を例に、導入工数やそれに伴う動作やCPUへの影響、導入後に削減できる工数やマーケティング観点からみたメリットや成果についてお話しします。
またRepro AI Labsが取り組んでいる、離脱しそうなユーザーや課金しそうなユーザー予測をAIで行うことによる効果と今後の取り組みについてご紹介します。
Microsoft Azure 上で稼働している、新製品モノビットエンジンンクラウドはマルチプレイを利用したアプリ、コンテンツ開発だけでなく、xR デバイスでも簡単に扱う事が可能です。
本セッションではマルチデバイスにおける xR コンテンツの実際の事例などを交え、HoloLens にも対応したモノビットエンジンの最新情報もお届けいたします。
Microsoft Azure の VM のおよそ半分が Linux で動いています。
今回は、ゲーム開発の中で取り上げられることの多い Linux で開発されたゲームのケースを交えながら、Microsoft Azure の便利な機能をご紹介していきます。
79. #UE4 | @UNREALENGINE
コード 1/2
import unreal
import numpy as np
import sklearn
from sklearn.cluster import KMeans
bp_instance = unreal.EditorAssetLibrary.load_blueprint_class('/Game/BP_Instance.BP_Instance')
list_actors = unreal.EditorLevelLibrary.get_selected_level_actors()
list_static_mesh_actors = unreal.EditorFilterLibrary.by_class(list_actors,unreal.StaticMeshActor)
list_unique = np.array([])
for lsm in list_static_mesh_actors:
static_mesh = lsm.get_component_by_class(unreal.StaticMeshComponent).get_editor_property("StaticMesh")
list_unique = np.append(list_unique,static_mesh)
list_unique = np.unique(list_unique)
for lu in list_unique:
list_transform = np.array([])
list_locations = np.array([[0,0,0]])
80. #UE4 | @UNREALENGINE
コード 2/2
for lsm in list_static_mesh_actors:
if lsm.get_component_by_class(unreal.StaticMeshComponent).get_editor_property("StaticMesh") == lu:
list_transform = np.append(list_transform,lsm.get_actor_transform())
location = np.array([[lsm.get_actor_location().x,lsm.get_actor_location().y,lsm.get_actor_location().z]])
list_locations = np.append(list_locations,location,axis=0)
list_locations = np.delete(list_locations,0,axis=0)
num_clusters = 3
pred = KMeans(n_clusters=num_clusters).fit_predict(list_locations)
instanced_components = np.array([])
for i in range(num_clusters):
instanced_actor = unreal.EditorLevelLibrary.spawn_actor_from_class(bp_instance,(0,0,0),(0,0,0))
instanced_component = instanced_actor.get_component_by_class(unreal.InstancedStaticMeshComponent)
instanced_components = np.append(instanced_components,instanced_component)
for j, pd in enumerate(pred):
instanced_components[pd].add_instance(list_transform[j])
for k in range(num_clusters):
instanced_components[k].set_editor_property("StaticMesh",lu)
for lsm in list_static_mesh_actors:
lsm.destroy_actor()
98. #UE4 | @UNREALENGINE
解説 4/5
#コンポーネントのリストを作成
instanced_components = np.array([])
#クラスタ毎にアクタをスポーン、コンポーネントをリストに入れる
for i in range(num_clusters):
instanced_actor = unreal.EditorLevelLibrary.spawn_actor_from_class(bp_instance,(0,0,0),(0,0,0))
instanced_component = instanced_actor.get_component_by_class(unreal.InstancedStaticMeshComponent)
instanced_components = np.append(instanced_components,instanced_component)
99. #UE4 | @UNREALENGINE
解説 4/5
#コンポーネントのリストを作成
instanced_components = np.array([])
#クラスタ毎にアクタをスポーン、コンポーネントをリストに入れる
for i in range(num_clusters):
instanced_actor = unreal.EditorLevelLibrary.spawn_actor_from_class(bp_instance,(0,0,0),(0,0,0))
instanced_component = instanced_actor.get_component_by_class(unreal.InstancedStaticMeshComponent)
instanced_components = np.append(instanced_components,instanced_component)
100. #UE4 | @UNREALENGINE
解説 4/5
#コンポーネントのリストを作成
instanced_components = np.array([])
#クラスタ毎にアクタをスポーン、コンポーネントをリストに入れる
for i in range(num_clusters):
instanced_actor = unreal.EditorLevelLibrary.spawn_actor_from_class(bp_instance,(0,0,0),(0,0,0))
instanced_component = instanced_actor.get_component_by_class(unreal.InstancedStaticMeshComponent)
instanced_components = np.append(instanced_components,instanced_component)
101. #UE4 | @UNREALENGINE
解説 4/5
#コンポーネントのリストを作成
instanced_components = np.array([])
#クラスタ毎にアクタをスポーン、コンポーネントをリストに入れる
for i in range(num_clusters):
instanced_actor = unreal.EditorLevelLibrary.spawn_actor_from_class(bp_instance,(0,0,0),(0,0,0))
instanced_component = instanced_actor.get_component_by_class(unreal.InstancedStaticMeshComponent)
instanced_components = np.append(instanced_components,instanced_component)
スポーンするアクタは
あらかじめ用意しておく
Blueprintを作成し
Instanced Static Meshを追加
102. #UE4 | @UNREALENGINE
解説 4/5
#コンポーネントのリストを作成
instanced_components = np.array([])
#クラスタ毎にアクタをスポーン、コンポーネントをリストに入れる
for i in range(num_clusters):
instanced_actor = unreal.EditorLevelLibrary.spawn_actor_from_class(bp_instance,(0,0,0),(0,0,0))
instanced_component = instanced_actor.get_component_by_class(unreal.InstancedStaticMeshComponent)
instanced_components = np.append(instanced_components,instanced_component)
103. #UE4 | @UNREALENGINE
解説 5/5
#クラスタ番号を元に親となるインスタンスを選択し、トランスフォームを追加
for j, pd in enumerate(pred):
instanced_components[pd].add_instance(list_transform[j])
#スタティックメッシュを割り当て
for k in range(num_clusters):
instanced_components[k].set_editor_property("StaticMesh",lu)
#最初に選択していたアクタを削除
for lsm in list_static_mesh_actors:
lsm.destroy_actor()
104. #UE4 | @UNREALENGINE
解説 5/5
#クラスタ番号を元に親となるインスタンスを選択し、トランスフォームを追加
for j, pd in enumerate(pred):
instanced_components[pd].add_instance(list_transform[j])
#スタティックメッシュを割り当て
for k in range(num_clusters):
instanced_components[k].set_editor_property("StaticMesh",lu)
#最初に選択していたアクタを削除
for lsm in list_static_mesh_actors:
lsm.destroy_actor()
105. #UE4 | @UNREALENGINE
解説 5/5
#クラスタ番号を元に親となるインスタンスを選択し、トランスフォームを追加
for j, pd in enumerate(pred):
instanced_components[pd].add_instance(list_transform[j])
#スタティックメッシュを割り当て
for k in range(num_clusters):
instanced_components[k].set_editor_property("StaticMesh",lu)
#最初に選択していたアクタを削除
for lsm in list_static_mesh_actors:
lsm.destroy_actor()
空のインスタンス
106. #UE4 | @UNREALENGINE
解説 5/5
#クラスタ番号を元に親となるインスタンスを選択し、トランスフォームを追加
for j, pd in enumerate(pred):
instanced_components[pd].add_instance(list_transform[j])
#スタティックメッシュを割り当て
for k in range(num_clusters):
instanced_components[k].set_editor_property("StaticMesh",lu)
#最初に選択していたアクタを削除
for lsm in list_static_mesh_actors:
lsm.destroy_actor()
107. #UE4 | @UNREALENGINE
解説 5/5
#クラスタ番号を元に親となるインスタンスを選択し、トランスフォームを追加
for j, pd in enumerate(pred):
instanced_components[pd].add_instance(list_transform[j])
#スタティックメッシュを割り当て
for k in range(num_clusters):
instanced_components[k].set_editor_property("StaticMesh",lu)
#最初に選択していたアクタを削除
for lsm in list_static_mesh_actors:
lsm.destroy_actor()
108. #UE4 | @UNREALENGINE
解説 5/5
#クラスタ番号を元に親となるインスタンスを選択し、トランスフォームを追加
for j, pd in enumerate(pred):
instanced_components[pd].add_instance(list_transform[j])
#スタティックメッシュを割り当て
for k in range(num_clusters):
instanced_components[k].set_editor_property("StaticMesh",lu)
#最初に選択していたアクタを削除
for lsm in list_static_mesh_actors:
lsm.destroy_actor()
112. #UE4 | @UNREALENGINE
コード
import unreal
import numpy as np
selected_actors = unreal.EditorLevelLibrary.get_selected_level_actors()
for sa in selected_actors:
instanced_components = np.array([])
instanced_component = sa.get_components_by_class(unreal.InstancedStaticMeshComponent)
instanced_components = np.append(instanced_components,instanced_component)
for ic in instanced_components:
instance_transform = np.array([])
instance_count = ic.get_instance_count()
for j in range(instance_count):
instance_transform = np.append(instance_transform,ic.get_instance_transform(j,1))
spawned_actor = unreal.EditorLevelLibrary.spawn_actor_from_class(unreal.StaticMeshActor,(0,0,0),(0,0,0))
spawned_actor.set_actor_transform(instance_transform[j],0,0)
smc = spawned_actor.get_component_by_class(unreal.StaticMeshComponent)
smc.set_editor_property("StaticMesh",ic.get_editor_property("StaticMesh"))
for sa in selected_actors:
sa.destroy_actor()