Verse:Verseとは何か?そして、私たちがVerseを作った理由 | Unreal Fest Tokyo 2026

-- Views

November 05, 26

スライド概要

講演内容:Verseとは何か、そしてEpic Gamesがなぜ新しいプログラミング言語を開発しているのか。本セッションでは、Verseが解決する課題や、UE6およびScene Graphにもたらすものについて解説し、Verseの主な言語機能も紹介します。

本講演へのアンケートにご協力をお願い致します:
https://docs.google.com/forms/d/e/1FAIpQLScI6FWrr04t65fePUmAE6s4RcAwETxXtOUQwk4M5skRkjaK-Q/viewform

講演者:
Magnus Enebakk(Epic Games)

Unreal Fest Tokyo 2026公式サイト:
https://www.unrealengine.com/events/unreal-fest-tokyo-2026

profile-image

Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

U E6, VERS E AN D S CENE GRAPH why we are building it

2.

YOU R SPEA KE R Verse Evangelist, Epic Games

3.

A GE NDA 01 02 03 04 05

5.

WH AT VE RSE I S for gameplay code Print("Hello, Unreal") Count:int = 1.5 # error var Score:int = 0 for, loop, class, interface X := if (A) then 1 else 2 <decides><transacts>

6.

WH Y V ERSE one live world CR EAT O R A Damage(Amount:float):void CR EAT O R B Health.Damage(25.0) CR EAT O R C uses B's weapon

7.

WH Y V ERSE one live world CR EAT O R A Damage(Amount:float):void CR EAT O R B Health.Damage(25.0) Broken: the call has one argument CR EAT O R C uses B's weapon Broken with the weapon

8.

WH Y V ERSE one live world CR EAT O R A Damage(Amount:float):void CR EAT O R B Health.Damage(25.0) Keeps working, unchanged CR EAT O R C uses B's weapon Keeps working, unchanged

9.

WH Y V ERSE designed to solve

11.

EN GI N E TI ME LI N E UE6 NO W UE6 UEFN

12.

TH E FUTU RE UEFN + UE5 Engine Platforms

13.

V ERSE IN UE6 sits

14.

V ERSE IN UE6 Forward-looking in UE6

15.

FOR UN REA L D EV ELO PERS maps over entity event, listenable component @editable prefab (a class) GetComponent[t] OnBegin/EndSimulation failure OnSimulate()<suspends> entity tags Sleep(), Await() []t, [k]v

17.

TH E L AN GU AGE at a glance int var 16 # constant player_stats "Hello, Unreal" # type inferred float # mutable var 10 AddScore set 100.0 class string int # required 0 25.0 string int map "Ana" int void set player_stats "Ana" AddScore 10 Add int int Add 5 int # last expression is the result 10 # named, optional arguments SpawnWave SpawnWave 3 int float 1.5 0.0 void # types are snake_case, values are PascalCase

18.
[beta]
TH E L AN GU AGE

expression
# if produces a value
if

50.0

then "Healthy" else "Hurt"

# for produces an array: array{2, 4, 6}
for

array 1

2

3

2

# case produces a value
case
move_mode

300.0

move_mode

600.0

# a function's value is its last expression
Square

int

int

19.

TH E L AN GU AGE what code can do <computes> <reads> <transacts> <decides> <suspends> FindTarget OpenDoor turret <decides><reads> agent door <suspends> void # can fail, only reads state # takes time

20.

FA IL URE failure

21.

FA IL URE nested null checks VERSE if GetVehicle GetComponent weapon_component GetLoaded then Fire

22.

FA IL URE filters for IsAlive IsVisibleFrom Distance do GrantGold 50

23.

FA IL URE everyday code # was it a player that stepped on the plate? if # no score yet? start from 0 player GrantPoints Scores or 0 10 # is there a current target? # take the first spawn point under the arena if FindDescendantEntitiesWithTag spawn_tag Fire if first Respawn

24.

FA IL URE failable GetDamage player AllStats int <decides><reads> int # no stats? fails

25.

FA IL URE failable GetDamage player int <decides><reads> int AllStats Weapons # no stats? fails # bad slot? fails

26.

FA IL URE failable GetDamage player int <decides><reads> int AllStats # no stats? fails Weapons # bad slot? fails 0 # not positive? fails

27.

FA IL URE failable GetDamage player int <decides><reads> int AllStats # no stats? fails Weapons # bad slot? fails 0 # not positive? fails # call it with [ ] in a failure context if GetDamage ApplyDamage 0

28.

FA IL URE undoes changes TryBuy shopper Pay if # fails without enough gold TakeOne # fails when sold out Add # fails when the bag is full TryBuy Equip item <transacts><decides> void not kept yet not kept yet fails

29.

FA IL URE Planned to know why buy_error Buy enum shopper item <transacts> result item Pay or TakeOne or return MakeError buy_error Add or return MakeError buy_error MakeSuccess buy_error return MakeError buy_error

30.

FA IL URE Planned to know why buy_error Buy enum shopper item <transacts> result item Pay or buy_error return MakeError buy_error TakeOne or return MakeError buy_error Add or return MakeError buy_error not kept yet MakeSuccess not kept yet THE CAL LER fails speculate Buy if GetSuccess The player sees BagFull, and nothing changed. Equip else if ShowError GetError

31.

C ONC URRE NC Y take time VERSE OpenVault <suspends> void Play Sleep 2.0 # wait, without blocking SlideOpen # returns when it's open Await Stop # wait for an event

