[過去ログ] 【ゲームエンジン】Unity初心者質問スレBuild1 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
129: 2018/06/29(金)01:29 ID:AOmIYWRR(2/2) AAS
この3人完全に荒しだな
菩薩@太子
弟子 ◆rZPPjYuxmQ
ダーク王鍬大使 ◆SoVpkB15jY
マジ迷惑すぎる
130: 2018/06/29(金)04:22 ID:H1gqcYbG(1) AAS
ここは初心者が困惑するスレですか?
131: 2018/06/29(金)04:44 ID:B66gImoO(1) AAS
自分より初心者の奴にマウントを取りたいが為に「弟子」が立てた初心者専用スレ。
残念ながらマウントをとられてしまったので、そいつらを追い出すために再び別の質問スレを立てる。
以後、糞コテ「弟子」の隔離スレとなった。
132: 2018/06/29(金)10:15 ID:KJpjNVGQ(1) AAS
質問に答えてくれるスレなら何でもいいんだが
133: 2018/07/03(火)09:46 ID:AtrhXQ0j(1) AAS
adsでインプレッションが150くらいで$15ってついてたけどそんなけ儲けが出たという事ですか?
134(2): 2018/07/03(火)18:42 ID:DgOGkLki(1/3) AAS
Taitleオブジェクト(TXT表示だけ)が表示中は
敵オブジェクトが弾を発射しない様に改造しているのですが
Enemyにアセットしたcsの、弾を撃つ命令を
if文で、「Taitleオブジェクトが非表示なら弾を撃つ」とすればいいだけだと
思ったのですが、うまくいきません。
Enemy.csの弾の命令は
while (true)
{
// 子要素を全て取得する
for (int i = 0; i < transform.childCount; i++)
{
Transform shotPosition = transform.GetChild(i);
// ShotPositionの位置/角度で弾を撃つ
spaceship.Shot(shotPosition);
}
// shotDelay秒待つ
yield return new WaitForSeconds(spaceship.shotDelay);
}
なんですが、
135: 2018/07/03(火)18:43 ID:DgOGkLki(2/3) AAS
で、>>134を
while (true)
{
// 子要素を全て取得する
for (int i = 0; i < transform.childCount; i++)
{
Transform shotPosition = transform.GetChild(i);
if(title.activeSelf == false){
// ShotPositionの位置/角度で弾を撃つ
spaceship.Shot(shotPosition);
}
}
// shotDelay秒待つ
yield return new WaitForSeconds(spaceship.shotDelay);
}
と書き加えました。
もちろん、
// タイトルオブジェクトを取得
private GameObject title;
// Titleゲームオブジェクトを検索し取得する
title = GameObject.Find("Title");
をクラス内に記載もしました。
そしたら、敵がゲーム中も一切弾を撃たなくなりました。
エラー文は
NullReferenceException: Object reference not set to an instance of an object
Enemy+<Start>c__Iterator0.MoveNext () (at Assets/Scripts/Enemy.cs:46)
UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress)
(at /Users/builduser/buildslave/unity/build/Runtime/Export/Coroutines.cs:17)
です。
136(1): 2018/07/03(火)18:43 ID:DgOGkLki(3/3) AAS
なにが間違っていますか?
教えてください。
137: 2018/07/03(火)19:01 ID:L0TgVbu0(1) AAS
>>136
死ねガイジ
138(1): 2018/07/03(火)19:58 ID:bkI+tY6O(1) AAS
エラー出てるのどの行?
139(2): 2018/07/03(火)20:02 ID:m6+Emxdh(1) AAS
titleはちゃんとfindできてるのか?
140: 2018/07/03(火)20:16 ID:BqokYmSM(1) AAS
gameobject.findって非アクティブも検索するんだったっけ?
141: 2018/07/03(火)21:28 ID:Oy6MCkRt(1) AAS
しない
142(1): 弟子 ◆rZPPjYuxmQ 2018/07/03(火)22:33 ID:wgFi8W22(1) AAS
>>134
このコードって恐らく公式の
外部リンク:unity3d.com
のコードでしょうか?
だとすると
「弾を撃つ必要がない時はyield break;を使用してコルーチンを終了させます。」
という具合に書いてるので、これを利用するとですね
// canShotがfalseの場合、ここでコルーチンを終了させる
if (spaceship.canShot == false) {
yield break;
}
となってるので、Titleが非表示の時はbreakするようにすればいいのかなぁと思います
143(1): 2018/07/03(火)22:52 ID:L1TMFUeX(1) AAS
すみません
外部リンク:assetstore.unity.com
のアセット使ってトグルボタンぽちぽちしたいのですが、ボタンが動きません
どう使えばいいのでしょうか?
144(1): 2018/07/04(水)00:28 ID:RvZnsCPI(1/6) AAS
>>139
" title = GameObject.Find("Title"); "
を記載しているので、できていると思っているのですが、
NULLが来てます的な警告の先がこの場所みたいなので
Findがうまくいっていないかもしれません。
しかし、
private GameObject title;
title = GameObject.Find("Title");
と、たったこれだけで他所のゲームオブジェクトをFindできるんですよね?
それ以外にしなければならないことありますか?
>>142
そうです。弟子◆rZPPjYuxmQさんのアドバイス通り、
// canShotがfalseの場合、ここでコルーチンを終了させる
if (spaceship.canShot == false){yield break;}
if (title.activeSelf == True){yield break;}
と連続で記載してみました。
が、症状は同じで、まったく弾を撃たなくなってしまいました。
145(2): 2018/07/04(水)00:31 ID:RvZnsCPI(2/6) AAS
>>138
>>139
NullReferenceException: Object reference not set to an instance of an object
Enemy+<Start>c__Iterator0.MoveNext () (at Assets/Scripts/Enemy.cs:36)
この警告先は
" if (title.activeSelf == true){ ”
この部分みたいです。
146(1): 2018/07/04(水)00:33 ID:RvZnsCPI(3/6) AAS
ちなみに、エネミーを倒したあとに、警告が出ます。
エネミーを倒すたびに警告が出る状態です。
147: 2018/07/04(水)01:55 ID:W/Y7Ww/v(1) AA×

