イベントトリガーに文字送りを対応させる方法

82 views
Skip to first unread message

ダイス

unread,
Apr 15, 2025, 2:19:16 AMApr 15
to 宴ユーザーグループ
宴Ver: 4.1.8
Unity Ver: 6000.0.35f1
プログラム初心者

お世話になります。

2点、できるかどうか質問があります。

・キャラのイベントトリガーに設定した部分でも文字送りできるように対応ができるかどうか。

イベントトリガーにマウスポインターが乗ったらE-moteのタイムラインを再生させるように対応させたのですが、
設定した範囲のみが文字送りできないことで少しストレスを感じそうだと思って、この部分も文字送りができるようにならないかやっていました。

プレハブで動かすしかないことでADVUguiManagerのスクリプトをアタッチできないため、どうにもうまくいきませんでした。
何か方法はあるでしょうか?スクリプト継承等が必要なのか、色々と試行錯誤してましたが方法が思いつきません。

PointerEnterとExitにそれぞれタイムラインの再生と終了処理が入っており、PointerDownかClickに文字送り対応できればとは考えています。


・コンフィグでイベントトリガーに設定したものをオンオフ切り替えの対応。

人によっては煩わしいと思いそうだからコンフィグ制御できないかといじってたものの、単純なSetActivだけでは制御できずに動いてしまう状態でした。
スクリプト継承とかが必要そうな印象もあり、イベントトリガー自体に有効無効のフラグがないとのことで、難易度が高そうな印象があります。

こちらはも何か方法があるでしょうか?

あくまで可能なら程度なので教えていただけると幸いです。
よろしくお願いします。

マッドネスラボ

unread,
Apr 15, 2025, 4:40:29 AMApr 15
to 宴ユーザーグループ
>キャラのイベントトリガーに設定した部分でも文字送りできるように対応ができるかどうか。
PointerEnterとExitは、Unityの仕組み(UGUI)の仕組みを使っているため、同じ仕組みである以上はクリックが食われてしまう構造になっています。
これを解決したい場合、やり方はいくつかあります。
  • プレハブのOnPointerClickで宴の入力イベント(ADVUguiManagerのOnInput)を呼ぶ
    • 最もシンプルなやり方で、調整もしやすいと思います。
    • プレハブ内では、 シーン内のほかのオブジェクト(ADVUguiManagerは) がアタッチできないので、目的のオブジェクトを探してくる処理が必要になります。
      • GetComponentInParentなどを使って、「親のオブジェクトのコンポーネントを」探すという手法をとると楽にできます。
        • 直接の親にないものは、いったん目印となるオブジェクトを探して、そのオブジェクト以下から目的のオブジェクトを探すという方法もあります。
        • サンプル:
          • // ADVエンジン(親オブジェクトを優先的にしつつ、シーン内などから探してきて取得する)
            public AdvEngine Engine => this.GetAdvEngineCacheFindIfMissing(ref engine);
            AdvEngine engine;

            // AdvUguiManager(AdvEngine以下にあるものを探す)
            public AdvUguiManager UguiManager =>  Engine.GetComponentCacheInChildren(ref uguiManager);
            AdvUguiManager uguiManager; 
      • 目的のオブジェクトを探すほかの方法
        • プレハブの初期化時にカスタム処理をさせて、目的のオブジェクトをSetする
        • SceneManagerや、Find系の処理を使って、目的のオブジェクトを探す
  • プレハブのOnPointerClickで、さらに裏にあるUIにクリックイベントを飛ばす
    • 裏にほかのUIがあっても反応させられるので、より汎用性があるやり方です。(逆にいえば反応してしまうので、かえって邪魔かもしれないです)
    • 参考:https://note.com/rdag_pallab/n/ne1fcbd85de93
    • サンプル(動作未検証)
      • using UnityEngine;
        using UnityEngine.EventSystems;
        using System.Collections.Generic;

        public class HoverOnlyUI : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler
        {
            public void OnPointerEnter(PointerEventData eventData)
            {
                Debug.Log("Pointer Enter");
            }

            public void OnPointerExit(PointerEventData eventData)
            {
                Debug.Log("Pointer Exit");
            }

            public void OnPointerClick(PointerEventData eventData)
            {
                // 自分ではクリック処理しない。裏に通す。
                Debug.Log("Passing click to UI behind");

                List<RaycastResult> results = new List<RaycastResult>();
                EventSystem.current.RaycastAll(eventData, results);

                foreach (var result in results)
                {
                    if (result.gameObject == this.gameObject)
                        continue;

                    ExecuteEvents.Execute(result.gameObject, eventData, ExecuteEvents.pointerClickHandler);
                    break;
                }
            }
        }
  • プレハブのほうで、PointerEnterや PointerExitを使わずにUIとして反応させない
    • 直接マウスのスクリーン座標などを取得して、マウスフォーカス処理を自力で実装します。
    • 実装難易度は高いので、あまりお勧めしないです。


