会話シーンとして宴を使うところでドツボにはまっています。

1,883 views
Skip to first unread message

enya...@gmail.com

unread,
Jul 26, 2018, 4:16:36 AM7/26/18
to 宴ユーザーグループ
初めまして、UNITY習熟度は初心者です。
UNITYバージョンはUnity2017です。
WINDOWSです。
宴のバージョンは最新の3です。
UNITYで会話シーンとして宴を使う方法を見たのですが
わかりません。
ゲームシーンと、宴の会話シーンをわけてつかいたいのですが、
どのようにやるとうまくいくでしょうか?
教えていただけると幸いです。
お願いします。

マッドネスラボ

unread,
Jul 26, 2018, 5:53:46 AM7/26/18
to 宴ユーザーグループ
宴というか、Unityで複数シーンを使うこと自体が少し難易度が高いです。
出版されている殆どのUnityの本などでも、複数シーンの使い方は説明してないと思います。

もちろん可能ではあるのですが、やり方が色々あるので何とも言えません。
ゲームシーンと会話シーンを分けて、実行時に同時に使うのであれば加算シーン(LoadSceneMode.Additive)というのを使うのが一般的だとは思うのですが、
人によっては違うやり方もあります。
Unity公式に問い合わせるなどしたほうが良いかと思います。




enya...@gmail.com

unread,
Jul 26, 2018, 2:04:40 PM7/26/18
to 宴ユーザーグループ
返信ありがとうございます。
UNITYで状態の遷移
例えばMAINというゲームのシーンと
シナリオというシーン(宴のADVパート)を切り替えにくいことはわかったのですが、
やりたいことは宴のADVパートを
MAINというゲームパートで再現したいということなんですが、
会話シーンとして宴を使うを見ると
できるようなのですが、
そのやり方がわかりません。
すいませんが教えていただけると幸いです。

マッドネスラボ

unread,
Jul 26, 2018, 5:37:32 PM7/26/18
to 宴ユーザーグループ
http://madnesslabo.net/utage/?page_id=402
これのことでしょうか?
書いてあるとおりにやればできると思うのですが。

サンプルのスクリプトはあくまで例なので、
自分が呼び出したいタイミングや終わらせたいタイミング、やりたい処理によってプログラムを書き換える必要があります。

マッドネスラボ

unread,
Jul 26, 2018, 7:38:57 PM7/26/18
to 宴ユーザーグループ
うーん。
それはUnityの使い方というか、プログラムがわからないというだけではないでしょうか。
宴をどう使えばいいかは答えられますが、
一般的なUnityの使い方に関してはここではサポートできません。

繰り返しになりすが
>ゲームシーンと会話シーンを分けて、実行時に同時に使うのであれば加算シーン(LoadSceneMode.Additive)というのを使うのが一般的だとは思うのですが、
>人によっては違うやり方もあります。
>Unity公式に問い合わせるなどしたほうが良いかと思います。

マッドネスラボ

unread,
Jul 26, 2018, 8:11:44 PM7/26/18
to 宴ユーザーグループ
ドキュメントのサンプルにあるように、基本はこれだけです。

        //「宴」のシナリオを呼び出す
        Engine.JumpScenario( scenarioLabel );
 
        //「宴」のシナリオ終了待ち
        while(!Engine.IsEndScenario)
        {
            yield return 0;
        }


たぶん、ほかのシーンのオブジェクトを呼び出したり、他のシーンに値を渡すやり方がわからないという質問だと思うのですがそういうことでしょうか?
だとしたら、やはりそれは宴ではなく、Unityの使い方自体の質問になります。
宴とは関係なく、Unityでシーンを切り替えるときは常に必要になる技術だと思います。

やり方は色々あるのですが、一番簡単なのは、ここでいうstaticというのを使うことだと思います。


マッドネスラボ

unread,
Jul 26, 2018, 8:18:43 PM7/26/18
to 宴ユーザーグループ
これとかもわかりやすいと思います
https://gametukurikata.com/program/data

「Unity シーン」とかでGoogle検索すると、いろいろ情報が得られると思います。

マッドネスラボ

unread,
Jul 27, 2018, 7:12:41 AM7/27/18
to 宴ユーザーグループ
Mainシーンに戻るのであればそれで問題ないと思います。

マッドネスラボ

unread,
Jul 27, 2018, 8:02:39 AM7/27/18
to 宴ユーザーグループ
MAINシーンから移動します。
会話(UTAGE)のシーンを再生します。
会話終了後、MAINシーンに戻るにはどうしたらいいでしょうか?


ひとまず簡単なサンプルを書きました。

//SampleMainScene.cs
//これは、宴を呼び出すゲームのあるほうのMainシーンで使う。
//呼び出したいタイミングでChangeScene()を、呼び出したいシナリオラベルを指定して呼ぶ。

using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
using Utage;

public class SampleMainScene : MonoBehaviour
{
    //宴のエンジンがある、会話用のシーンの名前
    public string sceneName = "Scenario";

    //これは、サンプルとして
    //クリックされたら「Start」シーンに飛ぶ処理
    public void OnClick()
    {
        ChangeScene("Start");
    }

    //宴のシーンに切り替えて、指定のシナリオを開始する
    public void ChangeScene( string scenarioLabel )
    {
        SampleUtageScene.scenarioLabel = scenarioLabel;
        //宴のある会話シーンに切り替える
        SceneManager.LoadScene(sceneName);
    }
}


//SampleUtageScene.cs
//これは、宴のある会話シーンのどこかにAddComponentする
//Startで自動的にシナリオを呼び出す


using
 UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
using Utage;

public class SampleUtageScene : MonoBehaviour
{
    //宴のエンジン
    AdvEngine Engine { get { return engine ?? (engine = FindObjectOfType<AdvEngine>()); } }
    public AdvEngine engine;

    //会話シーンが終わったら、ロードするシーンの名前
    public string sceneName = "Main";

    //呼び出すシナリオラベル
    //他のシーンから書き換えられるように、staticにする
    public static string scenarioLabel = "";

    //最初のフレームで自動再生
    void Start()
    {
        //宴のシナリオ起動
        StartCoroutine(CoTalk());
    }

    IEnumerator CoTalk()
    {
        //「宴」のシナリオを呼び出す
        Engine.JumpScenario(scenarioLabel);

        //「宴」のシナリオ終了待ち
        while (!Engine.IsEndScenario)
        {
            yield return 0;
        }
        //シナリオ終了を読み込んだので、シーンを切り替える
        SceneManager.LoadScene(sceneName);
    }
}
SampleMainScene.cs
SampleUtageScene.cs
Reply all
Reply to author
Forward
0 new messages