satofumi 2021/04/09 20:00

Undead Arthur 開発(その3)

前回の記事で Moon Sharp を導入して Lua スクリプトを利用できるようにしました。今回はそれを利用してシーンの再生や NPC を制御するあたりを実装していきます。

やったこと

シーンを再生する仕組みを実装した

ここで「シーン」と呼んでいるのは、画像やメッセージを表示する場面のことで、今からこの下画像の右上の場面を作っていきます。

まずは、Unity に Panel や Image を並べて、これと同じような配置を作ります。

次に、画像やメッセージを変更する仕組みを調整します。
とりあえず、時間経過で画像とメッセージを切り替えればいいことにして、これを Lua スクリプトのコルーチンを使って実装します。簡単に説明すると「画像とメッセージを更新する Lua スクリプトの function を定義して、それをコルーチンで動作させる」です。コルーチンで動作させることで、指定時間の待機や入力待ちが行えます。

画像とメッセージを更新する Lua スクリプト(左)と、指定時間待つための Lua スクリプト(右)

で、この Lua のコルーチンを C# 側で Moon Sharp の Coroutine.Resume() を使って呼び出すと、以下のようなシーン再生が行えます。

良いです。
これに「1文字ずつ表示する」とか「ボタンが押されたときのメッセージ送り」とかの機能を追加する作業は、また後日にやります。まずは「ゲームとして遊べる状態」にすることを目指します。

NPC の制御まわりの開発に着手した

画像とメッセージを表示し終えたら、NPC が話して移動するシーン(最初の画像の右下の場面)になるので、NPC を表示するあたりを実装していきます。

マップエディタ Tiled で NPC 位置を配置できるようにして、そこに NPC を実際に配置できるようにしました。


で、NPC を配置してモーションを切り替えるようにする Lua スクリプトがこれです。
local function priest()
    local model = game.AssignNpc(1, 'Priest')
    while true do
        model.SetAnimation('Idle')
	system.wait_seconds(2.0)
        coroutine.yield()

        model.SetAnimation('Surprise')
	system.wait_seconds(2.0)
        coroutine.yield()

        model.SetAnimation('Escape')
	system.wait_seconds(2.0)
        coroutine.yield()
    end
end
game.AddAgent(priest)

良いです。アニメーションの変更まわりも動作しました。


なんというか、どういう仕組みにするかを考えて、それがちゃんと動くと楽しいです。

今後の予定

とりあえず、Lua スクリプトでイベントまわりを記述する仕組みが動作し始めました。良いです。
今後の予定としては
・Corgi Engine まわりを理解して調整をしていく
・主人公キャラの操作を実装していく(今は横移動とジャンプのみ)
です。

今回は、前回に比べると ちゃんと開発が進みました。良いです。


がんばります。

次回の更新: 月曜日の20時

月別アーカイブ

限定特典から探す

記事を検索