>コンフィグでイベントトリガーに設定したものをオンオフ切り替えの対応。
イベントトリガー自体はオンオフしても、UIの当たり判定がなくなるわけではないので、UIの当たり判定自体を無効化しないといけません。
詳しくはUnityのUIの仕組みの話になるのですが、おおざっぱにはUIの当たり判定は
・UIのCanvasにあるGraphicRaycasterのオンオフ
・各UIのRacatTargetのオンオフ
で切り替えができます。

宴の場合は、
・各レイヤーの作成時に、CanvasのGraphicRaycasterをオフにする
・SelectionClickコマンド使用時に、対象オブジェクトのCanvasのGraphicRaycasterをオンにする
・SelectionClickコマンドの効果終了時に、対象オブジェクトのCanvasのGraphicRaycasterをfalseにする
という形になっています。

SelectionClickコマンド時以外でも描画オブジェクトがUIとして反応するようなカスタムをしているのであれば、
何らかの形でGraphicRaycasterをオンにする形でカスタムしているか、宴の管理下にないCanvasのGraphicRaycasterを使っていると思われますので
そのカスタム部分を、自分の実装に合わせて制御してください。










2025年4月15日火曜日 15:19:16 UTC+9 ダイス:

ダイス

unread,
Apr 15, 2025, 9:24:56 AMApr 15
to 宴ユーザーグループ
ありがとうございます。
仕組みでクリックがそのようになっていたんですね。入力イベントを呼べれば制御は簡単そうに思えました。

操作性の改良ができたら今後の余地が生まれそうです。
動作検証と構築をこれからやってみますので、また何か引っかかったら質問させていただきたいと思います。
2025年4月15日火曜日 17:40:29 UTC+9 マッドネスラボ:

ダイス

unread,
Apr 16, 2025, 11:17:51 AMApr 16
to 宴ユーザーグループ
組み立てていて動作的に問題はなさそうという感じはしているのですが、
コンフィグでのイベントトリガーに設定したものをオンオフ切り替えがやや気になるのもあれば、
仕様になるのかなと思うものがありました。

宴の入力イベントはプレハブ内に対してこのコードで動作には問題ないようでした。

using UnityEngine;
using UnityEngine.EventSystems;
using Utage;

public class AdvInputCaller : MonoBehaviour, IPointerClickHandler
{
    AdvEngine engine;
    AdvUguiManager uguiManager;

    void Start()
    {
        engine = GameObject.FindFirstObjectByType<AdvEngine>();
        if (engine != null)
        {
            uguiManager = engine.GetComponentInChildren<AdvUguiManager>();
        }

        if (uguiManager == null)
        {
            Debug.LogWarning("AdvUguiManager が見つかりませんでした。");
        }
    }

    public void OnPointerClick(PointerEventData eventData)
    {
        if (eventData.button != PointerEventData.InputButton.Left) return;

        CallOnInput();
    }

    // 🔽 これをEventTriggerに登録できる
    public void CallOnInput()
    {
        if (uguiManager != null)
        {
            uguiManager.OnInput(); // 引数なしのバージョンを呼ぶ
        }
    }
}


こちら、イベントトリガーに設定したものをコンフィグでオンオフ切り替えをゲーム中のコンフィグで行うと、
E-moteを読み込み直さないと即時に設定が反映されないようでした。
キャラが非表示から再表示になるシーンで設定の反映が行われたのを確認しました。

タイトル画面でのみ変更できるようにすれば問題なく動いているように思います。
コードは色々いじった残骸がやや残っています。

このコードでトグルisONで切り替えてキャラを非表示から再表示になれば反映されるようですが、
不備があるのでしょうか?あるいは仕様とした方がよいでしょうか?
何か案があればお知らせいただけると助かります。


using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;
using Utage;

public class GraphicRaycasterController : MonoBehaviour

{
    AdvEngine engine;
    AdvUguiManager uguiManager;

    void Start()
    {
        engine = GameObject.FindFirstObjectByType<AdvEngine>();
    }

    [Header("対象のプレハブリスト")]
    [SerializeField] private List<GameObject> uiPrefabs;

