【3Dゲームエンジン】Unity質問スレッド36
■ このスレッドは過去ログ倉庫に格納されています
フリー版で開発したゲームは個人・法人を問わず追加のロイヤリティーなしで販売できます。
プラットフォームサポートはiPhone/iPod Touch/iPad、Mac、PC、Web、Wii、Xbox360、Android、PlayStation 3、PlayStation 4、PS Vita他
次スレは>>950以降にできるだけ早く(できれば回答者が回答した後にでも余裕を持って)建てて下さい。
■Unity 2ch Wiki(まとめ、過去ログ、リンク集)
http://www24.atwiki.jp/unity2ch/
●リンク
・Unity(日本公式サイト)
http://unity3d.com/jp
・マニュアル
http://docs.unity3d.com/ja/current/Manual/index.html
・チュートリアル
http://unity3d.com/jp/learn/tutorials
・スクリプトリファレンス
http://docs.unity3d.com/ja/current/ScriptReference/index.html
・FAQ
http://unity3d.com/jp/unity/faq
・MSDN
http://msdn.microsoft.com/ja-jp/ms348103←スクリプトのエラー番号をこれで検索すると原因が日本語で出てきます。
前スレ
【3Dゲームエンジン】Unity質問スレッド35
http://mevius.5ch.net/test/read.cgi/gamedev/1523771570/ C#の素養や理解が足りてないからUnityの機能について想像がつかない、コードもC#慣習を知らないか守る気がない、そんなやつがなんで初心者スレに行かねえんだ
流石に専門学校の推薦のやつはここまでひどくねえわ >>397
>実行してみればインスペクタの値になってるだろ
それはわかっているんです。
ただ、ソースコードの方では「1」で初期化と記述してるのに、
インスペクタの方で「10」の値にしている。
実行したらもちろん10で実行される。
でも、ソースコードは「1」ですよ?
矛盾が生じていることが気持ち悪いというか、
なんか腑に落ちないんです。
インスペクタでいじることは、あくまでデバッグ目的なんですか?
>>398
確かに、初心者質問スレの確認が取れました。
自分が初めてこのスレにきたときは、初心者質問スレがなかったと思ったんですけどね。
私は、超初心者です。 質問したら礼ぐらいしてから次の質問したらどうですか?
常識ないんですか?
わざとやってるんですか? 言いたいこと伝わりませんか?
例えば、ソースコードではHP=10に設定してるのに
実行前に、インスペクタの方でHP=1にすることができます。
で、実行すると、HP=1です。
でもソースコードではHP=10のままです。
どういうことでしょうか?
ソースコードのそこを無視して実行されたんですか?
それとも、実行の過程が、ソースコード→インスペクタ上書きなんですか? >>400
私は次の質問に移っていません。
回答ありませんよね? とりあえず、Unityゲームエンジンでは
オブジェクト制作の基本的な流れが
オブジェクト作る、スクリプト書く、
inspector上で試しながら変数の値を考慮する
最後にスクリプトの方で変数の値を修正
それの繰り返し作業、ということですか?
↑
これがすごく重要な質問というか、今回のキモなんです。
ここに、答えてもらいたいのですが、
まだ誰もそこに触れてくれていませんので
ディスカッションじゃないけども、質問途中の気分です。 すみません、ちょっと煽られたので生意気な返事してしまいました。
しばらく反省致します。 >>403
インスペクターで変数を初期化するならコードで初期化する必要ないよ >>403
public はインスペクターで一度でも値を設定するとコードの変数宣言部分での初期化はインスペクター側の値が優先される
最初に誰もが躓く仕様だと思う 躓くってw
公式の初級チュートリアルレベルできちんと説明されてるだろうに
特にサバイバルシューターなんてすごく良質のチュートリアルだぞ
ほんとやれよな public int HP=1; ← デフォルト値
おわり >>406
優先されるってかインスタンス化される時ににインスペクターの値いれてくれるんだろ。
第一、スクリプトのソース書き換えられたら、同じスクリプト使ってるゲームオブジェクト全部同じ値になるじゃないか。
インスペクターで調整した値をそのままにしたかったら独立したprefabにしとくんだよ。 >>409
両方で宣言している場合はスクリプト側は無視されるけど一度もインスペクターで値を入力してないとスクリプト側の変更が反映され続けるという仕様が初心者が混乱する原因かも インスペクタの値はァタッチしないと変えられない、つまりそのオブジェクト固有の初期処理で設定される、これが裏で動いている。
コード上のは共通処理
この共通のあとに固有の処理がされるのでインスペクタの値が適用される。
同じスクリプトを二つのオブジェクトにァタッチしてテストすれば分かるでしょ >>403
数値をコードにベタ書きするならそうなります。
そうせざるを得ないものもあるでしょうが、大体の場合、調整済みのオブジェクトをプレファブ化しとけばいいと思います。
調整過程でいくつかプレファブ化しといて、後で比較検討なんて事も可能です。
でも、その.csファイルをファイル単体で他のプロジェクトに持っていくつもりなら、コードにベタ書きしないとダメですね。 >>404
ソース内に書いた数値はあくまでインスタンス化した際のデフォルトだよ。
結局はインスペクター値で上書きされる。
プレファブ化してヒエラルキーに配置してみればわかるかな。
インスペクター値に値を入れた状態でプレファブ化してあるとインスタンス化した際に又上書きされるけどね。
意識した方が良いのは、unityはunityで結構決め事があるって事ですね。
個人の気持ち良い悪いで理解しなくて良い部分かもですね。 >>410
ああ、それあるあるですね。
インスタンス化されたコンポーネントがダーティにならないと保存対象になりませんし、インスペクター値が保存対象外でスクリプトのデフォルトで変数値が埋められるんでしょうね。
上の書き込み不十分でしたが、正確には一度もコンポーネント値が保存されて無い場合、スクリプト値でデフォルト埋めがされるって所ですかね。 深夜に駄文連投してしまったのに
午前にも関わらずレスをくださった皆さま、
本当にありがとうございます。
特に、ID:ukzP0aOuさんと
ID:P+CKIpjTさんとID:ptzLJ3fxさんの
会話は非常に勉強になりました。
多分、Unityで本腰いれたゲーム制作に入ったら
スクリプトソースの方orインスペクタの方で設定したのに、、あれ?
みたいなことが頻繁に起きそうですね。
とりあえず、ソースコードの初期化よりも
インスペクタの初期化が優先(上書き)されること、
覚えて起きます。
今まではwinの方でソースコードだけで作っていたので
Unityのプレハブの用途も正直まだピンと来てないのですが、
これから慣れていこうと思います。
優しい方もいてくださって本当によかったです。
Unity、挫折しないようにがんばります。 >>416
画面で使ってるのはUnityエディタ、な。悪い事は言わないから、公式のマニュアル一度位は読んでおきなよ。多分あんたはUnityの全てを誤解してるぞ。 >>415
汝よ、汝は質問者に適切なアセットを紹介しなさい。
汝は、我が見守るこのスレで、誉れと思って、自らのすべきことをしなさい。 汝らよ、インスペクターは便利であると知りなさい。
同じスクリプトを付けた3つのオブジェクトに異なる挙動をさせたかったら、インスペクターの値を異なるものにすればよい。
初心者は、我が見守るこのスレで、誉れと思って、そのことを深く記憶にとどめておきなさい。 向こうのスレにいかないのはね、初心者は初心者の自覚がねえからなんだろうな >>422
予想通り、どうしても教えて君したい糞コテ共がいい子ちゃんのフリして
手ぐすね引いてお待ちしてるだけのスレだった
そんなのに引っ掛かるカモいるの? >>425
向こうは
アセットおじさんは荒らし通報で規制できるらしいので、平和です 見てまふぇんがアセおじいないだけで本当に平和になるんでふか?(^^ 僕がいない、というより開かないスレならありまふよ(^^
勝てる喧嘩しかしないと言いつつ全方向に喧嘩売ったアホがいる総合スレなんでふがね(^^
あのスレは平和のために透明NGにぶち込んであるから僕は見えないし開けまふぇん(^^ あっちの初心者質問スレは初心者以外が答えると通報されるからなw >>435
ご丁寧に口調まで変えて書き込んでいながら白々しいんだよ
バレたくなかったのが見え見えだぞキムチ
こうやって色々なスレを乱して荒らして回ってるんだなお前
435 名前:名前は開発中のものです。[sage] 投稿日:2018/06/24(日) 22:48:09.42 ID:jJ6M8/KE [3/3]
逆だよ
名前欄いれるのめんどくせぇんだよ
https://mevius.5ch.net/test/read.cgi/gamedev/1528249519/46
46 名前:弟子 ◆rZPPjYuxmQ [sage] 投稿日:2018/06/24(日) 19:59:04.97 ID:jJ6M8/KE [3/3]
>>45
複数の書き込み確認です
なお、規制されるとこの板全部書き込み出来なくなるのでよろしくです
取り合えず、複数の通報してます。
来週もあるようなら他からも通報させてもらいます
あちらに書き込みしたければ、これで止めてくださいね public のことといえば最近気づいたけど
一度変数宣言すると値を書き換えても反映されない
たとえば
public int a=10→実行
public int a=20→実行 a=10のまま
こういう仕様なのか?
困るのが配列のとき
public int[] a=new int[2];
public int[] a=new int[3];→反映されない
変数名を一度書き換えるか宣言と同時にnewしないようにしないといけない それ変数のスコープはちゃんと確認されてます?
というか二つ同じ名前で定義できないと思うが? 何日か前に同様な事言ってた奴だろ
基礎の基礎もやらずに何日もくだらん事に悩んで時間つぶしてる馬鹿初心者だから初心者スレでも逝ったらいいよ どういう状況で動かしてか詳細は判らないけど
VSで一行づつ動かして都度変数の値を確認すれば即解決する問題ですね
ほんとデバッグの方法知らない初心者が多いですね >>438
同じ名前で定義してるのじゃなくて値を書き換えて実行してるだけ
>>439
基礎の基礎というがそんな解説してるとこ見たことないぞ
みんなこの仕様しってるのか? >>437
オブジェクトにアタッチした後だとInspector側の設定値が優先されるからそうなる。
一度privateにしたりするといいかもね。 >>441
書き換えをインスペクタで行ってるならそちらが優先される
コード上で初期値与えても、インスペクタで上書き
どの時点で上書きされるかは、各関数で確認してみて >>440
そういう書き方するってことはあんたも知らなかったんだろ >>443
インスペクタのことは一言もいってませんが
さてはみんな知らなかっただろ 教えてあげたのにまさか絡まれるとはw
Unityエディタで実行したのかVSで実行したのかも実行ファイルで動かしたのも分からないのに判断できるはずがないですよ
相手にしないほうがいいキチガイみたいですね >>446
いや その返しはおかしいよね
public int a=10;
なんでこれをVSで一行ずつ実行する必要あるの? 調べてないので記憶ベースだけど、c#の初期化の順序は
1.基底クラスの初期化
2.初期化子による初期化
3.コンストラクターのなかのInitializeComponentによる初期化(この中でインスペクタ値が設定)
4.コンストラクターのなかのInitializeComponentの後ろに書いた初期化
な気がするので(もう一度いうと調べてないからなw)
2で初期化した内容が3で初期化されてるんじゃ?
なお俺はUnityもやってない模様w というわけでね 誰も正しい解答をしてないみたいなので答えてあげようと思います
>>390>>392
pubulic int HP=1
Unityではこういう書き方はしないほうがいいようだね
ゲームオブジェクトにアタッチして実行された時点でインスペクタに強制的に値を
入力されてしまうようです
public int HP; void Start(){HP=1;}
スクリプトで書きたい場合はこうしましょう
public変数の場合はnewのタイミングもずらしたほうがいいようです 楽しいわ3DGameKit。
3Dアクションゲーつくーるシリーズのようだ。
いまだUnityスキル低い人は手っ取り早く3Dゲーの作成達成可能。
Prefabのスクリプト除いてもちんぷんかんぷんな人でもひととおりそろってるから改造しながら楽しむとスキルアップできるんかな? C#の初期じゃなくてunityの初期化だと何度言ったら。
あくまでスクリプトなんだよ。C#のプログラム書いてるんじゃなくて、C#を使ってUnityのスクリプト組んでんの。 Inspector(GUI)とスクリプトで重複する部分はスクリプトの内容が優先される。
それだけのこと。 >>437
これの意味がわかったわ、てか日本語下手だなぁ
まず最初に
public int a = 10;
void Start () {
print("a:"+a);
}
を実行すると、「a:10」が表示されるで
「public int a = 10;」を 「 public int a = 20;」にして実行する
すると、「a:10」と表示されるわ、これバグじゃね?
って書いてくれればすんなりみんなわかるのに
で、なぜこうなるかというと、public定数なので当然アタッチされているオブジェクトが保存しているから
インスペクタ見ればわかると思うけど、自動でインスペクタに最初の値が保存されていて
それを書き換えてないから、そのまま最初の値が表示されるだけ
それくらい見ればわかるだろ >>452
インスペクタビュー優先だろ?
優先というか後書きというか… >>449
そもそも、同一ファイル内で値設定する変数をpublicにする必要があるのか。Unityに限らず、普通どこからどんな変更されるかわかったもんじゃないpublicを避けるために色々工夫するだろ。
インスペクターで値を調整するためにpublicもしくはseriarizeにしたなら、コード側書き換えたのにー?なんて状況にはまずならんだろ。publicを気軽に使いすぎなんだよ。グローバル変数なんて他に方法がないか、メリットがリスクを大きく上回る場合しか許されないのよ普通は。 でだ、じゃこれバグじゃね?
っていうと、そうじゃなくて、コードの初期値を直した場合には
インスペクタのアタッチしているコードの右に歯車のアイコンあるだろ
そこから「Reset」選ぶんだよ
そうすると、最新の値を持ってきてくれるのだ こんな低レベルな話を何時まで続けるんだ
ほんと数日前と全く同じ流れじゃねーか
何度も言うけど初級チュートリアルくらいやれよ
チュートリアルの中で実演してるぞ 質問者じゃなくて頭おかしいマウント君だったか。
さっさと糞コテつけろw >>458
正直このページ見て最初のインタラクティブチュートリアルはいいとして、その後何したらいいのって感じだけどな。
やればUnityの主要な概念が一通り身につくものあるの?どれなの?って感じだわ。なんか細切れ感というか自分で何必要か何もわからない初心者に取捨選択させるというか。
ちな自分はコースウェアやったけどあんなんでもいいからこれやったらいいのねって分かるやつを置いとけって感じで。
https://unity3d.com/jp/learn/tutorials >>460
汝よ、汝はUnityの主要な概念を一通り身につける必要があると考えるかね?
Unityの入門書を執筆したり専門の講師になったりするのであれば、それは必要だろう。
だが趣味でやる分には、自分の興味のある部分だけ詳しければいいのではないかね?
それ以外の部分は初心者以下でもかまわない。その都度身につければいいことだ。
汝らは我が見守るこのスレで、誉れと思って、それについてよく考えてみなさい。 自分でカリキュラムも組めないとか
大学の授業どうやって選択したんだよ
マジで高卒なのか 結局>>437はpublicの意味もインスペクタの意義もわかってないまま偉そうに変なやり方講義して消えたか
まぁ恥ずかしくて出てこれないよな普通の日本人ならな >>463
どこが変なやり方?
Reset押すのは実用的じゃないよ
ひとつの変数変えるたびに他のインスペクタの値も消えてしまうので
そんなことするくらいなら最初からインスペクタで値入れたほうがよくね 笑た、実用的www
君はpublicとインスペクタの意義について考えてから使いなね
じゃないならprivateにしてstartで初期処理すればいいよ >>465
答えになってないぞ
publicの変数の初期値をどこでするかって問題だろ だから、君はpublic使わない方がいいよ
あぁなんならunity使わない方がいいよ
君には無理 わざわざ呼び出しておいて逃げるなよw
そもそもprivateにしろとか逃げの答えだろ
間違ってるならちゃんと答えてみろや public int hp=10
インスペクタが優先される仕様上あまりこういう書き方はしないほうがいいですよ
最初からインスペクタで入力するかstart内などで初期値を設定しましょう
これが間違ってるなら反論どうぞ >>462
だーから主要な概念伝えずに何をどうやって判断すんだよボケ >>469
おーまだやってんのか。
publicはインスタンス変数でしょ?
スクリプトをオブジェクトにくっつけるんだけど、その時すでにインスタンス化された後の状態で保存されるのよ。
インスペクターはシリアライズされた値をいじるから、優先とかじゃなく、インスタンスの値を設定してんの。
public int hp=10
は新しいオブジェクトにくっつけた時の初期値としてただしいよ。
startで初期値入れるとか、まさかオブジェクト毎にスクリプトファイルをつくるの?
enemy1.cs enemy2.cs.........ememy100.cs
敵キャラが100体いたファイルも100? 変数なのに値書き換えられなかったら意味ないだろ・・・ >>472
はい?
なんでstartで設定すると別のスクリプト作る必要があるの?
とんちんかんなこと言ってませんか? 反論する人はちゃんと正しい方向から反論してくださいね チュートリアルもやらないんだった、せめて初心者スレに行くか専門学校に通えばいいのに >>474
んじゃHPが10、15、20、25と5づつ増えていくキャラを
10匹作ってみたらいんでね? HPが5づつ違うキャラを10種類の方が正確か
まぁやってみな >>469
>>472さんが書いてるじゃん、理解できない頭なんだから止めたら?
まず、初期値を変数定義で行うのはなんら問題ない
次に、それがpublicであるならオブジェクトにァタッチするとインスタンス化されてインスペクタに表示される、ここで保存される
だから通常はインスペクタの値を変更する事になる
このスクリプトを例えば敵、弱敵等にァタッチした場合、インスペクタの値を変える事でHPの制御ができるが、start関数で初期値を設定したら全て同じになってしまうよ。
はいダメなゲームの完成 仮に256種類のHPがあったら、256個csが要るから膨大な手間がかかるなw
頑張れwww はい?
そんな方法いくらでもあるだろw
たとえばIDつけてIDごとにHPを読み込むとか
なぜCS他種類つくらなきゃいけないという発想になるのかわかりませんw startで固定値設定するんだろ?
何今更変えてんの? 早く256種類作れよw じゃそれでいいんじゃね
後は見てる人が判断するでしょ
しかしこんだけスレ進んでるのにァセットおじ出てこないな
板ごとアク禁なったのか?w >>484
そういう幼稚な反論しかできないならもういいからw
じゃおまえは値変更するとき256回Reset押すのか?w お前の意向を尊重して、要件を満たすとそうなる
他に選択肢があるなら、自分で示せばいいだけ
Resetなんて使わないし、アスペ特有の潔癖症か何かなのか? インスペクタで設定するかstart内で設定するかと言ってるだろw
幼稚なからみかたしてくんなよw >>488
インスペクタ→インスタンス
start関数→スクリプト
別の場所なのでオブジェクト共通の処理は後者、個々の設定は前者がいい こんなスレでも、何となぁく覚えてた用語が、何となぁく理解できた。喧嘩腰の説明でも役に立ったよ、ありがとう。 >public のことといえば最近気づいたけど
>というわけでね 誰も正しい解答をしてないみたいなので答えてあげようと思います
最近気付いたという超初心者なのに何でこんなエラそうなんだろうな。
しかも同じ話題が2日前にこのスレで出ている事に気付いてないんだろうか。 ほらな、俺が>>436の指摘した途端に荒れ始めた。
キムチは初心者のフリして回答者を試す質問したり、複数端末使って別人のふりして荒らしたりするからスルーしなよ。
チュートリアルやれ!基礎をやれ!とツッコミたくなる内容はほぼキムチと思ってスルーしたほうがいい。 >>484
while(true){
intantiete(kinuchiprefab)
kimuches = findobjectswithtag(kimuchi)
hp = kimuches.length *5
}
埋め尽くされてしまえ ■ このスレッドは過去ログ倉庫に格納されています