O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
今福 文章

エンジニア

技術統括部

KLab株式会社

スクリプトエンジン作って

無双する

2
自己紹介

3
● スクリプトエンジン開発

● UI基盤開発

● アラビア語表示対応

● タイ語表示対応

今福 文章

エンジニア

技術統括部

KLab株式会社

仕事

画像

● プログラミング

● シナリオ

技能

● イラスト

●...
4
本日伝えたいこと

5
スクリプトエンジンはいいぞ

6
お品書き

7
お品書き

● スクリプトエンジンとは

● スクリプトエンジンを作るメリット

● スクリプトエンジンの作り方

● KLabの内製スクリプトエンジン

● まとめ

8
スクリプトエンジンとは

9
スクリプトエンジンとは

スクリプト言語(簡易的なプログラミング言語)を用いる

ゲームエンジンの一種。

アドベンチャーゲームを開発する上で、必須となるもの。

10
スクリプトエンジンの主な機能

● 表示制御

● 進行制御

● 音声制御

● 自動再生・早送り

● ログ記録

● フラグ制御

● セーブ・ロード

● 既読管理

etc...

11
既存のスクリプトエンジン

● 吉里吉里

● NScripter

● Artemis Engine

● ティラノスクリプト

● 宴

etc...

12
スクリプトエンジンの立ち位置

シナリオ・グラフィック・サウンド
 スクリプトエンジン

作品

13
スクリプトエンジンを作るメリット

14
既存のエンジンがあるのに、

なぜ自作するの?

15
自作エンジンって

カッコよくね?

16
というだけでは、予算降りませんよね

17
自作する上での絶対条件

18
既存のエンジンと比べて、

明らかに優れている点があること

19
純粋なアドベンチャーゲームを作りたい場合は、

既存のエンジンを拡張するのがオススメ

20
アドベンチャーパートを含む

モバイルゲームでは?

21
自作エンジンに明確な強みを作りやすい

22
モバイルゲームに必要な機能が

備わっていないことがある

23
モバイルゲームで必要な機能の例

● リソースのダウンロード

● ボイスのON/OFF

● 複雑な進行制御

○ チュートリアルを挟む

○ 別な画面(コアゲーム)を挟む

etc...

24
モバイルゲーム向けの構成にすることで、

拡張の自由度を上げることもできる

25
スクリプトエンジンの作り方

26
基本的な流れ

スクリプト 実行構文解析
27
スクリプトのフォーマットを決める

28
スクリプトのフォーマット

● 命令の区切り方

● 命令内でのパラメータの区切り方

● 特殊扱いする文字

○ 定義

○ 固有機能の割当

○ 演算子

29
スクリプトをセル形式で扱うか?

30
セル形式 プレーンテキスト形式
初心者の心理的抵抗感 低 高
拡張性 ※ 高
31
セル形式の特徴

● プログラムっぽさが少なく、初心者でも心理的抵抗感が少ない

● 列に意味を持たせるかどうかで、書き方が大きく変わる

列を命令のパラメータの
順番として扱う
列をパラメータの
内容ごとに扱う
命令の覚えやすさ 低 高...
32
プレーンテキスト形式の特徴

● 見た目のプログラミング言語感が、初心者にとって、わかりにく
いと思われやすい

● スクリプトの記述の自由度が高い

33
構文解析の仕方

34
命令の例 - 1

position [x位置] [y位置]



● 1行1命令

● パラメータはスペース区切り

● 先頭が命令の識別用

● x位置・y位置には数値のみが入る

35
命令の例 - 1

position [x位置] [y位置]



position 100 50
36
命令の例 - 1

position [x位置] [y位置]



position 100 50
37
区切り文字で分割して判定するだけ

38
簡単ですね

39
命令の例 - 2

position [x位置] [y位置]



● 1行1命令

● パラメータはスペース区切り

● 先頭が命令の識別用

● x位置・y位置には数値、定型句が入る

○ x位置の定型句は、left、center、r...
40
命令の例

position [x位置] [y位置]



position center 50
41
命令の例 - 2

position [x位置] [y位置]



position center 50
42
数値、定型句で処理を変更する必要がある

43
例えば……

● 数値、定型句の他にスクリプト内で定義した定数を使用できる
ようにする

● パラメータの記述を省略した場合、デフォルト値で処理される
ようにする

● 命令の対象の現在の状態からの相対値での指定ができるよう
にする

●...
44
複雑な入力をサポートするほど難しくなる

45
命令を作る際に大事なこと

● できるだけ読めば内容がわかるフォーマットにする

● 簡単に記述ができること

● 基本的な命令は、単機能であること

○ 使い方によって複雑なこともできるようにすると尚良

46
命令を実行する

47
必要なモジュール、オブジェクトに

命令に沿った処理を行う

48
簡単ですね

49
もし、命令の実行中に

次の命令が実行されたら?

50
例えば……

● 数秒かけて、横に移動する命令の途中で更に位置を変更する
命令が実行されたら?

● フェードで表示する途中で非表示にする処理が実行された
ら?

● 非表示のフェード中に画像の切り替えが行われたら?

51
バグりますね

52
命令の実行が終わってから

次の命令を実行すれば?

53
例えば……

● 複数の対象を同時にフェードで表示したり、移動させたりした
ら?

● タイミングを少しずつずらしながら、複数の対象を移動させた
ら?

● フェードで表示しながら、移動させたら?

54
意図したことができなくなりますね

55
どのようになるべきかを定義して、

実行内容を制御しなければならない

56
ユーザー入力(タップ)によって

命令が進行するパターンが特に鬼門

57
KLabの内製スクリプトエンジン

58
内製スクリプトエンジン「NovelKit」の特徴

● 2D、Live2D、3Dの全てに対応可能

● スクリプトのビルド機能

○ 実行せずに記述のチェックができる

○ ビルド時にスクリプトの記述内容に変更を加えることができる

● ...
59
©KLabGames ©SUNRISE ©bushiroad

スクスタでの実際の使用例

60
©KLabGames ©SUNRISE ©bushiroad

スクスタでの実際の使用例

61
まとめ

62
まとめ

● より良い品質のものを作るためには、高機能なスクリプトエン
ジンが必要な場合もある

● モバイルゲーム向けなら、独自エンジンの利点は大きくなる

● 高機能なエンジンを作るのは難しいが、きちんと作れば、ハイ
クオリティで自由...
Próximos SlideShares
Carregando em…5
×
Próximos SlideShares
What to Upload to SlideShare
Avançar
Transfira para ler offline e ver em ecrã inteiro.

0

Compartilhar

Baixar para ler offline

スクリプトエンジン作って 無双する

Baixar para ler offline

2020/10/16に開催された、「KLab TECH Meetup with Special Guest 〜ゲーム開発の効率化・仕組み化についてご紹介〜」での、発表資料です。
スクリプトエンジンの基礎と独自のエンジンを開発する利点を解説します。

  • Seja a primeira pessoa a gostar disto