    // GraphicRaycasterのON/OFFを切り替えるトグル関数
    public void ToggleRaycasters(bool isEnabled)
    {
        foreach (var prefab in uiPrefabs)
        {
            var raycaster = prefab.GetComponentInChildren<GraphicRaycaster>(true);
            if (raycaster != null)
            {
                raycaster.enabled = isEnabled;
            }
        }
    }
    public void OnToggleChanged(Toggle toggle)
    {
        ToggleRaycasters(toggle.isOn);
    }
}

2025年4月15日火曜日 22:24:56 UTC+9 ダイス:

マッドネスラボ

unread,
Apr 16, 2025, 4:17:31 PMApr 16
to 宴ユーザーグループ
 >     [SerializeField] private List<GameObject> uiPrefabs;
uiPrefabsにはプレハブが設定されるのでしょうか?

だとしたら、操作対象になっているのが、プレハブ(プレハブアセット。ProjectWindow内にあるほう)になってしまっています。
プレハブアセットは、シーン内に作成するGameObjectの元になるデータのようなものです。
シーン内のGameObjectとしてインスタンス化したもの(プレハブインスタンス。HieraychWindow内にあるほう)とは異なります。
プレハブから作成したGameObjectのように、シーン内に動的に生成されるオブジェクトに対して、あらかじめシーン内から直接参照を持つのは不可能です。
そのインスタンスを子以下にもつGameObjectなどから、GetComponentsInChildrenで取得するなどしてください。

また、プレハブ(プレハブアセット)を直接ゲーム実行中に変化させてしてしまうと、ゲーム実行外でのUnityエディタ上でのデータも変化してしまうような意図しない事故が起きる可能性があるので、
プレハブはなるべくゲーム実行中に変化させないように、クローン元のデータとしてのみ扱ったほうが良いかと思います。(人によってやり方が違うかもしれないですが)


        class AdvInputCaller : MonoBehaviour
        {
            AdvEngine engine;
            void Start()
            {
                //~~中略~~
               
               
                //初期化時にRaycasterのオンオフを切り替える
                bool isEnabled = GetEnableRaycaster();
                ToggleRaycaster(isEnabled);
            }
           
            bool GetEnableRaycaster()
            {
                //ToDo
                // レイキャスターの有効無効を判別する独自コード
                return true;
            }
           
            public void ToggleRaycaster(bool isEnabled)
            {
                //ToDo
                // GraphicRaycasterのON/OFFを切り替える。実装に合わせて行う
               
            }
        }

public class GraphicRaycasterController : MonoBehaviour
{
               //~~中略~~
 

        // GraphicRaycasterのON/OFFを切り替えるトグル関数
        public void ToggleRaycasters(bool isEnabled)
        {
            foreach (var inputCaller in engine.GraphicManager.GetComponentsInChildren<AdvInputCaller>(true))
            {
                inputCaller.ToggleRaycaster(isEnabled);
            }
        }
}

2025年4月17日木曜日 0:17:51 UTC+9 ダイス:

マッドネスラボ

unread,
Apr 16, 2025, 4:29:40 PMApr 16
to 宴ユーザーグループ
また、コンフィグに独自の値(今回でいう、レイキャスターのオンオフなど)を追加する場合に
その値をセーブデータに保存したり、コンフィグ値をリセットする場合に対応する必要がある場合は、
次の投稿を参考にしてください。
https://groups.google.com/g/utageuser/c/dvCfmQ3VXXA/m/AFZDItoyBwAJ

上記のリンク先にあるサンプルコードは、
Utage/Sample/Scripts/SampleCustomConfigValueController.cs にあります。
Intのパラメーターを扱っていますが、必要な個所をBoolに置き換えるなどしてアレンジしてください。
engine.Param.GetParameterBool("パラメーター名"); とすれば、
AdvEngine経由で読み込めるので、AdvInputCallerなどからも値を参照可能です。


2025年4月17日木曜日 5:17:31 UTC+9 マッドネスラボ:

ダイス

unread,
Apr 17, 2025, 10:06:53 AMApr 17
to 宴ユーザーグループ
SelectionItemと同じように考えてプレハブを設定していました。
そうなると、もう少し考えた方が良さそうですね。

検索をかけてみたのですが、SampleCustomConfig.csしか見当たりませんでした。
Int属性と書いてあったので中を見ても見当たりません。

こちらのものと同じなのでしょうか?

2025年4月17日木曜日 5:29:40 UTC+9 マッドネスラボ:

マッドネスラボ

unread,
Apr 17, 2025, 10:15:47 AMApr 17
to 宴ユーザーグループ
>SelectionItemと同じように考えてプレハブを設定していました。
SelectionItemなどのプレハブも、基本的には全てクローン元となるプレハブ(プレハブアセット)として使用しているだけで、
その中身をゲーム実行時に変更してはいないです。


>検索をかけてみたのですが、SampleCustomConfig.csしか見当たりませんでした。
すみません。まだそのサンプルは最新バージョンにも入れてませんでした。(次回のバージョンアップで入れる予定でした)
はい。リンク先のものと内容は同じなので、そちらを参考にしてください。

2025年4月17日木曜日 23:06:53 UTC+9 ダイス:

ダイス

unread,
Apr 18, 2025, 8:30:29 PMApr 18
to 宴ユーザーグループ
すみません、どうにもうまくいかない部分があって、教えていただきたいことがあります。
コンフィグ制御でイベントトリガーのオンオフを、キャラが表示中であれば即時反映されるようにはなったのですが、
キャラが表示されていない、タイトル画面からコンフィグで設定を変えてゲームをスタートすると、
その設定が反映されないでイベントトリガーが機能してしまう状態になります。

キャラが表示されている状態からならコンフィグのオフに設定すれば反映されるものの、初回制御時がうまくいかないようです。

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

using Utage;

public class AdvInputCaller : MonoBehaviour, IPointerClickHandler
{
    AdvEngine engine;
    AdvUguiManager uguiManager;

    private bool? currentRaycasterState = null;


    void Start()
    {
        engine = GameObject.FindFirstObjectByType<AdvEngine>();
        if (engine != null)
        {
            uguiManager = engine.GetComponentInChildren<AdvUguiManager>();
        }

        if (uguiManager == null)
        {
            Debug.LogWarning("AdvUguiManager が見つかりませんでした。");
        }
    }

    void OnEnable()
    {
        // 非表示から復活したとき、最後の設定を再適用
        if (currentRaycasterState.HasValue)
        {
            ApplyRaycasterState(currentRaycasterState.Value);

        }
    }

    public void OnPointerClick(PointerEventData eventData)
    {
        if (eventData.button != PointerEventData.InputButton.Left) return;
        CallOnInput();
    }

    public void CallOnInput()
    {
        if (uguiManager != null)
        {
            uguiManager.OnInput();
        }
    }

    public void ToggleRaycaster(bool isEnabled)
    {
        currentRaycasterState = isEnabled;
        ApplyRaycasterState(isEnabled);
    }

    private void ApplyRaycasterState(bool isEnabled)
    {
        var canvases = GetComponentsInChildren<Canvas>(true);
        foreach (var canvas in canvases)
        {
            var raycaster = canvas.GetComponent<GraphicRaycaster>();

            if (raycaster != null)
            {
                raycaster.enabled = isEnabled;
                Debug.Log($"[{gameObject.name}] GraphicRaycaster on '{canvas.name}' is now {(isEnabled ? "ENABLED" : "DISABLED")}");
            }
        }
    }
}


using UnityEngine;
using UnityEngine.UI;
using Utage;
using UtageExtensions;
using System.Collections.Generic;
using UnityEngine.EventSystems;
using System.Collections;

public class RaycasterConfigController : MonoBehaviour
{
    [SerializeField] private List<GameObject> prefabList;
    private List<GameObject> instantiatedObjects = new List<GameObject>();


    public AdvEngine Engine => this.GetAdvEngineCacheFindIfMissing(ref engine);
    [SerializeField] private AdvEngine engine;

    public Toggle toggle;

    public static RaycasterConfigController Instance { get; private set; }

    void Awake()
    {
        // シングルトンパターンの設定
        if (Instance == null)
        {
            Instance = this;
        }
        else
        {
            Destroy(gameObject); // 重複してたら消す
        }
    }

    void Start()
    {
        StartCoroutine(InitAfterUtageReady());
    }