32.

C ONC URRE NC Y Tick Tick 1 VERSE TASK void AVault if Tick float OpenVault EVaultState 1 <suspends> void Play Sleep 2.0 if 0 return SlideOpen StartOpening Await EVaultState else if if Stop EVaultState IsOpen EVaultState return

33.

C ONC URRE NC Y Tick Ticks 2 to 60: the 2 second wait VERSE TASK void AVault if Tick float OpenVault EVaultState 1 <suspends> void Play Sleep 2.0 if 0 return SlideOpen StartOpening Await EVaultState else if if Stop EVaultState IsOpen EVaultState return

34.

C ONC URRE NC Y Tick Tick 61: the wait is over VERSE TASK void AVault if Tick float OpenVault EVaultState 1 <suspends> void Play Sleep 2.0 if 0 return 2 SlideOpen StartOpening Await EVaultState else if if Stop EVaultState IsOpen EVaultState return

35.

C ONC URRE NC Y Tick Ticks 62 to 90: the door is opening VERSE TASK void AVault if Tick float OpenVault EVaultState 1 <suspends> void Play Sleep 2.0 if 0 return 2 SlideOpen StartOpening Await EVaultState else if if Stop EVaultState IsOpen EVaultState return

36.

C ONC URRE NC Y concurrency sync race wins rush branch wins

37.

C ONC URRE NC Y as a race VERSE ChargedAttack player_state <suspends> void # charge up, unless we get hit first race block Sleep true block Await false if FireProjectile else PlayStagger

38.

PERSI ST ENC E survives sessions player_progress class<final><persistable> int 1 int 0 # saved for each player, loaded when the player joins var weak_map player AddCoins player Progress int <transacts> void or player_progress player_progress if set Progress ShowCoins player_progress map

40.

SC ENE GRAPH a tree of entities vault_controller_component door_component pressure_plate_component EP_Vault prefab door_component EP_Vault

41.

SC ENE GRAPH a Verse class hello_component<public> class<final_super> component @editable Message<public> string OnBeginSimulation<override> OnSimulate()<suspends> super "Hello from Verse" void OnBeginSimulation Print OnSimulate<override> <suspends> void loop Sleep 5.0 Print "Still running"

42.

SC ENE GRAPH in Verse pressure_plate_component pressure_plate_component<public> @editable HoldTime<public> float OnSimulate<override> if class<final_super> component 2.0 <suspends> void GetComponent mesh_component

43.

SC ENE GRAPH in Verse pressure_plate_component pressure_plate_component<public> @editable HoldTime<public> float OnSimulate<override> class<final_super> component 2.0 <suspends> void if GetComponent mesh_component loop Await race block Await false block Sleep true

44.

SC ENE GRAPH in Verse pressure_plate_component pressure_plate_component<public> @editable HoldTime<public> float OnSimulate<override> class<final_super> component 2.0 <suspends> void if GetComponent mesh_component loop Await race block Await false block Sleep true if SendUp plate_activated_event

45.

SC ENE GRAPH through the tree plate_activated_event<public> vault_controller_component class scene_event # pressure_plate_component, on the plate SendUp plate_activated_event pressure_plate_component door_component door_component SendUp

46.

SC ENE GRAPH through the tree plate_activated_event<public> vault_controller_component OnReceive class scene_event # pressure_plate_component, on the plate SendUp plate_activated_event pressure_plate_component SendUp # vault_controller_component, on the arena OnReceive<override> if scene_event logic plate_activated_event OpenAllDoors true door_component else false door_component # handled: stop here

47.

SC ENE GRAPH through the tree plate_activated_event<public> vault_controller_component OnReceive class scene_event # pressure_plate_component, on the plate SendUp plate_activated_event pressure_plate_component SendUp # vault_controller_component, on the arena OnReceive<override> if scene_event logic plate_activated_event OpenAllDoors door_component true found # handled: stop here else false OpenAllDoors door_component void FindDescendantComponents door_component found for Open

48.

SC ENE GRAPH a Verse class GENERATED IN ASSETS. DIGEST.VE RSE EP_Vault # simplified: access specifiers and import paths left out class<final><concrete> entity door_component class<final> mesh_component @editable var material external I N YOUR CO DE # the whole prefab AddEntities array # now in the scene

49.

SC ENE GRAPH In design written in Verse I N VERSE (SYNTAX NOT FINAL ) vault prefab class entity Door<entity_field> entity entity Mesh<component_field> door_component Logic<component_field> door_component Alarm<entity_field> entity entity Sound<component_field> sound_component var Loot<entity_field> entity # only some vaults optional

51.

WH AT ' S NEXT Vision massive shared simulations One shared Verse simulation

52.

WH AT ' S NEXT Unreleased reactive code L IVE VARI ABL ES var REACTI NG TO CHANGE int 0 var live int set 5 var 1 int 100 # X now tracks Y # X is now 6 upon 0 # once, when it first holds Print "Player died!" when # every time it changes SetHealthBar await 100 # suspend until healed

53.

WH AT ' S NEXT Unreleased prediction HandleJump <predicts> void StartJumpAnimation # runs now, on the client PlayJumpSound PerformJump # the server validates

54.

WH AT ' S NEXT Forward-looking coming In progress On the roadmap Planned

55.

GO BUI L D learn Verse BO O K DO CS FO RUM S CO M M UNI TY API AL L L I NK S

56.

THAN K YO U