[過去ログ] 【ゲームエンジン】Unity初心者質問スレBuild1 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
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);
}
これで行けるかと思います

一応、インスペクタでタイトルを操作した画面です
画像リンク

159
(2): 2018/07/05(木)04:52 ID:Gem47u68(1) AAS
>>158
ありがとうございます!

あの、質問なんですが今回はManager.csはメインスクリプトかと思うんですが、
要は、メインスクリプト内で取得した各オブジェクトの情報は、
そのほかのスクリプトや各オブジェクトにアセットしたスクリプト内において
public static GameObject 変数名;と記載したあと
以後スクリプト名.変数名で呼び出すことができるようになるのですか??

そして>>158の内容からですと、自分は今回他のスクリプト内で使用する記述方法を
間違っていた(public static GameObjectなど)ということで、
>>154さんや>>155さんの指摘である「activeじゃないから」云々は
今回は当てはまらない、ということですか?
160: 2018/07/05(木)06:55 ID:w7MLipmi(1) AAS
findするタイミングを考えろ
タイトルでる
消える
敵出現
find
敵消える
敵につけたスクリプトだとfindできるタイミングがないんだよ
findするにはスタート時から消えないオブジェクトにスクリプトをつける必要がある
161: 弟子 ◆rZPPjYuxmQ 2018/07/05(木)11:09 ID:9fzjzEJn(1) AAS
>>159
>要は、メインスクリプト内で取得した各オブジェクトの情報は、
>そのほかのスクリプトや各オブジェクトにアセットしたスクリプト内において
>public static GameObject 変数名;と記載したあと

他のスクリプトで変数を使う場合には「public static」にするだけですね

>以後スクリプト名.変数名で呼び出すことができるようになるのですか??

呼び出すというか、使えるという感じでしょうか

A.csで定義した変数henをB.csやC.csでも上記の様に宣言すれば使えるけど、それぞれが呼び出して別の変数としてではなく、あくまでA.csのhenであり、B.csでhenに1を入れ、次にC.csでhenに3を入れた場合、次に参照する際には3となってます。
プロジェクトでユニークになってると思います。ですので、あれ、どこでこの数値いじったかな?とかいう事が起きるのでご注意ください。

>>>154さんや>>155さんの指摘である「activeじゃないから」云々は
>今回は当てはまらない、ということですか?

うーん、すいません154さんや155さんのところ読んでないのでこれについてはよくわかりません、申し訳ないです

また何かあれば気軽に質問してください、私で分かる範囲でお答えさせていただきます

お互い頑張って作品作っていきましょう!
162: 2018/07/05(木)12:38 ID:MRR7aszu(1) AAS
>>159
いや、直接的には「activeじゃないから取得できない」で合ってる
現状だとenemyが生成されるたびに各個にtitleを取得しようとするから生成のタイミングでtitleが非activeだと取得に失敗してしまう

その解決法として「ゲーム開始直後、activeなうちに一回取得・staticな変数に入れて全てのenemyで使い回せ」というのがこのコテの提案
163: 2018/07/05(木)13:06 ID:30R4+BKt(1) AAS
次作るときは、敵マネージャー.csを作って、敵生成は全てそこでやるといいよ。
164
(1): 2018/07/06(金)08:47 ID:bTnJUGNr(1) AAS
PG初心者になります。
C#で、下記のように".psd"の拡張子を指定したいのですが、
大文字、小文字を区別せず指定する場合はどのようにしたらよいでしょうか。
".psd"".PSD"".pSd"でも問題ないようにしたいです。
ご教授お願いいたします。

/// ファイル拡張子【psd】
public const string ExtensionPSD = ".psd";
165
(1): 2018/07/06(金)09:06 ID:SbZqPch/(1) AAS
>>164
Unity関係ない気がしなくもないが、自力でやるなら文字を一旦すべて小文字化してから比較すればええんやで
166
(1): 2018/07/06(金)09:21 ID:mqKRW7N6(1/3) AAS
指定時じゃなくて比較時に大文字小文字区別なしでString.compare()やったら?
どうしてもって言うならStringじゃなくてregexでやるか。
167
(2): 2018/07/06(金)09:38 ID:diIi72QZ(1) AAS
>>165
>>166
ご指導ありがとうございます。

下記で取得したものを
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
private void GetSceneTreeObjByFiles( ref List<SceneTreeObj> listParent, string downloadPath )
{
var path = FTP.CommonWord.GetDownloadPathByPlatform( downloadPath );

{
var files = GetFilesFromExtension( path, FTP.CommonWord.ExtensionPSD );
RegisterFiles( ref listParent, files, path, (Texture2D)Resources.Load( "button_com_file_shadow" ) );

files = GetFilesFromExtension( path, FTP.CommonWord.ExtensionJPG );
RegisterFiles( ref listParent, files, path, (Texture2D)Resources.Load( "button_com_file_shadow" ) );

}
}
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

こちらで条件付けしているのですが、
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
/// ファイル拡張子【psd】
public const string ExtensionPSD = ".psd";
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

この場言、"downloadPath"を小文字化するのですが、どのように書けばよいのでしょうか。
急遽直さなければならず、ご教授いただければ幸いです。
168: 2018/07/06(金)09:49 ID:JxKSLFmq(1) AAS
>>167
ふらっと C#,C♯,C#(初心者用) Part138
2chスレ:tech
169
(2): 2018/07/06(金)09:55 ID:mqKRW7N6(2/3) AAS
>>167
試してないけど
downladpatth.ToLowre()でならないかしら
170: 2018/07/06(金)09:59 ID:mqKRW7N6(3/3) AAS
>>169
入力ミス
downladPath.ToLowre()
ね。
171: 弟子 ◆rZPPjYuxmQ 2018/07/06(金)10:24 ID:PYnnNWaZ(1) AAS
ToLower()
外部リンク[aspx]:msdn.microsoft.com
172: 2018/07/06(金)11:01 ID:ziEtrYYq(1) AAS
文字列 小文字 C#
でググれば一発
知識が少なくてC#なのかUnityなのかわかんなくても結果は同じ
173
(1): 2018/07/06(金)20:37 ID:TxoEW2Q0(1/3) AAS
>>弟子 ◆rZPPjYuxmQ
すみません、>>158ができませんでした。
宣言したあと、
「Manager.title.activeSelf」では
下線のエラーが出てしまいます。
画像リンク


確かに考えてみると、
public static GameObject title;の宣言から
使用時にManager.titleでは繋がらない気がしますが、
宣言場所が問題なんでしょうか?
174: >>34 2018/07/06(金)20:50 ID:gEW+Hr/Q(1/4) AAS
Manager.title の青文字、Managerはいらないよ
175
(1): 2018/07/06(金)20:52 ID:gEW+Hr/Q(2/4) AAS
if(Manager.title.activeSelf == false)
じゃなくて
if(title.activeSelf == false)
ね。
176
(1): 2018/07/06(金)20:59 ID:TxoEW2Q0(2/3) AAS
>>175
ありがとうございます。
そう思って、自分も「Manager.」を削ってみたんです。
そしたらちゃんと動くんですが、
敵が弾を一切撃たないままでして、、、
177: 2018/07/06(金)21:00 ID:TxoEW2Q0(3/3) AAS
やはり、NULLが返ってきてるんです。。
んー
178: 2018/07/06(金)21:17 ID:VvyEnY8t(1) AAS
そのスクリプトをアタッチしたゲームオブジェクトは、もしかして複数ないだろうね?
1-
あと 824 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.024s