スクリプトエンジン作って 無双する

  1. 1. 今福 文章
 エンジニア
 技術統括部
 KLab株式会社
 スクリプトエンジン作って
 無双する

  2. 2. 2 自己紹介

  3. 3. 3 ● スクリプトエンジン開発
 ● UI基盤開発
 ● アラビア語表示対応
 ● タイ語表示対応
 今福 文章
 エンジニア
 技術統括部
 KLab株式会社
 仕事
 画像
 ● プログラミング
 ● シナリオ
 技能
 ● イラスト
 ● スクリプト

  4. 4. 4 本日伝えたいこと

  5. 5. 5 スクリプトエンジンはいいぞ

  6. 6. 6 お品書き

  7. 7. 7 お品書き
 ● スクリプトエンジンとは
 ● スクリプトエンジンを作るメリット
 ● スクリプトエンジンの作り方
 ● KLabの内製スクリプトエンジン
 ● まとめ

  8. 8. 8 スクリプトエンジンとは

  9. 9. 9 スクリプトエンジンとは
 スクリプト言語(簡易的なプログラミング言語)を用いる
 ゲームエンジンの一種。
 アドベンチャーゲームを開発する上で、必須となるもの。

  10. 10. 10 スクリプトエンジンの主な機能
 ● 表示制御
 ● 進行制御
 ● 音声制御
 ● 自動再生・早送り
 ● ログ記録
 ● フラグ制御
 ● セーブ・ロード
 ● 既読管理
 etc...

  11. 11. 11 既存のスクリプトエンジン
 ● 吉里吉里
 ● NScripter
 ● Artemis Engine
 ● ティラノスクリプト
 ● 宴
 etc...

  12. 12. 12 スクリプトエンジンの立ち位置
 シナリオ・グラフィック・サウンド
 スクリプトエンジン
 作品

  13. 13. 13 スクリプトエンジンを作るメリット

  14. 14. 14 既存のエンジンがあるのに、
 なぜ自作するの?

  15. 15. 15 自作エンジンって
 カッコよくね?

  16. 16. 16 というだけでは、予算降りませんよね

  17. 17. 17 自作する上での絶対条件

  18. 18. 18 既存のエンジンと比べて、
 明らかに優れている点があること

  19. 19. 19 純粋なアドベンチャーゲームを作りたい場合は、
 既存のエンジンを拡張するのがオススメ

  20. 20. 20 アドベンチャーパートを含む
 モバイルゲームでは?

  21. 21. 21 自作エンジンに明確な強みを作りやすい

  22. 22. 22 モバイルゲームに必要な機能が
 備わっていないことがある

  23. 23. 23 モバイルゲームで必要な機能の例
 ● リソースのダウンロード
 ● ボイスのON/OFF
 ● 複雑な進行制御
 ○ チュートリアルを挟む
 ○ 別な画面(コアゲーム)を挟む
 etc...

  24. 24. 24 モバイルゲーム向けの構成にすることで、
 拡張の自由度を上げることもできる

  25. 25. 25 スクリプトエンジンの作り方

  26. 26. 26 基本的な流れ
 スクリプト 実行構文解析
  27. 27. 27 スクリプトのフォーマットを決める

  28. 28. 28 スクリプトのフォーマット
 ● 命令の区切り方
 ● 命令内でのパラメータの区切り方
 ● 特殊扱いする文字
 ○ 定義
 ○ 固有機能の割当
 ○ 演算子

  29. 29. 29 スクリプトをセル形式で扱うか?

  30. 30. 30 セル形式 プレーンテキスト形式 初心者の心理的抵抗感 低 高 拡張性 ※ 高
  31. 31. 31 セル形式の特徴
 ● プログラムっぽさが少なく、初心者でも心理的抵抗感が少ない
 ● 列に意味を持たせるかどうかで、書き方が大きく変わる
 列を命令のパラメータの 順番として扱う 列をパラメータの 内容ごとに扱う 命令の覚えやすさ 低 高 拡張性 高 低
  32. 32. 32 プレーンテキスト形式の特徴
 ● 見た目のプログラミング言語感が、初心者にとって、わかりにく いと思われやすい
 ● スクリプトの記述の自由度が高い

  33. 33. 33 構文解析の仕方

  34. 34. 34 命令の例 - 1
 position [x位置] [y位置]
 
 ● 1行1命令
 ● パラメータはスペース区切り
 ● 先頭が命令の識別用
 ● x位置・y位置には数値のみが入る

  35. 35. 35 命令の例 - 1
 position [x位置] [y位置]
 
 position 100 50
  36. 36. 36 命令の例 - 1
 position [x位置] [y位置]
 
 position 100 50
  37. 37. 37 区切り文字で分割して判定するだけ

  38. 38. 38 簡単ですね

  39. 39. 39 命令の例 - 2
 position [x位置] [y位置]
 
 ● 1行1命令
 ● パラメータはスペース区切り
 ● 先頭が命令の識別用
 ● x位置・y位置には数値、定型句が入る
 ○ x位置の定型句は、left、center、right が入る
 ○ y位置の定型句は、up、center、down が入る

  40. 40. 40 命令の例
 position [x位置] [y位置]
 
 position center 50
  41. 41. 41 命令の例 - 2
 position [x位置] [y位置]
 
 position center 50
  42. 42. 42 数値、定型句で処理を変更する必要がある

  43. 43. 43 例えば……
 ● 数値、定型句の他にスクリプト内で定義した定数を使用できる ようにする
 ● パラメータの記述を省略した場合、デフォルト値で処理される ようにする
 ● 命令の対象の現在の状態からの相対値での指定ができるよう にする
 ● 画面内での比率をパーセンテージ表記で指定できるようにす る

  44. 44. 44 複雑な入力をサポートするほど難しくなる

  45. 45. 45 命令を作る際に大事なこと
 ● できるだけ読めば内容がわかるフォーマットにする
 ● 簡単に記述ができること
 ● 基本的な命令は、単機能であること
 ○ 使い方によって複雑なこともできるようにすると尚良

  46. 46. 46 命令を実行する

  47. 47. 47 必要なモジュール、オブジェクトに
 命令に沿った処理を行う

  48. 48. 48 簡単ですね

  49. 49. 49 もし、命令の実行中に
 次の命令が実行されたら?

  50. 50. 50 例えば……
 ● 数秒かけて、横に移動する命令の途中で更に位置を変更する 命令が実行されたら?
 ● フェードで表示する途中で非表示にする処理が実行された ら?
 ● 非表示のフェード中に画像の切り替えが行われたら?

  51. 51. 51 バグりますね

  52. 52. 52 命令の実行が終わってから
 次の命令を実行すれば?

  53. 53. 53 例えば……
 ● 複数の対象を同時にフェードで表示したり、移動させたりした ら?
 ● タイミングを少しずつずらしながら、複数の対象を移動させた ら?
 ● フェードで表示しながら、移動させたら?

  54. 54. 54 意図したことができなくなりますね

  55. 55. 55 どのようになるべきかを定義して、
 実行内容を制御しなければならない

  56. 56. 56 ユーザー入力(タップ)によって
 命令が進行するパターンが特に鬼門

  57. 57. 57 KLabの内製スクリプトエンジン

  58. 58. 58 内製スクリプトエンジン「NovelKit」の特徴
 ● 2D、Live2D、3Dの全てに対応可能
 ● スクリプトのビルド機能
 ○ 実行せずに記述のチェックができる
 ○ ビルド時にスクリプトの記述内容に変更を加えることができる
 ● 実行するためにダウンロードが必要な素材が判別可能
 ● スクリプトエンジンの制御外のオブジェクトに対応可能
 ● 自由度の高いスクリプトと、命令の実行による不整合が発生し ないようにするための実行制御
 ● ユニークな仕様にも対応可能な高い拡張性

  59. 59. 59 ©KLabGames ©SUNRISE ©bushiroad
 スクスタでの実際の使用例

  60. 60. 60 ©KLabGames ©SUNRISE ©bushiroad
 スクスタでの実際の使用例

  61. 61. 61 まとめ

  62. 62. 62 まとめ
 ● より良い品質のものを作るためには、高機能なスクリプトエン ジンが必要な場合もある
 ● モバイルゲーム向けなら、独自エンジンの利点は大きくなる
 ● 高機能なエンジンを作るのは難しいが、きちんと作れば、ハイ クオリティで自由度の高い表現が可能となる


2020/10/16に開催された、「KLab TECH Meetup with Special Guest 〜ゲーム開発の効率化・仕組み化についてご紹介〜」での、発表資料です。 スクリプトエンジンの基礎と独自のエンジンを開発する利点を解説します。

Vistos

Vistos totais

253

No Slideshare

0

De incorporações

0

Número de incorporações

0

Ações

Baixados

1

Compartilhados

0

Comentários

0

Curtir

0

×