前提・実現したいこと
<前提>
UnityEngineとFungusというアセットを使用しています。
なので、Fungusアセットを利用している人に質問を読んでいただきたいです。
<実現したいこと>
FungusアセットのVariables(Blockの構図写真左下)で作成した変数を【グローバル化】すると
NPCからブロックを取得できなくなるバグを直したい。
(※PrivateとPublicだとなぜか取得できる)
また、Variablesの変数をセーブしたいので【グローバル化】にこだわりたい。
一言で言うと、"グローバル化してもNPCブロックを取得させたい"
発生している問題・エラーメッセージ
[13:43:28] Block test does not exist. UnityEngine.Debug : LogError(Object) //このスクリプトがおかしい、エラー何行目などの詳細はありませんでした。
スクリプト関係を図で説明
Blockの構図
文章だけだとわかりにくいと思い、エラーを動画にしてみたのでご覧ください。
こちらの動画は、Eキーで話しかけてpublic、privateにした場合 その次にグローバルにした際の挙動です。
エラーをこちらの動画でご覧ください
該当のソースコード
ここ2日間、違うソースをこの質問に貼っていましたが
回答が付かないのでもっと根本的な原因があるのかと思い
Fungusアセット本体の原因であろうソースを貼り付けし直しました。
C#
1//Fungusのブロックを取得するだけのソース(会話をさせたい町のNPCなどにアタッチする。) 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5 6 7public class BlockTrigger : MonoBehaviour 8{ 9 public string blockName; 10}
C#
1//Eキーで話しかけて、そのNPCがブロックを持っていたら検出する 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using Fungus; 6 7public class CheckCommand : MonoBehaviour 8{ 9 [SerializeField] 10 float rayLength = 1f; 11 Flowchart flowchart; 12 13 void Start() 14 { 15 flowchart = FindObjectOfType<Flowchart>(); 16 } 17 // Update is called once per frame 18 void Update() 19 { 20 if (Input.GetKeyDown(KeyCode.E)) 21 { //Eキーに調べるコマンドを割り当てる 22 Ray ray = new Ray(transform.position, transform.forward); 23 RaycastHit hit; 24 //Debug.DrawRay(ray.origin, ray.direction * 10, Color.red, 5); 25 if (Physics.Raycast(ray, out hit, rayLength)) 26 { 27 //衝突したものがBlockTriggerを持っているか調べ、持っていたらそのblockを実行する 28 var trigger = hit.transform.GetComponent<BlockTrigger>(); 29 if (trigger != null) 30 { 31 flowchart.ExecuteBlock(trigger.blockName); 32 } 33 34 } 35 } 36 } 37}
C#
1//ブロックを見つけるためのメソッド・関数詳細ソース 2public virtual Block FindBlock(string blockName) 3 { 4 var blocks = GetComponents<Block>(); 5 for (int i = 0; i < blocks.Length; i++) 6 { 7 var block = blocks[i]; 8 if (block.BlockName == blockName) 9 { 10 return block; 11 } 12 } 13 14 return null; 15 } 16 17//エラーメッセージを促すメソッド 18 public virtual void ExecuteBlock(string blockName) 19 { 20 var block = FindBlock(blockName); 21 22 if (block == null) 23 { 24 Debug.LogError("Block " + blockName + " does not exist"); 25 return; 26 } 27 28 if (!ExecuteBlock(block)) 29 { 30 Debug.LogWarning("Block " + blockName + " failed to execute"); 31 } 32 } 33
試したこと
????FlowChartに、2つキャラ分のブロックを設定して、かつVariablesの変数をグローバル化にしたらエラー。
なので、キャラごとに????FlowChartを分けて作成してみて、変数をセーブしたい????FlowChartだけグローバル化を適応。
しかし、グローバル化した????FlowChartだけ読み込まれてそれ以外エラー。このほかの????FlowChartがなぜ取得できなくなるのかを知りたい。
Fungusリファレンス
Fungusリファレンスを参考にしてみたが、解決策見つからず。
フリーのビジュアルノベルセットFungus...
また、ブロックの構成の仕方が間違っているのかと思い、このサイトを参考にしてみたが解決できず。
(このサイトは、Variablesでprivateなのになぜ変数をセーブできているのか私にはわからない。
私はprivateだと変数のセーブはできませんでした。)
補足情報(FW/ツールのバージョンなど)
Unity 2.11f(エラーが怖いのでアップデートをまだしていません)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。