質問するログイン新規登録

質問編集履歴

5

回答があまりにつかないので、もっとわかりやすく図で説明しました。

2019/12/29 08:55

投稿

gotoken_yuutyan
gotoken_yuutyan

スコア5

title CHANGED
File without changes
body CHANGED
@@ -21,6 +21,8 @@
21
21
  //このスクリプトがおかしい、エラー何行目などの詳細はありませんでした。
22
22
  ```
23
23
 
24
+ ### スクリプト関係を図で説明
25
+ ![イメージ説明](1ca124868ef34adbdb5b7a0f5ce20c75.jpeg)
24
26
 
25
27
  ### Blockの構図
26
28
  ![イメージ説明](99c8f6314e2bf782831316154f0e1355.jpeg)
@@ -37,19 +39,61 @@
37
39
  Fungusアセット本体の原因であろうソースを貼り付けし直しました。
38
40
 
39
41
  ```C#
42
+ //Fungusのブロックを取得するだけのソース(会話をさせたい町のNPCなどにアタッチする。)
40
43
  using System.Collections;
41
44
  using System.Collections.Generic;
42
45
  using UnityEngine;
43
- //Fungusのブロックを取得するだけのソース(会話をさせたい町のNPCなどにアタッチする。)
44
46
 
47
+
45
48
  public class BlockTrigger : MonoBehaviour
46
49
  {
47
50
  public string blockName;
48
51
  }
49
52
  ```
50
53
 
54
+
51
55
  ```C#
56
+ //Eキーで話しかけて、そのNPCがブロックを持っていたら検出する
57
+ using System.Collections;
58
+ using System.Collections.Generic;
59
+ using UnityEngine;
60
+ using Fungus;
61
+
62
+ public class CheckCommand : MonoBehaviour
63
+ {
64
+ [SerializeField]
65
+ float rayLength = 1f;
66
+ Flowchart flowchart;
67
+
68
+ void Start()
69
+ {
70
+ flowchart = FindObjectOfType<Flowchart>();
71
+ }
72
+ // Update is called once per frame
73
+ void Update()
74
+ {
75
+ if (Input.GetKeyDown(KeyCode.E))
76
+ { //Eキーに調べるコマンドを割り当てる
77
+ Ray ray = new Ray(transform.position, transform.forward);
78
+ RaycastHit hit;
79
+ //Debug.DrawRay(ray.origin, ray.direction * 10, Color.red, 5);
80
+ if (Physics.Raycast(ray, out hit, rayLength))
81
+ {
82
+ //衝突したものがBlockTriggerを持っているか調べ、持っていたらそのblockを実行する
83
+ var trigger = hit.transform.GetComponent<BlockTrigger>();
84
+ if (trigger != null)
85
+ {
86
+ flowchart.ExecuteBlock(trigger.blockName);
87
+ }
88
+
89
+ }
90
+ }
91
+ }
92
+ }
93
+ ```
94
+
95
+ ```C#
52
- //ブロックを見つけるためのメソッド
96
+ //ブロックを見つけるためのメソッド・関数詳細ソース
53
97
  public virtual Block FindBlock(string blockName)
54
98
  {
55
99
  var blocks = GetComponents<Block>();
@@ -82,11 +126,9 @@
82
126
  }
83
127
  }
84
128
 
85
-
86
129
  ```
87
130
 
88
131
 
89
-
90
132
  ### 試したこと
91
133
  ????FlowChartに、2つキャラ分のブロックを設定して、かつVariablesの変数をグローバル化にしたらエラー。
92
134
  なので、キャラごとに????FlowChartを分けて作成してみて、変数をセーブしたい????FlowChartだけグローバル化を適応。

4

ここ2日間、違うソースをこの質問に貼っていましたが 回答が付かないのでもっと根本的な問題があるのかと思い Fungusアセット本体の原因であろうソースを貼り付けし直しました。

2019/12/29 08:55

投稿

gotoken_yuutyan
gotoken_yuutyan

スコア5

title CHANGED
File without changes
body CHANGED
@@ -21,6 +21,7 @@
21
21
  //このスクリプトがおかしい、エラー何行目などの詳細はありませんでした。
22
22
  ```
23
23
 
24
+
24
25
  ### Blockの構図
25
26
  ![イメージ説明](99c8f6314e2bf782831316154f0e1355.jpeg)
26
27
 
@@ -30,6 +31,11 @@
30
31
 
31
32
  ### 該当のソースコード
32
33
 
34
+ ここ2日間、違うソースをこの質問に貼っていましたが
35
+ 回答が付かないのでもっと根本的な原因があるのかと思い
36
+
37
+ Fungusアセット本体の原因であろうソースを貼り付けし直しました。
38
+
33
39
  ```C#
34
40
  using System.Collections;
35
41
  using System.Collections.Generic;
@@ -43,45 +49,40 @@
43
49
  ```
44
50
 