外部リンク:
外部リンク:::::
外部リンク:::::
148(1): 2018/07/04(水)06:27 ID:PcbSJbIy(1) AAS
>>145
titleの中がぬるぽなんじゃ。
取得はどこだ?titleが居るってかactiveの時に取ってる?じゃないとfindで取れないぞ。
149(2): 2018/07/04(水)07:46 ID:TALB3D9+(1) AAS
titleオブジェクトの名前がTitleじゃない(誤記)
Titleを非表示でなくdestroyしている
title取得以前に弾を撃とうとしている又は何度も取得しようとしている
非表示以降に生成されるenemyがある
多分このどれか
>>146見るとenemyが複数回生成されるみたいだから少なくとも最後は引っかかる
150: 2018/07/04(水)10:55 ID:GdNJLKay(1) AAS
参考にしてみるといい外部リンク:goo.gl
151(1): 弟子 ◆rZPPjYuxmQ 2018/07/04(水)11:01 ID:+Bj9nh1d(1/3) AAS
>>144
>>145
さてでは問題は他でも指摘されているように「Title」オブジェクトがちゃんと指定されているか?
という事で、これの一番簡単な解決は
「public Text Title」 ←これをインスペクタで指定してあげる
(Textを使う場合、Using Unity Engine.UIを指定する)
そうすれば「Start」関数で「title = GameObject.Find("Title"); 」は必要なくなります
恐らく、Findが失敗しているからNullエラーとなているのかと思われますが
Findが成功しているかどうか簡単に見るにはFindの後に「print(title.name)」でもしてみると解ります
152: 弟子 ◆rZPPjYuxmQ 2018/07/04(水)11:06 ID:+Bj9nh1d(2/3) AAS
>>143
有料アセットなので試せないのでなんとも・・・
恐らく記載のバージョンでやってみて動けば、現在の143さんのバージョン違いによる事じゃないかなとしか
153(2): 2018/07/04(水)16:35 ID:RvZnsCPI(4/6) AAS
>>148
>>149
>>151
destroyしていないですし、
Using Unity Engine.UI無しでも取得できてる箇所もあるのでよくわからず、、
初心者のためか、どうしてもわかりません。
現在のゲームの一式Zipです、Unityで開いていただければ覗けると思います
8Mしか無い小さなファイルですので確認して頂いてよろしいでしょうか?
素材は公式チュートリアルのもので、ソースは2017に合わせて変更しています
外部リンク:ux.getuploader.com
スクリプトフォルダのEnemy.csファイルを確認してほしいです。
コメントで消してます部分がやりたいことです。
なにが間違っているのか、ご指摘頂ければ幸いです。 ◎
Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2)
154(3): 2018/07/04(水)17:28 ID:30JL9X4X(1) AAS
>>153
見たけど>>149の後半そのままじゃないか、確認してくれよ……
1) プレイヤーの操作でTitleオブジェクトがactiveでなくなる
2) enemyが生成されtitleに代入しようとするもactiveでないオブジェクトはFindで引っかからず空のまま
3) titleの中身がnullの状態で静的でない変数を呼び出したのでNullReferenceExceptionで止まる
155(2): 2018/07/04(水)17:33 ID:s79xjkx+(1) AAS
GameObject.Findはactiveじゃないと使えないんだって
Transform.Findなら使えるかな
156: 2018/07/04(水)18:00 ID:RvZnsCPI(5/6) AAS
>>154
確認していただき、ありがとうございます。
>Titleオブジェクトがactiveでなくなる
認識不足でした、、そもそもactiveでなくなる、というのは
どういう状態のことですか?
自分はtitle.activeSelfの真偽はtitleの中のひとつのbool変数で
画像(テキスト)の表示非表示のスイッチみたいなものかと
思っていました。。。
title.activeSelf==falseだと、activeでなくなっている
という認識なんですね?
でも、プレイヤーが死亡したあとタイトル文字が出ますよね?
その状態はtitle.activeSelf==tureになって、
activeである状態ではないのでしょうか?
タイトル文字が出ても、敵が残っていると
そいつは前に進んでいます。
その時に、弾を吐かない様にしたかったので
コメントアウトしてるソースを記載しようと思ったんですが。。
自分の認識違いがなんなのか
正してもらえませんでしょうか
157: 2018/07/04(水)18:09 ID:RvZnsCPI(6/6) AAS
調べてみると
GameObjectのactiveSelfは
ゲームオブジェクトのローカルのアクティブ状態(読み取り専用)
画像の非表示はそのオブジェクト自体の動作を
停止させて非表示にしているのですね、、
しかし、やはり、プレイヤー死亡後は
そのTitleオブジェクトは動き出してるはずで、、
ああ、もしかして、タイトル画面が表示されていて
敵が流れていても、その時にはすでにstart()を通らないから
title = GameObject.Find("Title");ができない状態だから?
158(2): 弟子 ◆rZPPjYuxmQ 2018/07/04(水)18:21 ID:+Bj9nh1d(3/3) AAS
>>153
ソース見ました
弾を打つ処理って無限ループの中で行っているのですね
なのでループの中に撃たない処理をいれないとダメですね
それと「Manager.cs」で既に title = GameObject.Find("Title");されていて成功しているので
他で使う場合は、まず宣言で
// タイトル
public static GameObject title;
の様に「public」な「static」の変数にします
で「Enemy.cs」の無限ループ中で
while (true)
{
// 子要素を全て取得する
for (int i = 0; i < transform.childCount; i++)
{
Transform shotPosition = transform.GetChild(i);
//弾を撃たせる
//ShotPositionの位置/角度で弾を撃つ
if (Manager.title.activeSelf == false) spaceship.Shot(shotPosition);
}
// shotDelay秒待つ
yield return new WaitForSeconds(spaceship.shotDelay);
}
これで行けるかと思います
一応、インスペクタでタイトルを操作した画面です
画像リンク
上下前次1-新書関写板覧索設栞歴
あと 844 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.035s