    IEnumerator InitAfterUtageReady()
    {
        yield return new WaitUntil(() => Engine.Param.IsInit);

        Debug.Log("Param is ready");

        // プレハブクローン化
        foreach (var prefab in prefabList)
        {
            var instance = Instantiate(prefab, transform);
            instantiatedObjects.Add(instance);

            var raycasters = instance.GetComponentsInChildren<GraphicRaycaster>(true);
            Debug.Log(raycasters.Length + " Raycasters found in " + instance.name);
        }

        // Toggle設定(この時点でParamは初期化済み)
        if (toggle != null)
        {
            int paramValue = GetRaycasterValue();
            toggle.isOn = paramValue == 1;
            toggle.onValueChanged.AddListener(OnToggleChanged);

            ToggleRaycasters(paramValue == 1);
        }
        // Toggleが切り替わったら、パラメーターと状態を同期
        toggle.onValueChanged.AddListener((value) =>
        {
            SetRaycasterValue(value ? 1 : 0);
            ToggleRaycasters(value);
        });

    }
    void OnEnable()
    {
        if (Engine.Param.IsInit)
        {
            toggle.isOn = GetRaycasterValue() == 1;
        }
    }

    // UTAGE Paramから現在の設定を取得
    public int GetRaycasterValue()
    {
        if (!Engine.Param.IsInit)
        {
            Debug.LogWarning("まだパラメーターが初期化されていません");
            return 1;
        }
        return Engine.Param.GetParameterInt("Raycaster");
    }

    // UTAGE Paramに設定を書き込み
    public void SetRaycasterValue(int value)
    {
        if (!Engine.Param.IsInit)
        {
            Debug.LogWarning("まだパラメーターが初期化されていません");
            return;
        }

        Engine.Param.SetParameterInt("Raycaster", value);
        Debug.Log("Raycaster Set To: " + value);
        Debug.Log("Immediately Read: " + Engine.Param.GetParameterInt("Raycaster"));
    }

    // ON/OFF切り替え処理

    // GraphicRaycasterのON/OFFを切り替えるトグル関数
    public void ToggleRaycasters(bool isEnabled)
    {
        foreach (var inputCaller in engine.GraphicManager.GetComponentsInChildren<AdvInputCaller>(true))
        {
            inputCaller.ToggleRaycaster(isEnabled);
        }
        Debug.Log("Raycaster Param value = " + GetRaycasterValue());
    }

    // Toggle UI連動
    // Toggleから呼び出す例
    public void OnToggleChanged(bool value)
    {
        SetRaycasterValue(value ? 1 : 0);  // ← パラメータに書き込む
        ToggleRaycasters(value);
        Debug.Log("Toggled! Set Param to: " + (value ? 1 : 0));
        bool isEnabled = RaycasterConfigController.Instance.GetRaycasterValue() == 1;
        ToggleRaycasters(isEnabled);

    }

    // リセットなどで初期値に戻す場合
    public void OnClickConfigReset()
    {
        SetRaycasterValue(1);
        toggle.isOn = true;
    }

    private HashSet<GameObject> processedCharacters = new HashSet<GameObject>();

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.R))
        {
            Debug.Log("Raycaster param is: " + Engine.Param.GetParameterInt("Raycaster"));
        }
        var inputCallers = engine.GraphicManager.GetComponentsInChildren<AdvInputCaller>(true);

        foreach (var caller in inputCallers)
        {
            var obj = caller.gameObject;

            if (!processedCharacters.Contains(obj))
            {
                // 新規キャラとして検知されたら、設定を適用
                caller.ToggleRaycaster(GetRaycasterValue() == 1);
                processedCharacters.Add(obj);
                Debug.Log("Raycaster設定を新規キャラに適用: " + obj.name);
            }
        }
    }
}


Paramシートの方はType=Int Value=1
キャラが非表示状態でも次にキャラが表示される時にイベントトリガーがオフなら機能しないというようにできないでしょうか?

プレハブ構成は画像の通りです。
プレハブ構成.jpg



2025年4月17日木曜日 23:15:47 UTC+9 マッドネスラボ:

マッドネスラボ

unread,
Apr 18, 2025, 9:30:02 PMApr 18
to 宴ユーザーグループ
(おそらくですが)AdvInputCaller を以下のようにして、
AdvEgnineのパラメーター経由でオンオフを取得するようにして、StartやOnEnableの段階でオンオフを反映させるようにしてみてください。

        void Start()
        {
            engine = GameObject.FindFirstObjectByType<AdvEngine>();
            if (engine != null)
            {
                uguiManager = engine.GetComponentInChildren<AdvUguiManager>();
            }

            if (uguiManager == null)
            {
                Debug.LogWarning("AdvUguiManager が見つかりませんでした。");
            }
            ApplyRaycasterFromAdvEngineParam() ;
        }

        void OnEnable()
        {
            ApplyRaycasterFromAdvEngineParam() ;
        }

        void ApplyRaycasterFromAdvEngineParam()
        {
            if(engie==null) return;
            bool isEnable =  engine.Param.GetParameterInt("Raycaster") == 1;
            ApplyRaycasterState(isEnabled);
        }

