Upgrade to Pro — share decks privately, control downloads, hide ads and more …

大規模開発におけるLuaスクリプトの活用方法【CAGC2024】※2025年3月6日までの公開

CyberAgent
March 08, 2024
1.5k

 大規模開発におけるLuaスクリプトの活用方法【CAGC2024】※2025年3月6日までの公開

本セッションでは、『FINAL FANTASY VII EVER CRISIS』でのLuaスクリプトの活用方法について紹介いたします。
『FINAL FANTASY VII EVER CRISIS』では掛け合い部分や、ダンジョン中のギミックなどでLuaスクリプトが用いられています。
使用例や開発フローなども交えて、開発にLuaスクリプトを用いることによるメリットや考慮しておくべき点についてお話しいたします。

https://cagc.cyberagent.co.jp/2024/session/index.html?id=Tr7uAzLn

© SQUARE ENIX Powered by Applibot, Inc. CHARACTER DESIGN: TETSUYA NOMURA / CHARACTER ILLUSTRATION: LISA FUJISE
Copyright © CyberAgent, Inc.

CyberAgent

March 08, 2024
Tweet

More Decks by CyberAgent

Transcript

  1. FINAL FANTASY VII EVER CRISISとは? 3 『FINAL FANTASY VII』シリーズ最新作のスマートフォン向けタイトル 原作『FINAL

    FANTASY VII』から『CRISIS CORE -FINAL FANTASY VII-』を 始めとするストーリーと、完全新作オリジナルストーリーが楽しめ、 魔法やアビリティを繰り出すコマンドバトルをスマートフォンならではの 操作性で体験できる。 © SQUARE ENIX Powered by Applibot, Inc. CHARACTER DESIGN: TETSUYA NOMURA / CHARACTER ILLUSTRATION: LISA FUJISE
  2. FF7ECの掛け合いについて 4 『FINAL FANTASY VII EVER CRISIS』のストーリー部分、 所謂、掛け合いパートに関してはLuaスクリプトを用いて実装されています。 今回のセッションでは、 『FINAL

    FANTASY VII EVER CRISIS』での Luaスクリプトの活用方法について紹介させていただきます。 © SQUARE ENIX Powered by Applibot, Inc. CHARACTER DESIGN: TETSUYA NOMURA / CHARACTER ILLUSTRATION: LISA FUJISE
  3. Luaを使用した開発フロー 13 C#で関数を定義して、Luaから呼び出す形で実装をしている。 計算やif文も使用できるので、フラグに依存した分岐処理なども可能。 public void move(float x, float y,

    float z) { // (x, y, z) の座標に移動するような処理 } -- valueが1なら(1.0, 2.0, 3.0)の座標に移動 if value == 1 then move(1.0, 2.0, 3.0) end C#の関数定義 Luaから呼び出し
  4. Luaを使用した開発フロー 15 例えば、キャラクターが歩いてきてセリフをいうようなシーンだと…… まず特定の座標まで歩く関数と、セリフを出す関数をC#側で用意する。 public void move(float x, float y,

    float z) { // (x, y, z) の座標に移動するような処理 } C#の関数定義(移動) public void talk(string message) { // message というセリフを表示 } C#の関数定義(セリフ)
  5. Luaを使用した開発フロー 17 Luaスクリプトを書く際の効率化のため、 C#の関数のAttributeからスニペットを自動生成出来るような 仕組みを開発。 [LuaFunctionSetting("移動")] public void move(float x,

    float y, float z) { // (x, y, z) の座標に移動するような処理 } C#の関数定義 "move": { "prefix": "move" "body": [ "move(${1:x}, ${2:y}, ${3:z})" ], "description": "移動" }, スニペット