質問編集履歴
5
回答を頂き解決したので、解決したスクリプトを載せました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,12 +1,16 @@
|
|
1
|
-
###
|
1
|
+
### 書き換えました
|
2
|
+
|
2
|
-
|
3
|
+
2月26
|
4
|
+
|
3
|
-
|
5
|
+
回答を頂き、「ゲーム実行前にはヒエラルキに存在していないプレハブを取得する記述」に書き換えました。
|
6
|
+
|
4
|
-
|
7
|
+
しかし結局「スクリプトAのboolでスクリプトBのboolをtrue,falseにする」については、
|
8
|
+
|
5
|
-
|
9
|
+
とりあえずのところstaticで解決するというところに行き着きました。
|
6
|
-
|
10
|
+
|
7
|
-
|
11
|
+
超初歩的なことで質問ページを立ててしまい大変お恥ずかしいのですが、このまま残しておきます。
|
12
|
+
|
8
|
-
|
13
|
+
###前提
|
9
|
-
|
10
14
|
|
11
15
|
Unity、C#ともに初心者なので至らぬ点あるかと思いますがご容赦ください。
|
12
16
|
|
@@ -34,17 +38,13 @@
|
|
34
38
|
|
35
39
|
仮にこの能力のキャラをAとします。
|
36
40
|
|
37
|
-
|
41
|
+
|
38
|
-
|
39
|
-
|
42
|
+
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
必殺技アイテムのスクリプト(プレハブで量産。大元のオブジェクトのスクリプトではなく、プレハブのスクリプトを別スクリプトから参照したい)
|
43
|
+
必殺技アイテムのスクリプト(プレハブで量産。大元のオブジェクトのスクリプトではなく、プレハブのスクリプトを別スクリプトから参照したい→staticでとりあえず解決)
|
44
44
|
|
45
45
|
```C#
|
46
46
|
|
47
|
-
public bool isA=false;//キャラAと接触した際のbool
|
47
|
+
public static bool isA=false;//キャラAと接触した際のbool、staticにしておく
|
48
48
|
|
49
49
|
|
50
50
|
|
@@ -78,6 +78,8 @@
|
|
78
78
|
|
79
79
|
|
80
80
|
|
81
|
+
isA = false;
|
82
|
+
|
81
83
|
anim_CI_Ctrl.SetBool("CI_A", false);
|
82
84
|
|
83
85
|
}
|
@@ -88,11 +90,23 @@
|
|
88
90
|
|
89
91
|
他キャラ(小さくされるキャラたち)のスクリプト
|
90
92
|
|
93
|
+
|
94
|
+
|
91
95
|
```C#
|
92
96
|
|
93
|
-
p
|
97
|
+
private GameObject _ObjectG,_saprefab=null;//ジェネレータとプレハブ変数宣言
|
94
|
-
|
98
|
+
|
99
|
+
|
100
|
+
|
95
|
-
|
101
|
+
void Start()
|
102
|
+
|
103
|
+
{
|
104
|
+
|
105
|
+
_ObjectG = GameObject.Find("ObjectGenerator");
|
106
|
+
|
107
|
+
_saprefab = _ObjectG.GetComponent<SA>().gameObject;//ここで生成される前にプレハブを取得していますが↓
|
108
|
+
|
109
|
+
}
|
96
110
|
|
97
111
|
|
98
112
|
|
@@ -100,23 +114,21 @@
|
|
100
114
|
|
101
115
|
{
|
102
116
|
|
117
|
+
|
118
|
+
|
103
|
-
SAprefab
|
119
|
+
if(SAprefab.isA==true)//staticで解決するので上記プレハブの取得は結果不要でした
|
104
|
-
|
105
|
-
|
120
|
+
|
106
|
-
|
107
|
-
if(_isA==true)
|
108
|
-
|
109
|
-
{
|
121
|
+
{Debug.Log("小さくされた!");
|
110
|
-
|
122
|
+
|
111
|
-
//小さく
|
123
|
+
StartCoroutine(A());//小さくされるコルーチン開始 コルーチンの方はまた別の不具合が出ているので今回は載せません
|
124
|
+
|
125
|
+
}
|
112
126
|
|
113
127
|
}
|
114
128
|
|
115
|
-
|
116
|
-
|
117
129
|
```
|
118
130
|
|
119
|
-
プレハブを生成する空のゲームオブジェクトのスクリプト
|
131
|
+
プレハブを生成する空のゲームオブジェクトのスクリプト
|
120
132
|
|
121
133
|
```#C
|
122
134
|
|
@@ -138,6 +150,8 @@
|
|
138
150
|
|
139
151
|
private float time = 0f;//経過時間
|
140
152
|
|
153
|
+
public List<GameObject> StandAList = new List<GameObject>();//リスト化 これを小さくされるキャラのスクリプトから参照し、生成される前にプレハブを取得
|
154
|
+
|
141
155
|
|
142
156
|
|
143
157
|
void Start()
|
@@ -162,7 +176,9 @@
|
|
162
176
|
|
163
177
|
{
|
164
178
|
|
165
|
-
GameObject S
|
179
|
+
GameObject SA = Instantiate(SAPrefab);//必殺技アイテムのプレハブを生成する
|
180
|
+
|
181
|
+
StandAList.Add(StandA);//生成されたプレハブをリストに追加
|
166
182
|
|
167
183
|
float x = Random.Range(-8f, 8f);
|
168
184
|
|
@@ -182,48 +198,6 @@
|
|
182
198
|
|
183
199
|
```
|
184
200
|
|
185
|
-
投稿当初の状態から、回答を頂き現在上記の状態です。
|
186
|
-
|
187
|
-
現在、
|
188
|
-
|
189
|
-
小さくされるキャラのインスペクタで必殺技アイテムのプレハブを取得させ、
|
190
|
-
|
191
|
-
(GameObject.FindでやるとnullReferenceエラーが出ました)、
|
192
|
-
|
193
|
-
必殺技アイテムのプレハブのスクリプトのbool isAを、
|
194
|
-
|
195
|
-
インスペクタで強制的にtrueにすると、
|
196
|
-
|
197
|
-
小さくされるキャラ側のスクリプトのDebug.Logが表示され、連結が確認できる状態です。
|
198
|
-
|
199
|
-
ですが、ゲームを実行上でキャラAが必殺技アイテム(プレハブ)と接触しても、
|
200
|
-
|
201
|
-
Debug.Logは表示されません。
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
「ゲームを実行しないと存在しないプレハブを取得させる記述」というものがあるのでしょうか?
|
206
|
-
|
207
|
-
「プレハブ スクリプト 取得」などで検索してみましたがプレハブ生成方法ばかり出てきます。
|
208
|
-
|
209
|
-
もし解決法をご存知の方がいらっしゃいましたら、ご教授頂きたく存じます。
|
210
|
-
|
211
|
-
### 今まで自分ができた、関係の強そうなこと
|
212
|
-
|
213
|
-
①親子オブジェクト 子スクリプトに親の挙動を含んだboolを書き、それを親スクリプトが参照し、親が従って挙動する [こちらのページ(自己解決済みの質問ページ)](https://teratail.com/questions/240565)
|
214
|
-
|
215
|
-
②上記スクリプト内にありますが、必殺技アイテムスクリプトからUIイメージのアニメータのSetBoolをtrue,falseにする
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
今回のようなケースの場合、
|
220
|
-
|
221
|
-
「必殺技アイテムスクリプトの方に13人分のboolと必殺技の挙動を書いておく」こともできなくはないですが、
|
222
|
-
|
223
|
-
できれば自機以外の12人が共有するCPUスクリプトの方に自身の挙動を書きたいです。
|
224
|
-
|
225
|
-
皆様のお知恵をお借り致したく存じます。
|
226
|
-
|
227
201
|
### 補足情報(FW/ツールのバージョンなど)
|
228
202
|
|
229
203
|
■作業環境
|
4
追加したスクリプト名を書くのを忘れたので書きました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -116,6 +116,8 @@
|
|
116
116
|
|
117
117
|
```
|
118
118
|
|
119
|
+
プレハブを生成する空のゲームオブジェクトのスクリプト(他のスクリプトで障害物なども生成しています)
|
120
|
+
|
119
121
|
```#C
|
120
122
|
|
121
123
|
using System.Collections;
|
3
2人目の方から回答を頂き、必要だったのでスクリプトを追加しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,6 +4,8 @@
|
|
4
4
|
|
5
5
|
2月25日 回答を頂き問題点が変わったので、タイトルと内容を書き換えました。
|
6
6
|
|
7
|
+
プレハブ生成オブジェクトのスクリプトを追加しました。
|
8
|
+
|
7
9
|
|
8
10
|
|
9
11
|
Unity、C#ともに初心者なので至らぬ点あるかと思いますがご容赦ください。
|
@@ -114,6 +116,70 @@
|
|
114
116
|
|
115
117
|
```
|
116
118
|
|
119
|
+
```#C
|
120
|
+
|
121
|
+
using System.Collections;
|
122
|
+
|
123
|
+
using System.Collections.Generic;
|
124
|
+
|
125
|
+
using UnityEngine;
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
public class SA : MonoBehaviour
|
130
|
+
|
131
|
+
{
|
132
|
+
|
133
|
+
public GameObject SAPrefab;//なんのプレハブを量産するのか
|
134
|
+
|
135
|
+
private float interval;//何秒ごとに生成するのか
|
136
|
+
|
137
|
+
private float time = 0f;//経過時間
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
void Start()
|
142
|
+
|
143
|
+
{
|
144
|
+
|
145
|
+
interval = 1f;//何秒ごとに生成するのか
|
146
|
+
|
147
|
+
}
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
void Update()
|
152
|
+
|
153
|
+
{
|
154
|
+
|
155
|
+
time += Time.deltaTime;
|
156
|
+
|
157
|
+
|
158
|
+
|
159
|
+
if (time > interval)//経過時間が生成時間になったら(1秒たったら)
|
160
|
+
|
161
|
+
{
|
162
|
+
|
163
|
+
GameObject StandA = Instantiate(SAPrefab);//必殺技アイテムのプレハブを生成する
|
164
|
+
|
165
|
+
float x = Random.Range(-8f, 8f);
|
166
|
+
|
167
|
+
float y = Random.Range(-4f, -200f);
|
168
|
+
|
169
|
+
StandA.transform.position = new Vector2(x, y);
|
170
|
+
|
171
|
+
time = 0f;//経過時間初期化
|
172
|
+
|
173
|
+
}
|
174
|
+
|
175
|
+
}
|
176
|
+
|
177
|
+
}
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
```
|
182
|
+
|
117
183
|
投稿当初の状態から、回答を頂き現在上記の状態です。
|
118
184
|
|
119
185
|
現在、
|
2
回答を頂き、問題点が変わったので、タイトルと内容を書き換えました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
生成されたプレハブのスクリプトのpublicboolを参照し、そのboolのtrue,falseで別スクリプトのboolをtrue,falseにしたい
|
test
CHANGED
@@ -1,4 +1,8 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
2月25日 回答を頂き問題点が変わったので、タイトルと内容を書き換えました。
|
2
6
|
|
3
7
|
|
4
8
|
|
@@ -26,7 +30,7 @@
|
|
26
30
|
|
27
31
|
今回はその中の一人、他のキャラを小さくする能力について質問します。
|
28
32
|
|
29
|
-
仮にこの能力の
|
33
|
+
仮にこの能力のキャラをAとします。
|
30
34
|
|
31
35
|
できるのなら以下のように、
|
32
36
|
|
@@ -34,7 +38,7 @@
|
|
34
38
|
|
35
39
|
|
36
40
|
|
37
|
-
必殺技アイテムのスクリプト
|
41
|
+
必殺技アイテムのスクリプト(プレハブで量産。大元のオブジェクトのスクリプトではなく、プレハブのスクリプトを別スクリプトから参照したい)
|
38
42
|
|
39
43
|
```C#
|
40
44
|
|
@@ -110,27 +114,39 @@
|
|
110
114
|
|
111
115
|
```
|
112
116
|
|
113
|
-
回答を頂き
|
117
|
+
投稿当初の状態から、回答を頂き現在上記の状態です。
|
114
118
|
|
115
|
-
|
119
|
+
現在、
|
116
120
|
|
121
|
+
小さくされるキャラのインスペクタで必殺技アイテムのプレハブを取得させ、
|
122
|
+
|
123
|
+
(GameObject.FindでやるとnullReferenceエラーが出ました)、
|
124
|
+
|
125
|
+
必殺技アイテムのプレハブのスクリプトのbool isAを、
|
126
|
+
|
127
|
+
インスペクタで強制的にtrueにすると、
|
128
|
+
|
129
|
+
小さくされるキャラ側のスクリプトのDebug.Logが表示され、連結が確認できる状態です。
|
130
|
+
|
131
|
+
ですが、ゲームを実行上でキャラAが必殺技アイテム(プレハブ)と接触しても、
|
132
|
+
|
133
|
+
Debug.Logは表示されません。
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
「ゲームを実行しないと存在しないプレハブを取得させる記述」というものがあるのでしょうか?
|
138
|
+
|
139
|
+
「プレハブ スクリプト 取得」などで検索してみましたがプレハブ生成方法ばかり出てきます。
|
140
|
+
|
141
|
+
もし解決法をご存知の方がいらっしゃいましたら、ご教授頂きたく存じます。
|
142
|
+
|
117
|
-
### 今まで自分ができたこと
|
143
|
+
### 今まで自分ができた、関係の強そうなこと
|
118
144
|
|
119
145
|
①親子オブジェクト 子スクリプトに親の挙動を含んだboolを書き、それを親スクリプトが参照し、親が従って挙動する [こちらのページ(自己解決済みの質問ページ)](https://teratail.com/questions/240565)
|
120
146
|
|
121
147
|
②上記スクリプト内にありますが、必殺技アイテムスクリプトからUIイメージのアニメータのSetBoolをtrue,falseにする
|
122
148
|
|
123
149
|
|
124
|
-
|
125
|
-
ここまではできているのですが、あくまでできることは
|
126
|
-
|
127
|
-
「スクリプトAからスクリプトBのboolを参照する」までで、
|
128
|
-
|
129
|
-
「スクリプトAからスクリプトBのboolを参照し、
|
130
|
-
|
131
|
-
スクリプトBのboolのtrue,falseによってスクリプトAのboolのtrue,falseを決定、
|
132
|
-
|
133
|
-
挙動もスクリプトAの方に記述しておき、挙動させる」ことはできないのでしょうか。
|
134
150
|
|
135
151
|
今回のようなケースの場合、
|
136
152
|
|
@@ -139,8 +155,6 @@
|
|
139
155
|
できれば自機以外の12人が共有するCPUスクリプトの方に自身の挙動を書きたいです。
|
140
156
|
|
141
157
|
皆様のお知恵をお借り致したく存じます。
|
142
|
-
|
143
|
-
|
144
158
|
|
145
159
|
### 補足情報(FW/ツールのバージョンなど)
|
146
160
|
|
1
頂いた回答を試しても解決しなかったので、とりあえず回答を受け書き換えた箇所を反映しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
キャラA:自機スクリプト、Rigidbody2D、コライダ2D持ち。
|
16
16
|
|
17
|
-
キャラB~N:いわゆるCPU。CPUスクリプト、Rigidbody2D、コライダ持ち。
|
17
|
+
キャラB~N:いわゆるCPU。CPUスクリプト、Rigidbody2D、コライダ2D持ち。
|
18
18
|
|
19
19
|
自機スクリプトをつけかえれば13人の中から好きに自機キャラを選べる状態です。
|
20
20
|
|
@@ -84,19 +84,9 @@
|
|
84
84
|
|
85
85
|
```C#
|
86
86
|
|
87
|
-
p
|
87
|
+
public GameObject SA;//必殺技アイテム インスペクタで取得
|
88
88
|
|
89
89
|
private bool _isA;
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
void Start()
|
94
|
-
|
95
|
-
{
|
96
|
-
|
97
|
-
SA=GameObject.Find("SA");
|
98
|
-
|
99
|
-
}
|
100
90
|
|
101
91
|
|
102
92
|
|
@@ -106,11 +96,13 @@
|
|
106
96
|
|
107
97
|
SAprefab Sas=SA.GetComponent<SAprefab>();
|
108
98
|
|
109
|
-
_isA=Sas.isA
|
99
|
+
_isA=Sas.isA;
|
110
100
|
|
111
101
|
if(_isA==true)
|
112
102
|
|
103
|
+
{//Debug.Log("小さくされた!");
|
104
|
+
|
113
|
-
|
105
|
+
//小さくなる挙動を記述}
|
114
106
|
|
115
107
|
}
|
116
108
|
|
@@ -118,31 +110,9 @@
|
|
118
110
|
|
119
111
|
```
|
120
112
|
|
121
|
-
|
113
|
+
回答を頂き以上のように書き換えましたが、
|
122
114
|
|
123
|
-
```
|
124
|
-
|
125
|
-
error CS1955: Non-invocable member 'SAprefab.isA' cannot be used like a method.
|
126
|
-
|
127
|
-
```
|
128
|
-
|
129
|
-
和訳をざっくり「必殺技アイテムスクリプト内のisA(bool)は関数として使えないよ」と解釈しているのですが合っていますでしょうか。
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
そこで、必殺技アイテムスクリプトの方で、
|
134
|
-
|
135
|
-
CIアニメのSetBoolに関与できていることを参考に以下のように書き換えましたが、
|
136
|
-
|
137
|
-
同じエラーが出ます。
|
138
|
-
|
139
|
-
```C#
|
140
|
-
|
141
|
-
|
115
|
+
エラーは出ませんが、Debug.Logが表示されません。
|
142
|
-
|
143
|
-
{}
|
144
|
-
|
145
|
-
```
|
146
116
|
|
147
117
|
### 今まで自分ができたこと
|
148
118
|
|