先日お伝えしたプレハブアセットとプレハブインスタンスの関係というのは、
・キャラクター表示のオブジェクトは、 元となるプレハブをクローンしてプレハブインスタンスとして、宴がシーン内に自動的にGameobjectを生成している
・元となるプレハブを直接編集しても、すでに 表示済みのキャラクターは、元となるプレハブ影響をもううけないので効果がない。
・プレハブをゲーム実行中に編集するのは、リスクがある。
ということです。

基本的にはプレハブやそのプレハブインスタス作ったり、それを管理する必要はないはずです。
なので、RaycasterConfigControllerの以下の部分は不要かと思います。

>    [SerializeField] private List<GameObject> prefabList;
>    private List<GameObject> instantiatedObjects = new List<GameObject>();

 >      // プレハブクローン化
>        foreach (var prefab in prefabList)
>          {
>              var instance = Instantiate(prefab, transform);
>              instantiatedObjects.Add(instance);
>
>              var raycasters = instance.GetComponentsInChildren<GraphicRaycaster>(true);
>              Debug.Log(raycasters.Length + " Raycasters found in " + instance.name);
>          }

>    private HashSet<GameObject> processedCharacters = new HashSet<GameObject>();


>     void Update()
>      {
>          if (Input.GetKeyDown(KeyCode.R))
>          {
>              Debug.Log("Raycaster param is: " + Engine.Param.GetParameterInt("Raycaster"));
>          }
>          var inputCallers = engine.GraphicManager.GetComponentsInChildren<AdvInputCaller>(true);
>
>          foreach (var caller in inputCallers)
>        {
>              var obj = caller.gameObject;
>
>              if (!processedCharacters.Contains(obj))
>              {
>                  // 新規キャラとして検知されたら、設定を適用
>                  caller.ToggleRaycaster(GetRaycasterValue() == 1);
>                  processedCharacters.Add(obj);
>                  Debug.Log("Raycaster設定を新規キャラに適用: " + obj.name);
>              }
>          }



2025年4月19日土曜日 9:30:29 UTC+9 ダイス:

ダイス

unread,
Apr 19, 2025, 2:34:30 AMApr 19
to 宴ユーザーグループ
コードの方を修正してみましたが、やはりキャラが表示されてないと反映されないようです。
デバッグログを見直していたところ、

タイトル画面のコンフィグで実行すると以下の出力、
Raycaster Param value = 0

キャラが表示されるとオンになっています。
GraphicRaycaster on 'Canvas' is now ENABLED

この辺りの表示のところで制御ができれば機能しそうに思うのですが、
関連しそうな部分はAdvGraphicObject以外にあるのでしょうか?

2025年4月19日土曜日 10:30:02 UTC+9 マッドネスラボ:

マッドネスラボ

unread,
Apr 19, 2025, 3:15:32 AMApr 19
to 宴ユーザーグループ
タイトルの時点と、キャラ表示の間でパラメーターが意図せず変更されているのだとしら、セーブデータによる影響かもしれません。
パラメーターは、FileTypeをSystemにしている場合は、システムセーブデータを使うので、前回ゲーム終了時の値が自動的にロードされ、ゲーム起動後は書き変えない限りそのままの値になるはずです。(コンフィグ等で使うならこれで問題ないと思います)
FileTypeをSystemしていない場合は、通常のセーブデータを使います。
その場合、ゲームを最初から始めた場合は初期値に変更されます。セーブデータをロードしてゲームを再開した場合はセーブした時点のパラメーターがロードされその値になります。

セーブデータによる動作ではないのだとしたら、
あとは、意図しないタイミングで書き変える処理(上記でいうとSetRaycasterValueなど)を呼んでいないかチェックしてみてください。





2025年4月19日土曜日 15:34:30 UTC+9 ダイス:

ダイス

unread,
Apr 19, 2025, 4:08:12 AMApr 19
to 宴ユーザーグループ
書き換える処理で何か原因があるのでしょうが、FileTypeをSystemに変更したら動作は完全に一致している状態を確認しました。

以前もSystemでテストしていましたが、コードに不備があったので外していました。
さすがにこれ以上は手に負えないのでSystemで運用しようと思います。

今後の原型として使えそうなのができましたので、感謝しています。
ありがとうございました。

2025年4月19日土曜日 16:15:32 UTC+9 マッドネスラボ:
Reply all
Reply to author
Forward
0 new messages