45
51
  ```C#
46
- using System.Collections;
47
- using System.Collections.Generic;
48
- using UnityEngine;
49
- using Fungus;
50
- /*カメラの視線先にブロックを持っオブジェクトがあれば
52
+ //ブロックを見つけるめのメソッド
51
- オブジェクトが持っているブロックを取得しそのブロックを実行させる*/(フローチャートにアタッチするソース)
52
-
53
- public class CheckCommand : MonoBehaviour
53
+ public virtual Block FindBlock(string blockName)
54
- {
54
+ {
55
- [SerializeField]
56
- float rayLength = 1f;
57
- Flowchart flowchart;
58
-
59
- void Start()
60
- {
61
- flowchart = FindObjectOfType<Flowchart>();
55
+ var blocks = GetComponents<Block>();
62
- }
63
- // Update is called once per frame
64
- void Update()
65
- {
66
- if (Input.GetKeyDown(KeyCode.E))
67
- { //Eキーに調べるコマンドを割り当てる
68
- Ray ray = new Ray(transform.position, transform.forward);
69
- RaycastHit hit;
70
- //Debug.DrawRay(ray.origin, ray.direction * 10, Color.red, 5);
71
- if (Physics.Raycast(ray, out hit, rayLength))
56
+ for (int i = 0; i < blocks.Length; i++)
72
57
  {
73
- //衝突したものがBlockTriggerを持っているか調べ、持っていたらそのblockを実行する
74
- var trigger = hit.transform.GetComponent<BlockTrigger>();
58
+ var block = blocks[i];
75
- if (trigger != null)
59
+ if (block.BlockName == blockName)
76
60
  {
77
- flowchart.ExecuteBlock(trigger.blockName);
61
+ return block;
78
62
  }
79
-
80
63
  }
64
+
65
+ return null;
81
66
  }
82
- }
83
- }
84
67
 
68
+ //エラーメッセージを促すメソッド
69
+ public virtual void ExecuteBlock(string blockName)
70
+ {
71
+ var block = FindBlock(blockName);
72
+
73
+ if (block == null)
74
+ {
75
+ Debug.LogError("Block " + blockName + " does not exist");
76
+ return;
77
+ }
78
+
79
+ if (!ExecuteBlock(block))
80
+ {
81
+ Debug.LogWarning("Block " + blockName + " failed to execute");
82
+ }
83
+ }
84
+
85
+
85
86
  ```
86
87
 
87
88
 

3

回答がなかなかつかないので、さらに詳細を加えました。

2019/12/28 08:09

投稿

gotoken_yuutyan
gotoken_yuutyan

スコア5

title CHANGED
File without changes
body CHANGED
@@ -4,7 +4,7 @@
4
4
  なので、Fungusアセットを利用している人に質問を読んでいただきたいです。
5
5
 
6
6
  <実現したいこと>
7
- FungusアセットのVariablesで作成した変数を【グローバル化】すると
7
+ FungusアセットのVariables(Blockの構図写真左下)で作成した変数を【グローバル化】すると
8
8
  NPCからブロックを取得できなくなるバグを直したい。
9
9
  (※PrivateとPublicだとなぜか取得できる)
10
10
 
@@ -20,6 +20,10 @@
20
20
  [13:43:28] Block test does not exist. UnityEngine.Debug : LogError(Object)
21
21
  //このスクリプトがおかしい、エラー何行目などの詳細はありませんでした。
22
22
  ```
23
+
24
+ ### Blockの構図
25
+ ![イメージ説明](99c8f6314e2bf782831316154f0e1355.jpeg)
26
+
23
27
  文章だけだとわかりにくいと思い、エラーを動画にしてみたのでご覧ください。
24
28
  こちらの動画は、Eキーで話しかけてpublic、privateにした場合 その次にグローバルにした際の挙動です。
25
29
  [エラーをこちらの動画でご覧ください](https://youtu.be/1ptlOUwxMHg)
@@ -79,10 +83,9 @@
79
83
  }
80
84
 
81
85
  ```
82
- ### Blockの構図
83
- ![イメージ説明](99c8f6314e2bf782831316154f0e1355.jpeg)
84
86
 
85
87
 
88
+
86
89
  ### 試したこと
87
90
  ????FlowChartに、2つキャラ分のブロックを設定して、かつVariablesの変数をグローバル化にしたらエラー。
88
91
  なので、キャラごとに????FlowChartを分けて作成してみて、変数をセーブしたい????FlowChartだけグローバル化を適応。

2

リンクが有効かされなかったので、マークアップ外へ記述を移動

2019/12/27 09:39

投稿

gotoken_yuutyan
gotoken_yuutyan

スコア5

title CHANGED
File without changes
body CHANGED
@@ -19,11 +19,10 @@
19
19
  ```
20
20
  [13:43:28] Block test does not exist. UnityEngine.Debug : LogError(Object)
21
21
  //このスクリプトがおかしい、エラー何行目などの詳細はありませんでした。
22
-
22
+ ```
23
23
  文章だけだとわかりにくいと思い、エラーを動画にしてみたのでご覧ください。
24
24
  こちらの動画は、Eキーで話しかけてpublic、privateにした場合 その次にグローバルにした際の挙動です。
25
25
  [エラーをこちらの動画でご覧ください](https://youtu.be/1ptlOUwxMHg)
26
- ```
27
26
 
28
27
  ### 該当のソースコード
29
28
 

1

文章だけだとわかりにくいので、動画を追加しました

2019/12/27 07:23

投稿

gotoken_yuutyan
gotoken_yuutyan

スコア5

title CHANGED
File without changes
body CHANGED
@@ -19,6 +19,10 @@
19
19
  ```
20
20
  [13:43:28] Block test does not exist. UnityEngine.Debug : LogError(Object)
21
21
  //このスクリプトがおかしい、エラー何行目などの詳細はありませんでした。
22
+
23
+ 文章だけだとわかりにくいと思い、エラーを動画にしてみたのでご覧ください。
24
+ こちらの動画は、Eキーで話しかけてpublic、privateにした場合 その次にグローバルにした際の挙動です。
25
+ [エラーをこちらの動画でご覧ください](https://youtu.be/1ptlOUwxMHg)
22
26
  ```
23
27
 
24
28
  ### 該当のソースコード