【3Dゲームエンジン】Unity質問スレッド33
■ このスレッドは過去ログ倉庫に格納されています
フリー版で開発したゲームは個人・法人を問わず追加のロイヤリティーなしで販売できます。 プラットフォームサポートは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質問スレッド32 http://mevius.5ch.net/test/read.cgi/gamedev/1509307535/ 公式どころか個人がやってる初心者講座サイトの1つでもやってれば普通に分かっていておかしくない内容だよな。 どんだけ何もやってない怠けものだよコイツって感じ ごく初歩的な質問ですが、何もさわってないのに、たまにシーン内でのオブジェクトの位置が変わっていることがあるのですが、それは何故でしょうか? 同じく何もしないのに、コンポーネントが外れていたり、インスペクターの値が変わっていることもあります。 これは非常に困るので、位置や値が自分で変えるまでは絶対に変わらない対処法をご教示おねがいいたします!!! なお>>113 は当方ではないですよ。当方、無意味なコテ外しはしませんw シーン遷移時に引き継ぎたい変数をどの手段から選べばいいか迷ってるんですけど、 1 static変数として持つ 2 ScriptableObjectを作ってそこに一時保管しておく 3 dontdestroyで変数の入ったスクリプトがアタッチされているオブジェクトを壊さず持っていく 4 外部のdb等に一時保管しておく 辺りで迷ってるのですが、ケースバイケースだとは思うのですがどれがいいのかアドバイスお願いします。 1 なるべくstatic使わない方が初心者には良い とたまに聞きます。 似た名前のローカル変数を複数使っているので混乱する可能性もあるかなと 2 基本的に変動しない小さいマスターデータをdb代わりに使う事が多い と見ました こういった使い方には適さないのかもと迷いました 3 普通のゲームと同じくいくつかのシーンをループして進めていくのでオブジェクトが被らないようにシングルトンにする手間や 処理は一切入れず変数入れとしてこの処理をするならScriotbleObjectでいいのかな?と思ったり 4 形式にもよるのでしょうが一時的な変数をイチイチ外部に書き出すのはどうなのかと 当方、キムチでも、113でも、117でもありませんがw >>111 ボタンは引数なしで呼び出すだけだから簡単だけど、 スライダーは引数をどうやって受け取るかがわからなかったのでした 少なくとも公式のオンラインマニュアルからは探せず・・・ UIのインスペクターのリストをよーく見たら、 引数ありのメソッドと同名の、引く数なしのメソッドが上の方に見つかって解決したけど >>99 やっぱり、リスト最上段のDynamic floatの直下にあるところをみると、 コレ(@)がUnity側で用意した機能なんでしょうね・・・ >>118 何が消えてOKで、何が消えたら不味いのか、切り分けが分からない 例えば、セーブ/ロード付けるなら、シーン移動時にセーブとロード するから結局同じ事じゃないの? >>118 個人的には「3」を使ってます! 最初のLoad用のシーン0でフラグ管理用のオブジェクトを「DontDestroy」設定して、 その後はシーン1へ遷移して、以降はシーン0へは戻りません (戻ると、「DontDestroy」設定を繰り返してしまうので・・・) フラグ管理用のオブジェクトに載せたスクリプト内では、Start()内で、 ゲームを通してシーン間で共有する変数を全て「public」で宣言して初期値設定しています そして、他のシーンの他のオブジェクトから、適宜呼び出して参照や代入して共有してますね >>121 の言うように、 セーブありのRPGみたいな感じであれば、シーン変更前にセーブして、 シーン変更後にロードでも良い気がしますね ゲーム終了後も保持したいなら、やはり外部保存だと思います 自分のは基本パスワード式のACTなので、 セーブシステムがないので、ゲーム内でのみ保持しています パスワードの入力によって、フラグの初期値を変更して、 その後にゲーム開始となるようにしていますね (まっすぐゲームスタートした場合は、全フラグを初期値で開始) >>118 言うまでもないが可能不可能で言えばどれでも出来る と言うか、シーンロードでDestroyされないヒエラルキーに依存しないものならなんでも保持は可能 適不適で言うなら 1.staticである必要性はない。staticにすることによる弊害の方が多いため不適 2.ScriptableObjectは実行時はReadOnlyなデータのバリエーションを扱うもの。使い方が間違っているため当然不適 3.揮発性の情報ならこれが最適※ 4.不揮発性の情報ならこれこれが最適※ ※揮発性情報は意図せずプロセスが死亡した場合に消えても良いもの、不揮発性情報はプロセスが死亡しても残るべきものとする staticにする必要性ってどこにあるんだろう?? FCやSFCで言うところの、RAMじゃなくてROM的な機能か? >>121-122 >>124 回答ありがとうざいました。 3でやってみようと思います。 ROM的な機能は、ScriptableObjectの方だったか 全オブジェクトからアクセスできる関数(メソッド)作成はStaticが良いかもしれない どのスクリプトからでも @RGB→HSL変換できるメソッド:RGBto.HSL(R, G, B, out H, out S, out L) ARGB→HSV変換できるメソッド:RGBto.HSV(R, G, B, out H, out S, out V) を作ってみた public static class RGBto { public static void HSL(int R, int G, int B, out int H, out int S, out int L){ int Max = Mathf.Max (R, G, B); int Min = Mathf.Min (R, G, B); if (Max == Min) { H = 360; } else if (G == Max) { H = 60 * (B - R) / (Max - Min) + 120; } else if (B == Max) { H = 60 * (R - G) / (Max - Min) + 240; } else { H = 60 * (G - B) / (Max - Min); if (H < 0) H = H + 360; } if (Max == 0 || Min == 255){ S = 0; } else { S = 255 * (Max - Min) / (255 - Mathf.Abs(Max + Min - 255)); } L = (Max + Min)/2; } public static void HSV(int R, int G, int B, out int H, out int S, out int V){ int Max = Mathf.Max (R, G, B); int Min = Mathf.Min (R, G, B); if (Max == Min) { H = 360; } else if (G == Max) { H = 60 * (B - R) / (Max - Min) + 120; } else if (B == Max) { H = 60 * (R - G) / (Max - Min) + 240; } else { H = 60 * (G - B) / (Max - Min); if (H < 0) H = H + 360; } if (Max == 0){ S = 0; } else { S = 255 * (Max - Min) / Max; } V = Max; } } Hを求めるところはもっとまとめられるかも・・・ Hのみ0〜360(360で色相未定義) RGB,SLVは0〜255 Stackoverflowみたいでいい感じじゃないの また質問なんですけど、 シーン遷移した後って前シーンからdontdestroyで持ってきたオブジェのスクリプト内で getcomponentってできないですか? gameobject.findで指定したオブジェクトを見つけるまでは大丈夫なのですが ゲットコンポーネントするとNullReferenceExceptionが帰ってきます 同じシーン内に作ったなんらかからならちゃんと動くのですが もしかするとfindも失敗してるのかもしれませんが、 sceneをパスに指定するようなことが必要になるのでしょうか? dontrestroyしたオブジェクトはdontdestroyの子みたいな表示になりますし 共通シーン内でしか受け渡しできないとかなのでしょうか? 全部自作した奴が偉い君は ガワだけ張り替えて大当たりするようなソシャゲが 天下取ってる現状に発狂してそう >>103 UnityのUIのボタンのフォーカスとフォーカス対象の設定 https://gametukurikata.com/program/uifocus >あらかじめボタン1つがフォーカスされていないと他のボタンの選択が出来ません >EventSystemに最初に選択するボタンの設定は出来ます >>89 >>91 [UI] スライダーで変更した値を取得できない現象に対処した [Unity] http://negilab-unity.com/archives/14367667.html >スライダーの変更値を float として取得するのではなく、Slider.value 変数として取得するように書き換えたところ、問題なく取得できました >スライダーのインスペクタで、引数にスライダーのオブジェクトを指定 uGUIのSliderの値をスクリプト側で受け取る方法 http://unitymemo.blog.jp/archives/30226350.html >SliderをGetComponentしてvalueを参照することでスライド値を参照できます >OnValueChangedに定義したメソッドでスライド値を受け取る方法 >メソッドを選択する際、一番上のほうの「redSlider」を選択する事 >下のほうにも「redSlider(float)」がありますが、こちらを選んでも正しく値を渡すことは出来ません >>102 Unity : 3Dシーン内のCanvasが邪魔 http://indie-du.com/entry/2016/05/22/100102 >UnityがCanvasの1ピクセルを1unitとして計算して表示 >1unitは1メートルなので、100ピクセルのUIは100メートルで描画 >Canvasの左下が原点(0, 0, 0)に合っている 見ての通り、質問せずに最初から自分でググってれば数分で解決している問題が多いな。 自分でググらないといけない事を人にググってもらってるだけなんだから。 カンバス、そんなに邪魔? 消しちゃえばいいやん。必要な時にtrueにしてさ。 >>140 そうだよね GUIの表示だけoffにすれば済む話だよね >>134 何をGetcomponentしたいの? Sceneを指定したりはしないはず ObjectはFindされているんでしょ? obj内にObjectが入っている状態で、スクリプトをGetcomponentしたいなら、 スクリプト名 s = obj.GetComponent<スクリプト名>(); そのスクリプト内の変数をゲットしたいなら s.変数名 変数は引用元のスクリプトの最初にpublicで宣言しておいて やってみたがFindもGetComponentも普通に出来るよな 検索範囲は明示がないけどHierarchyウインドに表示されてる物は 全捜索するようで、シーンが分かれていようが全く関係がない (Updateで使うなってのは、毎回Hierarchy全捜索されたら洒落にならん) >>134 dontrestroyしたObjectに付いているスクリプト内で、 別のシーンにある他のObjectのコンポーネントを取得してみたけど、普通に受け取れたよ? Scene0で、共有Objectをdontrestroyして、Scene1へ遷移 Scene1で、共有Objectのスクリプトから、 Scene1の別のObjectのtransfomを取得したら、普通に見れた FindだとHierarchyにない別のSceneのObjectは検索できないはず Objectを検索できたのに、GetComponentできないなら、 そのObjectには取得しようとしているコンポーネントがないか、 他のObjectから取得できないように保護されている(変数ならprivate宣言)かでは? >>134 Debug.Logで、FindしたGameObjectの中身を表示、 GetComponentした中身を表示してみることを勧めるよ dontrestroyしたObjectに付いているスクリプトでも、 それ以外のもともとそのSceneにあったObjectに付いているスクリプトでも まさか、dontrestroyしたObjectを出すためのSecneを省いて テストプレイしているなんてことはないよね? 自分の例で言えば、Scene0からじゃなくて、Scene1からテストしているとか テストプレイ中、HierarchyにdontrestroyしたObjectは出ているんだよね? 毎フレームdontrestroyしまくったりしていないよね?? >>144 >FindだとHierarchyにない別のSceneのObjectは検索できないはず なるほどこういうことか http://imgur.com/RGyGQa6.png transform.FindとGameObject.Findは検索範囲が違う 俺はGameObject.Findだから取れてるみたい 何百枚もカンバスあるの? そんなに多くないから登録しときゃ見つかるでしょ。 英語だとカンバスが近いらしい。HowTo動画とか見てるとカンバスカンバス言われるからカンバス読みになるんじゃないの。 キャンバスは美術用語で、学校で習うのはキャンバス読みだと思う。 >>150 発音のことなのか・ 英語でもキャンバスが近いよw 別にどっちでも良いしどっちでも伝わるけど喋るときはどっちが多いのかなぁっていう素朴な疑問 ネイティブの発音はどうでも良い、カタカナ表記することが云々って話になるし >>136 できる/努力する奴ひっぱり下ろすのはゲスすぎないか 俺もわかんないまま借りてるけどどっか後ろめたいよ >>142-145 レス遅くなりました。mm dontrestroyしたオブジェクトにアタッチされたスクリプトから 遷移後のオブジェクトがfind出来てるか確認したところ、出来ていませんでした。 上で出来ていると勘違いしたのはfindの時点でエラーが帰ってこなかったからという単純な理由でした。 遷移後のシーン内に作ったオブジェクトのスクリプトから同じコードをコピペしてみましたが こちらは普通にfind出来ていました public gameobjectとしてインスペクター上で両方確認しました。 うーん。 香港人 「高卒だらけの日本人英語は、無いところにYの発音が入っちゃいます。土人丸出しです。」 今試したのですが、 objA dontdestroyしたオブジェクト | これにアタッチされているスクリプト内でボタン押されたら遷移する処理 | その遷移処理の後に同スクリプト内の別メソッド@を呼び出して遷移後のobjBをFind →失敗 ↓ シーン遷移 objB 遷移後のシーンに配置されているボタンから、objAのメソッド@を呼び出す → 成功 objAのヒエラルキーでobjBが格納されている だったんですけど、これどういうことなんだろう… >>156 だとなんか時系列変に見えますね; objA dontdestroyしたオブジェクト | これにアタッチされているスクリプト内でボタン押されたら遷移する処理 | ↓ シーン遷移 objB その遷移処理の後に同スクリプト内の別メソッド@を呼び出して遷移後のobjBをFind →失敗 ↑ ↓ 遷移後のシーンに配置されているボタンから、objAのメソッド@を呼び出す 成功 objAのヒエラルキーでobjBが格納されている みたいな感じです こっちのが見づらいかもしれませんが… 遷移処理はどこに遷移? ところどころ足りないので補足よろ。 シーン1 objA dontdestroyしたオブジェクト | これにアタッチされているスクリプト内でボタン押されたら遷移する処理 | ↓ シーン2へ遷移 objB その遷移処理の後に同スクリプト内の別メソッド@を呼び出して遷移後のobjBをFind →失敗 ↑ ↓ 遷移後のシーンに配置されているボタンから、objAのメソッド@を呼び出す 成功 objAのヒエラルキーでobjBが格納されている これで質問に答えられてますかね? てか、何で相互に見れるようにする必要があるの? 無駄が多すぎるだろ DontDestroyOnLoadしたGameObjectを一方的に参照する データ保管庫みたいに切り分けて使えばいいだけじゃない うーん…なんでだろう またもう一つ試したのですが、 シーン1で objA に加えて objCを作り、 objCにスクリプトをアタッチし、これもdontdestroyして中に変数を一つ入れておきました シーン1 objA dontdestroyしたオブジェクト | これにアタッチされているスクリプト内でボタン押されたら遷移する処理 | ↓ シーン2へ遷移 objB その遷移処理の後に同スクリプト内の別メソッド@を呼び出して遷移後のobjBをFind →失敗 ※ ここで今回作ったobjCから参照してみる → 成功 ↑ ↓ 遷移後のシーンに配置されているボタンから、objAのメソッド@を呼び出す 成功 objAのヒエラルキーでobjBが格納されている と、見づらいかもしれませんが同じシーンから持ってきたオブジェクトに対しては普通にfindもゲットコンポーネントもできました あああああああああわかんね!!!!!!!!!!!!! >>163 遷移後にそのまま冒頭のイベント処理みたいなことをやりたくて ならそのまま遷移処理の後に引き続きそのメソッド内である程度指示だして引継ぎすればよくね? でやってみたら遷移後のシーンのオブジェクト参照ができなかったということから質問をしました 値の保持に使ってるんじゃないのかよ 何の意味があるんだそれ 上でも書いてるのですけど本来の目的はそれですが 試してみたところエラーが出たので質問をした ということです objAを外から読み書きできるようにしたんだよね? なんでobjAからobjBを見る必要があるのか分からない(出来るけど) >>165 シーン遷移時は、前のシーンのオブジェクトを破棄して新たなシーンのオブジェクトを構築する処理が走る この処理が終わらないと新しいシーンのオブジェクトはFindでは見つからない よって、新たなシーンのオブジェクトを見つけたければSceneManager.sceneLoadedデリゲートを使ってシーンのロードが完了してから処理を行う必要がある ちなみにSceneManager.sceneLoadedはロードされたシーンのオブジェクトのAwakeが完了し、Startが呼ばれる前に呼ばれる事に注意 またこのデリゲートはどのシーンがロードされても呼ばれるから処理内でシーン毎に振り分けるかハンドラをつけ外しするなどの対処が必要 >>164 遷移後のobjBをFind →失敗 当方の経験ではFindは、そのオブジェクトにアタッチされているスクリプトからでないと、失敗したり成功したりその時々によってさまざまだな。 プログラムが成功したり失敗したりなんて挙動するわけない 成功するのも失敗するのも理由がある 理由を理解できていないのにプログラムのせいにするプログラマー >遷移後のシーンに配置されているボタンから、objAのメソッド@を呼び出す 本当に呼び出せている? Find以前の問題だったりして・・・ ボタンからの入力を受けていないだけとかはないですか? UIから、その該当スクリプトへのコールがかかっていないとか? 入力をInputにして、 if?(Input.GetKeyDown?(KeyCode.Space))?{ Debug.Log("Input OK"); GameObject A = GameObject.Find("objA"); Debug.Log(A); } を追加して、 スクリプトが機能しているかどうか、 オブジェクトを取得できているかどうかを確認してみてください すみません、objAからobjBの方を見たいんですね objAのスクリプトのUpdate()内に、 if (Input.GetKeyDown (KeyCode.Space)) { Debug.Log("Input OK"); GameObject B = GameObject.Find("objB"); Debug.Log(B); } を追加して、 スクリプトAが機能しているかどうか、 オブジェクトBを取得できているかどうかを確認してみてください ボタンからの呼び出しが届いていないだけであれば、 上記でオブジェクトを取得できるはずですが・・・ シーン2では、 objA:DontDestroyによって、シーン1から持ち越し objB ・・・が、Hierarchy上に同時に並んでいるわけですものね? 各オブジェクトのそれぞれのスクリプトで行っていることが良く分からないのですが、 Scene1 objA-A.cs:DontDestory ボタン→LoadScene("Scene1") objC-C.cs:DontDestory ↓ Scene2 objA-A.cs:DontDestory(Scene1から) メソッド@→A = Find("objB") →NG objC-C.cs:DontDestory(Scene1から) Aのメソッド@→A = Find("objB") →OK objB-B.cs ボタン→Aのメソッド@→A = Find("objB") →OK こういうことなのでしょうか?? A = Find("objB")は、 GameObject A = GameObject.Find("objB");のことです メソッド@を呼ぶタイミングはどうやって遷移後に指定しているのでしょうか? まさか、LoadScene("Scene1")と同じフレーム内で呼んでいないですよね?? >>169 レス遅れてすみません。 ありがとうございます。 とても参考になり、わかりやすかったです。 結果として、やったことは SceneManager.LoadSceneの直後にSceneManager.sceneLoadedを行って そのデリゲート処理完了後にそれぞれのテストメソッドを呼び出して参照したりしたところ 問題なく参照できました。 >>161 にはレスしませんでしたが、当たりだった感じです。 >>170 なるほど。。。他の方々のレスを見る感じ、テスト環境でやっていたのかもしれないので もしかするとオブジェクト等の量とかでかわるんですかね? >>173 そこは上のレスを書いた時点で確認できていました debug.log等での確認なので精度はわかりませんが >>174-176 Scene1 objA-A.cs:DontDestory ボタン→ *A.cs内の LoadScene("Scene1") 呼び出し objC-C.cs:DontDestory * +変数1 ↓ Scene2 objA-A.cs:DontDestory(Scene1から) メソッド@→A = Find("objB") →NG objC-C.cs:DontDestory(Scene1から) Aのメソッド@→A = Find("objB") →OK * Aのメソッド@→A = Find("objC") →OK です objB-B.cs ボタン→Aのメソッド@→A = Find("objB") →OK A.Csの中の処理流れは { LoadScene2; gameobject.find(Scene2のobjB) } でBが見つからない ということでした >メソッド@を呼ぶタイミングはどうやって遷移後に指定しているのでしょうか? まさか、LoadScene("Scene1")と同じフレーム内で呼んでいないですよね?? 恐らくそういうことだったんだと思います デバッガ使えば5分で分かった事を22時間も掛けて 大した効率だよな 以前、物理演算で、どういう処理だったか忘れたけど、 変数を物理演算に設定した直後に、 同じフレーム内でデバッグログに物理演算結果を出力しようとしたら、 変数が設定された結果が出せなくて、 Invokeで1フレーム後にデバッグログを呼び出したら、出力できたことがあるので、 一度フレームを走らせないといけないポイントで処理を連続してしまうのは、 結構ピットホールになりやすいかもしれない velocityの変更、positionの変更は、同じフレーム内で取得しても変更が反映されるけど、 例えばAddForceでは、たとえ1フレームで加速するForceMode.Impulseでも、 同じフレーム内ではまだvelocityは速度変更されておらず、 次のフレームでvelocityの変更が反映されるみたい でも、1フレームで移動を行うMovePositionは、 同じフレーム内でpositionの変更が反映されているという・・・ 全然関係ねえよ オブジェクトの生成と破壊は1フレーム掛かるから後処理は1フレーム待てと言われただろ シーンの呼び出しも同じって>169に言われてんだろ Invokeに1フレームかかるのか、1フレーム内で行う処理の量の問題なのか、 PCの性能の違いなのか、Unityのバージョンの違いなのかは不明だけど、 Rigidbody rb; void Start() { rb = GetComponent<Rigidbody>(); rb.angularVelocity = new Vector3(0, 0, 180 * Mathf.Deg2Rad); Invoke ("Log", 1); //Invoke("Log", 1 - Time.fixedDeltaTime); } void Log() { rb.angularVelocity = Vector3.zero; Debug.Log (rb.rotation); Debug.Log(rb.rotation.eulerAngles.z); } 本来、Z軸回転に180度/秒を入れて1秒間回転させて止めているわけだから、 Z軸の回転角は180が返るはずだけど、183.6という結果になってしまいます Invoke("A", 1 - Time.fixedDeltaTime)で1フレームは早く呼ぶと、180が返るから、 おそらくInvokeで呼ぶ場合は、1フレーム遅れるんでしょうね・・・ 外様が言うのは何だが コードも貼られて実に良スレだな ごめんなさい、原因が分かったよ Start()から、Log()を呼んでいるからでした・・・ Start()が終了するのに1フレームかかるみたいですね Rigidbody rb; void Start() { rb = GetComponent<Rigidbody>(); Start2() } void Start2() { rb.angularVelocity = new Vector3(0, 0, 180 * Mathf.Deg2Rad); Invoke ("Log", 1); } void Log() { rb.angularVelocity = Vector3.zero; Debug.Log (rb.rotation); Debug.Log(rb.rotation.eulerAngles.z); } StartからStart2を呼んで、Start2でangularVelocityを設定すれば、 Start2()からLog()を呼ぶ場合は、1秒指定のInvokeで、ぴったり180でした 物理はFixedUpdateのタイムスライスで動いてるから、 Update系とは時間の流れ違うだろ >>185 何の確認もせずに適当な思い込みで妄想しても 的外れなだけじゃないキムチ君w 毎回そんなアホな事をやってるから迷走すんだよ だったらStartとStart2に Debug.Log(Time.frameCount); で実実行時のフレームカウント出してみなよ 両方とも1って出るから 初心者です マテリアル作って保存したらファイル名が勝手に.matから.MATに変わってそのせいで警告が出てる??みたい パソコンのせいなんでしょうか 解決方法分かりませんか? 警告で The GUID for assets/アセット名.mat is already in ues by assets/アセット名.MAT. Assigning a new guid. エラーで Refresh case sensitivity failure. Assets:Assets/アセット名.mat ; Metafile:Assets/アセット名.mat.meta です どーせテクスチャをエクスプローラーからコピペして置き換えしたりしてんだろ >>189 君みたいな雑魚にUnityは使いこなせません 10年webで下積みしてから出直してきなさい >>192 いえ、普通にUnityエディタ内でmaterialを作成してます で真っ白なまま保存しても.matで保存されるんですが少しでも色を変えると保存した時に拡張子が.MATに変わってしまうんです >>194 ファイル消したりしてるでしょ 元ファイル消したのにmetaファイル消してないから名前が使えない だから別の名前使うね、ってなってる 生成も削除も移動も全てuntiy上で行ってください てか警告分の内容は理解してる? 中学英語の単語しか無いぞ 英語だからって毛嫌いせず読もうとしてみるの大事 だんだん慣れてくるから >>195 ありがとうございます、消してしまった気がします… こうなった場合の対処法ってどうすれば良いんですか?調べたんですけど「やらないように注意」みたいにしか書いてなくて… 警告文は1回Google翻訳に突っ込んだ時にルー語で翻訳されてキレそうになりましたw ちゃんと調べてある程度意味はわかりました >>197 基本的には不要なmetaファイルを消せばいい metaファイルの中を理解することは大変だけどmetaファイルの存在意義を理解することはそこまで難しくはないと思う ググればmetaファイルとはなんぞやって記事いっぱいあるからゆっくり読んでみればいい 全部が理解できなくてもいいから色んな記事を読むといい その過程で色んな知識がつくはず それを繰り返してればそのうち色んなことに対処できるようになる >>197 あと警告やエラー文は基本翻訳ソフトに突っ込まないほうがいい 単語の意味を調べる程度にしときな プログラム上で使われる意味合いと英文としての意味合いが異なって余計に混乱することになることが多いと思う GUIDみたいな略語なんかは翻訳仕様がないしね むしろ警告文をそのままググるほうが同じ問題で引っかかった人が解決法とか書いてくれてたりすることもあるからそういうふうに調べたほうがいいよ >>185 正確に言うと1フレーム内なんだけど、イベントが呼び出される順番の問題では? Awake Start FixedUpdate Update LastUpdate OnRenderImage OnGUI OnDestroy 同じフレーム内でも、Updateの前にFixedUpdateが来るから、 FixedUpdateの処理が1フレーム分先の内容になっているんだと思う >>198 >>199 わかりました、また調べてみます 色々とご教示ありがとうございました Start: Debug.Log Invoke A 0秒 Invoke B 0秒 FixedUpdate: Debug.Log Update: Debug.Log A: Debug.Log B: Debug.Log Invoke AA 0秒 AA: Debug.Log Time.frameCountをDebug.Logすると、全て1になるね (FixedUpdateとUpdateは初回のみDebug.Log) 実際にやってみると、Debug.Logされる順番は、 @Start AFixedUpdate BA CB DUpdate EAA の順になるので、 @Satrt→BAの間には、FixedUpdateが入っているので、 その間に物理演算の結果が更新されますが、 CB→EAAの間には、FixedUpdateが入らないので、 その間に物理演算の結果は更新されません 何もない所で誰も引っ掛からない孔明の罠に引っ掛かって 大騒ぎするのがキムチ >>177 他のオブジェクトのアクティブのtrueはfalse明らかにオブジェクトの量で変わる。 オブジェクトの量を増やすと、それまでtrueはfalseがちゃんと動いていたものが、動かなくなる。 その行の削除するとまたちゃんと動き出すことから、それは明らか。 それを回避するには、オブジェクトごとにスクリプトをつけてそれに書けばアクティブのtrueはfalseは確実に動く。 最近わかったんだが、Unityでは基本あるオブジェクトにつけたスクリプトから他のオブジェクトを動かしてはいけないんですね。 あくまでもそのオブジェクトにだけ関するスクリプトであるということ。 MonoBehaviorの「Mono」とはそういう意味なんですね。 NSObjectのNSはNextStepの略だしな ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる