質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
RPG

RPG (Report Program Generator)とは、IBMの System i(AS/400)サーバ向けのプログラミング言語です。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Lua

Luaは、汎用のスクリプト言語の一つで、 移植性が高く、高速な実行速度などの特徴を持ち 手続き型・オブジェクト指向言語としても利用可能で 関数型言語、データ駆動型の要素も併せ持っている言語です。

Q&A

0回答

1907閲覧

UnityのLua(MoonSharp)における選択肢の実装

simanezumi1989

総合スコア0

RPG

RPG (Report Program Generator)とは、IBMの System i(AS/400)サーバ向けのプログラミング言語です。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Lua

Luaは、汎用のスクリプト言語の一つで、 移植性が高く、高速な実行速度などの特徴を持ち 手続き型・オブジェクト指向言語としても利用可能で 関数型言語、データ駆動型の要素も併せ持っている言語です。

0グッド

0クリップ

投稿2021/03/03 00:53

知りたいこと

・Lua(MoonSharp)における選択肢の実装

やりたいこと

UnityでRPGの制作をしたいと思っており、現在ゲームイベントの実装をしています(勝手にストーリーが進むようなもの)。
その際、Luaを使ってゲームイベントを作成していたのですが、NPCが質問をしてきてPlayerが選択肢を選んでイベントを進める実装方法が分からず質問させていただきました。

コード

以下のサイトを参考に、順番にログを出したり、ゲーム画面上のテキストを変更することはできました。
http://carving.roguelive.chicappa.jp/?eid=41

ただ、EventDataクラスのselect関数の詳細がなく、どうやって実装しているのかわかりません(ブログでも質問中です)。
Luaに詳しい方がいれば、教えていただけると助かります(サイトと同じ方法でなくても構いません)。
以下サイトのコードを引用

csharp

1// スクリプト内から呼び出す関数群 2[ MoonSharp.Interpreter.MoonSharpUserData ] 3class EventData 4{ 5  // 画面にセリフを表示 6  public void serif( string mes ) 7  { 8    Debug.Log( mes ); 9  } 1011  // 選択肢を表示 12  public void select( string title, params string[] choices ) 13  { 14    // 中身は省略 15  } 16} 1718// EventDataをスクリプト内で使えるようにする 19MoonSharp.Interpreter.UserData.RegisterAssembly( typeof( EventData ).Assembly );

csharp

1string code = 2@" 3  return function() 45    event.serif( 'やあ。ウチは[word:15000]から来た[name:10103]やで' ) 6    coroutine.yield() 78    event.serif( '自分はどっからきたん?' ) 9    coroutine.yield() 1011    event.select( '', 'ここが地元', '別の島', '[word:15000]', 'わからない' ) 12    local selected = coroutine.yield() 13    if selected == 0 then 1415      event.serif( 'へえ。じゃあウチよりこの辺には詳しそうやね' ) 16      coroutine.yield() 1718    elseif selected == 1 then 1920      event.serif( 'この島へは何しにきたんやろなあ' ) 21      coroutine.yield() 2223    elseif selected == 2 then 2425      event.serif( '同郷やね。でもそんな風には見えへんなあ?' ) 26      coroutine.yield() 2728    elseif selected == 3 then 2930      event.serif( 'どういうこっちゃ' ) 31      coroutine.yield() 3233    end 3435  end 36";

やったこと

・UnityにMoonSharpを入れた
https://www.moonsharp.org/のチュートリアルを一通り読んだ
・読み進めるだけのゲームは作った:https://unityroom.com/games/shimazusai_18th

参考にしたサイト

https://midolog.net/how-to-create-adventure-game-with-unity/
http://carving.roguelive.chicappa.jp/?eid=41
https://www.moonsharp.org/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問