【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/ >>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
}
埋め尽くされてしまえ >>456
これな!最初気づかんかったわ
しかもResetメソッド定義するとそれ呼んでくれるんだよな >>501
汝よ、汝は適切なアセットがあったら、質問者に紹介しなさい。
汝は我が見守るこのスレで、誉れと思って、自らのなすべきことをしなさい。 無理無理アセットおじさん
他人にはアセット買え買え言うけど自分は一切買わないからわかんないんだもの つかおまえら質問の意味判ってるのか、すごいな
行の高さって何?、親子関係無視して何をしたいの? >>502
もっとよく探しましょう
アセットにできないことはありません >>505
ヒエラルキーのオブジェクト名が書いてあるラベルを縦にのばすなり行間つくるなりして見やすくしたいって話じゃね?
エディタ拡張は専門外だからやり方は知らんが >>506
汝よ、汝は適切なアセットがあったら、質問者に紹介しなさい。
汝は我が見守るこのスレで、誉れと思って、自らのなすべきことをしなさい。 ラベルの行の高さ(幅)が1.5倍くらい広がれば使いやすいな、と思ってエディタ拡張でできないか思案していました。
なにか手がかりでもあればご教授下さい。 フォントサイズは、エディタ拡張の何のAPIを使えばいいでしょうか? >>512
アセットを使えばエディタ拡張もできると思いますよ Unity 2017でSubstance マテリアルで質感を設定したシーンをスクリプトでロードするときにかなり読み込みを待たされるんだけどこういう物なのでしょうか?
キューブを数個置いただけのシーンでもロードが劇的に遅い、Substance マテリアルを削除すると一瞬だからあからさまに原因はSubstance だと思う
何か特別な設定とかこれはやっておけみたいな決まりみたいな物があるのでしょうか? >>513
汝よ、汝は適切なアセットがあったら、質問者に紹介しなさい。
汝は我が見守るこのスレで、誉れと思って、自らのなすべきことをしなさい。 >>515
あのー
今の面白いやつは
どこが面白いんですか? OSのDPIスケーリングを200%くらいにすればいんでないかい >>520
スレタイが違うようなのですが、スレも建てられないのですか? このスレではどんな質問をすれば
おまえらは満足してくれるの? すみません、例えば、ゲーム本筋をまわすManagerスクリプトを作ったとして
そのスクリプト内で、
各ゲームオブジェクトにアセットしたスクリプトのメソッドを使うためには
『 //ゲームオブジェクトを検索し取得する
変数名 = GameObject.Find("オブジェクト名"); 』
を必ず宣言する必要があるのですよね?
しかし、Managerスクリプト内にて
FindObjectOfType<スクリプト名>().メソッド名();
だと、取得抜きで、いきなり他のスクリプトのメソッドを利用できるのは
なぜですか? >>526
それは1行で取得&関数呼び出ししてるからだよ。
ただ、取得が失敗した時にエラーになるから分けた方が安全かな。 >>526
>必ず宣言する必要があるのですよね?
そんなことはなく、例えばオブジェクトaにアタッチされたbのメソッドcを使うとして
GameObject.Find("a").GetComponent<b>().c()
と書けばFindでも一行でメソッドを呼び出せる
逆にFindObjectOfTypeで探したbのインスタンスを変数に保存することもできる
何度もbやcを呼び出すときは変数に保存した方が良いというだけ >キムチは初心者のフリして回答者を試す質問したり、複数端末使って別人のふりして荒らしたりするからスルーしなよ。
>チュートリアルやれ!基礎をやれ!とツッコミたくなる内容はほぼキムチと思ってスルーしたほうがいい。 >>527
>>528
ありがとうございます。まだちょっと理解できてないのですが
そのGameObject.Find("a").GetComponent<b>().c()は
aというオブジェクトを参照して、それにアセットしてるスクリプトbのメソッドcにアクセス、で
FindObjectOfType<b>().c()では
スクリプトbを参照して、その中のメソッドcにアクセスする、ですよね?
逆に言えば、FindObjectOfTypeではゲームオブジェクトにアセットした
スクリプトにはアクセスできない、ということでしょうか?
でも、FindObjectOfType<Object>でオブジェクトを探せる、とありました。
これはどういうことでしょうか?
この探すObjectというのはGameObject.Findで取得するゲームオブジェクトのことでは無いのでしょうか?
Unity上でのゲームオブジェクトとオブジェクトクラスの違いが理解できていません。
ゲームオブジェクトの中身ってオブジェクトクラスに入ってる情報じゃ無いんですか?
FindObjectOfTypeはゲームオブジェクトに入って居ない
スクリプトにアクセスする時だけ使うってことですか? >>529
汝よ、我は初心者であるよ。それと我はコテを変更したのだよ。名無し@キムチから菩薩@太子にねw
それはこの5chのみならず、ツイッターやブログでも同様の変更をおこなっているのだよ。つまり進化だね。
ところで汝よ、我はMakeHumanでつくったどんなキャラにも表情をつけるスクリプトを完成させたけど、MegaFiersなんかに比べるとしょぼすぎるので、アセットに登録申請するのはやめとくよw
https://youtu.be/4LPmcECipkc 自白してるようなタイミングでレスしててワロス
過疎スレで自演するなら一日くらい置いてレスしたほうがいいよw キムチ殿(^^
太子って大使のパクリでふか?(^^
ボッキング!(^^ >>530
FindObject〜自体の挙動を知りたいならまずググれ
ゲームオブジェクトも(スクリプト含む)コンポーネントもobject型の派生だから検索できるが
検索対象はインスタンス化されたものだけで、最初に見つけた一つを返す Unity上級者はリファレンスじゃなくてググるなのか。 ■ このスレッドは過去ログ倉庫に格納されています