[過去ログ] 【3Dゲームエンジン】Unity質問スレッド33 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
118
(3): 2017/12/26(火)20:26 ID:O9PscLer(1) AAS
シーン遷移時に引き継ぎたい変数をどの手段から選べばいいか迷ってるんですけど、

1 static変数として持つ
2 ScriptableObjectを作ってそこに一時保管しておく
3 dontdestroyで変数の入ったスクリプトがアタッチされているオブジェクトを壊さず持っていく
4 外部のdb等に一時保管しておく

辺りで迷ってるのですが、ケースバイケースだとは思うのですがどれがいいのかアドバイスお願いします。
1 なるべくstatic使わない方が初心者には良い とたまに聞きます。
省6
119: 2017/12/26(火)21:20 ID:ef3cEapS(6/11) AAS
当方、キムチでも、113でも、117でもありませんがw
120: 2017/12/26(火)21:27 ID:ef3cEapS(7/11) AAS
>>111

ボタンは引数なしで呼び出すだけだから簡単だけど、
スライダーは引数をどうやって受け取るかがわからなかったのでした

少なくとも公式のオンラインマニュアルからは探せず・・・
UIのインスペクターのリストをよーく見たら、
引数ありのメソッドと同名の、引く数なしのメソッドが上の方に見つかって解決したけど

>>99
省2
121
(2): 2017/12/26(火)21:32 ID:ycBgqB9O(1) AAS
>>118
何が消えてOKで、何が消えたら不味いのか、切り分けが分からない
例えば、セーブ/ロード付けるなら、シーン移動時にセーブとロード
するから結局同じ事じゃないの?
122
(1): 2017/12/26(火)21:36 ID:ef3cEapS(8/11) AAS
>>118

個人的には「3」を使ってます!

最初のLoad用のシーン0でフラグ管理用のオブジェクトを「DontDestroy」設定して、
その後はシーン1へ遷移して、以降はシーン0へは戻りません
(戻ると、「DontDestroy」設定を繰り返してしまうので・・・)

フラグ管理用のオブジェクトに載せたスクリプト内では、Start()内で、
ゲームを通してシーン間で共有する変数を全て「public」で宣言して初期値設定しています
省1
123: 2017/12/26(火)21:40 ID:ef3cEapS(9/11) AAS
>>121の言うように、
セーブありのRPGみたいな感じであれば、シーン変更前にセーブして、
シーン変更後にロードでも良い気がしますね

ゲーム終了後も保持したいなら、やはり外部保存だと思います

自分のは基本パスワード式のACTなので、
セーブシステムがないので、ゲーム内でのみ保持しています

パスワードの入力によって、フラグの初期値を変更して、
省2
124
(1): 2017/12/26(火)23:19 ID:V8TVTato(1) AAS
>>118
言うまでもないが可能不可能で言えばどれでも出来る
と言うか、シーンロードでDestroyされないヒエラルキーに依存しないものならなんでも保持は可能

適不適で言うなら
1.staticである必要性はない。staticにすることによる弊害の方が多いため不適
2.ScriptableObjectは実行時はReadOnlyなデータのバリエーションを扱うもの。使い方が間違っているため当然不適
3.揮発性の情報ならこれが最適※
省2
125: 2017/12/26(火)23:39 ID:ef3cEapS(10/11) AAS
staticにする必要性ってどこにあるんだろう??

FCやSFCで言うところの、RAMじゃなくてROM的な機能か?
126: 2017/12/26(火)23:51 ID:ed3wWG+q(1) AAS
えっ
127: 2017/12/26(火)23:58 ID:ef3cEapS(11/11) AAS
ゲーム内で使いまわす、汎用関数を定義するとか?
128: 2017/12/27(水)00:01 ID:iZzjfAdD(1) AAS
@コンソメ
Aコンスト
Bコンビニ
129: 2017/12/27(水)00:48 ID:4kYoBCMG(1/10) AAS
>>121-122
>>124

回答ありがとうざいました。
3でやってみようと思います。
130: 2017/12/27(水)01:16 ID:2+M/n1Lm(1/4) AAS
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)
を作ってみた
131: 2017/12/27(水)01:19 ID:2+M/n1Lm(2/4) AAS
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) {
省14
132: 2017/12/27(水)01:19 ID:2+M/n1Lm(3/4) AAS
 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;
省17
133: 2017/12/27(水)01:47 ID:+i3zpKSn(1/2) AAS
Stackoverflowみたいでいい感じじゃないの
134
(3): 2017/12/27(水)03:01 ID:4kYoBCMG(2/10) AAS
また質問なんですけど、
シーン遷移した後って前シーンからdontdestroyで持ってきたオブジェのスクリプト内で
getcomponentってできないですか?
gameobject.findで指定したオブジェクトを見つけるまでは大丈夫なのですが
ゲットコンポーネントするとNullReferenceExceptionが帰ってきます
同じシーン内に作ったなんらかからならちゃんと動くのですが
135: 2017/12/27(水)03:07 ID:4kYoBCMG(3/10) AAS
もしかするとfindも失敗してるのかもしれませんが、
sceneをパスに指定するようなことが必要になるのでしょうか?
dontrestroyしたオブジェクトはdontdestroyの子みたいな表示になりますし
共通シーン内でしか受け渡しできないとかなのでしょうか?
136
(1): 2017/12/27(水)12:43 ID:YC5nHwtt(1) AAS
全部自作した奴が偉い君は
ガワだけ張り替えて大当たりするようなソシャゲが
天下取ってる現状に発狂してそう
137: 2017/12/27(水)12:54 ID:WZqeNEin(1/6) AAS
>>103

UnityのUIのボタンのフォーカスとフォーカス対象の設定
外部リンク:gametukurikata.com
>あらかじめボタン1つがフォーカスされていないと他のボタンの選択が出来ません
>EventSystemに最初に選択するボタンの設定は出来ます

>>89 >>91

[UI] スライダーで変更した値を取得できない現象に対処した [Unity]
省9
138: 2017/12/27(水)12:57 ID:WZqeNEin(2/6) AAS
>>102

Unity : 3Dシーン内のCanvasが邪魔
外部リンク:indie-du.com
>UnityがCanvasの1ピクセルを1unitとして計算して表示
>1unitは1メートルなので、100ピクセルのUIは100メートルで描画
>Canvasの左下が原点(0, 0, 0)に合っている
139: 2017/12/27(水)14:56 ID:+i3zpKSn(2/2) AAS
見ての通り、質問せずに最初から自分でググってれば数分で解決している問題が多いな。
自分でググらないといけない事を人にググってもらってるだけなんだから。
140
(1): 2017/12/27(水)17:26 ID:u5IVM9F6(1) AAS
カンバス、そんなに邪魔?
消しちゃえばいいやん。必要な時にtrueにしてさ。
141: 2017/12/27(水)18:22 ID:WZqeNEin(3/6) AAS
>>140
そうだよね
GUIの表示だけoffにすれば済む話だよね
142
(1): 2017/12/27(水)18:41 ID:WZqeNEin(4/6) AAS
>>134
何をGetcomponentしたいの?
Sceneを指定したりはしないはず

ObjectはFindされているんでしょ?
obj内にObjectが入っている状態で、スクリプトをGetcomponentしたいなら、
スクリプト名 s = obj.GetComponent<スクリプト名>();

そのスクリプト内の変数をゲットしたいなら
省2
143
(1): 2017/12/27(水)18:54 ID:fBJY1RTE(1/6) AAS
やってみたがFindもGetComponentも普通に出来るよな

検索範囲は明示がないけどHierarchyウインドに表示されてる物は
全捜索するようで、シーンが分かれていようが全く関係がない
(Updateで使うなってのは、毎回Hierarchy全捜索されたら洒落にならん)
144
(2): 2017/12/27(水)18:56 ID:WZqeNEin(5/6) AAS
>>134
dontrestroyしたObjectに付いているスクリプト内で、
別のシーンにある他のObjectのコンポーネントを取得してみたけど、普通に受け取れたよ?

Scene0で、共有Objectをdontrestroyして、Scene1へ遷移
Scene1で、共有Objectのスクリプトから、
Scene1の別のObjectのtransfomを取得したら、普通に見れた

FindだとHierarchyにない別のSceneのObjectは検索できないはず
省3
145
(1): 2017/12/27(水)19:04 ID:WZqeNEin(6/6) AAS
>>134
Debug.Logで、FindしたGameObjectの中身を表示、
GetComponentした中身を表示してみることを勧めるよ

dontrestroyしたObjectに付いているスクリプトでも、
それ以外のもともとそのSceneにあったObjectに付いているスクリプトでも

まさか、dontrestroyしたObjectを出すためのSecneを省いて
テストプレイしているなんてことはないよね?
省3
146: 2017/12/27(水)19:40 ID:fBJY1RTE(2/6) AAS
>>144
>FindだとHierarchyにない別のSceneのObjectは検索できないはず
なるほどこういうことか
画像リンク[png]:imgur.com
transform.FindとGameObject.Findは検索範囲が違う

俺はGameObject.Findだから取れてるみたい
147: 2017/12/27(水)19:49 ID:y/zeZUnT(1/5) AAS
何百枚もカンバスあるの?
そんなに多くないから登録しときゃ見つかるでしょ。
148: 2017/12/27(水)19:54 ID:9tGAk59e(1/3) AAS
みんなカンバス読みなの?
キャンバス派は少数?
149: 2017/12/27(水)19:56 ID:y/zeZUnT(2/5) AAS
どっちでもいいなぁw
150
(1): 2017/12/27(水)19:58 ID:TaFXzcmh(1) AAS
英語だとカンバスが近いらしい。HowTo動画とか見てるとカンバスカンバス言われるからカンバス読みになるんじゃないの。
キャンバスは美術用語で、学校で習うのはキャンバス読みだと思う。
151: 名無し@キムチ 2017/12/27(水)20:09 ID:oeXBuupd(1/2) AAS
>>150
発音のことなのか・
英語でもキャンバスが近いよw
152: 2017/12/27(水)20:12 ID:9tGAk59e(2/3) AAS
別にどっちでも良いしどっちでも伝わるけど喋るときはどっちが多いのかなぁっていう素朴な疑問
ネイティブの発音はどうでも良い、カタカナ表記することが云々って話になるし
153: 2017/12/27(水)20:15 ID:Ojr+yz4V(1) AAS
>>136
できる/努力する奴ひっぱり下ろすのはゲスすぎないか
俺もわかんないまま借りてるけどどっか後ろめたいよ
154: 2017/12/27(水)20:26 ID:4kYoBCMG(4/10) AAS
>>142-145

レス遅くなりました。mm

dontrestroyしたオブジェクトにアタッチされたスクリプトから
遷移後のオブジェクトがfind出来てるか確認したところ、出来ていませんでした。
上で出来ていると勘違いしたのはfindの時点でエラーが帰ってこなかったからという単純な理由でした。

遷移後のシーン内に作ったオブジェクトのスクリプトから同じコードをコピペしてみましたが
こちらは普通にfind出来ていました
省2
155: 2017/12/27(水)20:36 ID:JxfZYfQR(1) AAS
香港人
「高卒だらけの日本人英語は、無いところにYの発音が入っちゃいます。土人丸出しです。」
156
(1): 2017/12/27(水)20:40 ID:4kYoBCMG(5/10) AAS
AA省
157: 2017/12/27(水)20:43 ID:4kYoBCMG(6/10) AAS
AA省
158: 2017/12/27(水)20:44 ID:y/zeZUnT(3/5) AAS
遷移処理はどこに遷移?
ところどころ足りないので補足よろ。
159: 2017/12/27(水)20:46 ID:y/zeZUnT(4/5) AAS
今来たw
160
(1): 2017/12/27(水)20:48 ID:4kYoBCMG(7/10) AAS
AA省
161
(1): 2017/12/27(水)21:03 ID:y/zeZUnT(5/5) AAS
遷移したあとの間が少ないとか。トンチンカンかw
162: 2017/12/27(水)21:17 ID:fBJY1RTE(3/6) AAS
>>160
失敗しないし普通に出来る
163
(1): 2017/12/27(水)21:22 ID:fBJY1RTE(4/6) AAS
てか、何で相互に見れるようにする必要があるの?
無駄が多すぎるだろ

DontDestroyOnLoadしたGameObjectを一方的に参照する
データ保管庫みたいに切り分けて使えばいいだけじゃない
164
(1): 2017/12/27(水)21:23 ID:4kYoBCMG(8/10) AAS
AA省
165
(1): 2017/12/27(水)21:26 ID:4kYoBCMG(9/10) AAS
>>163
遷移後にそのまま冒頭のイベント処理みたいなことをやりたくて
ならそのまま遷移処理の後に引き続きそのメソッド内である程度指示だして引継ぎすればよくね?
でやってみたら遷移後のシーンのオブジェクト参照ができなかったということから質問をしました
166: 2017/12/27(水)21:33 ID:fBJY1RTE(5/6) AAS
値の保持に使ってるんじゃないのかよ
何の意味があるんだそれ
167: 2017/12/27(水)21:39 ID:4kYoBCMG(10/10) AAS
上でも書いてるのですけど本来の目的はそれですが
試してみたところエラーが出たので質問をした ということです
168: 2017/12/27(水)21:48 ID:fBJY1RTE(6/6) AAS
objAを外から読み書きできるようにしたんだよね?
なんでobjAからobjBを見る必要があるのか分からない(出来るけど)
169
(2): 2017/12/27(水)22:33 ID:UZCkhUUp(1) AAS
>>165
シーン遷移時は、前のシーンのオブジェクトを破棄して新たなシーンのオブジェクトを構築する処理が走る
この処理が終わらないと新しいシーンのオブジェクトはFindでは見つからない

よって、新たなシーンのオブジェクトを見つけたければSceneManager.sceneLoadedデリゲートを使ってシーンのロードが完了してから処理を行う必要がある

ちなみにSceneManager.sceneLoadedはロードされたシーンのオブジェクトのAwakeが完了し、Startが呼ばれる前に呼ばれる事に注意
またこのデリゲートはどのシーンがロードされても呼ばれるから処理内でシーン毎に振り分けるかハンドラをつけ外しするなどの対処が必要
170
(1): 名無し@キムチ 2017/12/27(水)22:59 ID:oeXBuupd(2/2) AAS
>>164
遷移後のobjBをFind →失敗
当方の経験ではFindは、そのオブジェクトにアタッチされているスクリプトからでないと、失敗したり成功したりその時々によってさまざまだな。
171: 2017/12/27(水)23:23 ID:Y6rKayv0(1) AAS
なんだやっぱりキムチか
172: 2017/12/27(水)23:29 ID:9tGAk59e(3/3) AAS
プログラムが成功したり失敗したりなんて挙動するわけない
成功するのも失敗するのも理由がある
理由を理解できていないのにプログラムのせいにするプログラマー
173
(1): 2017/12/27(水)23:56 ID:2+M/n1Lm(4/4) AAS
>遷移後のシーンに配置されているボタンから、objAのメソッド@を呼び出す 

本当に呼び出せている?
Find以前の問題だったりして・・・
174
(1): 2017/12/28(木)00:13 ID:mH5YII84(1/8) AAS
ボタンからの入力を受けていないだけとかはないですか?
UIから、その該当スクリプトへのコールがかかっていないとか?

入力をInputにして、
if?(Input.GetKeyDown?(KeyCode.Space))?{
 Debug.Log("Input OK");
 GameObject A = GameObject.Find("objA");
 Debug.Log(A);
省4
175
(1): 2017/12/28(木)00:18 ID:mH5YII84(2/8) AAS
すみません、objAからobjBの方を見たいんですね

objAのスクリプトのUpdate()内に、
if (Input.GetKeyDown (KeyCode.Space)) {
 Debug.Log("Input OK");
 GameObject B = GameObject.Find("objB");
 Debug.Log(B);
}
省9
176
(1): 2017/12/28(木)00:34 ID:mH5YII84(3/8) AAS
各オブジェクトのそれぞれのスクリプトで行っていることが良く分からないのですが、

Scene1
 objA-A.cs:DontDestory
  ボタン→LoadScene("Scene1")
 objC-C.cs:DontDestory

Scene2
省11
177
(1): 2017/12/28(木)00:51 ID:fQL7hUYb(1/2) AAS
>>169
レス遅れてすみません。
ありがとうございます。
とても参考になり、わかりやすかったです。

結果として、やったことは
SceneManager.LoadSceneの直後にSceneManager.sceneLoadedを行って
そのデリゲート処理完了後にそれぞれのテストメソッドを呼び出して参照したりしたところ
省8
178: 2017/12/28(木)00:56 ID:fQL7hUYb(2/2) AAS
>>174-176

Scene1
 objA-A.cs:DontDestory
  ボタン→ *A.cs内の LoadScene("Scene1") 呼び出し
 objC-C.cs:DontDestory * +変数1

Scene2
省15
179: 2017/12/28(木)01:23 ID:GhM3Lpso(1) AAS
デバッガ使えば5分で分かった事を22時間も掛けて
大した効率だよな
180: 2017/12/28(木)01:43 ID:mH5YII84(4/8) AAS
以前、物理演算で、どういう処理だったか忘れたけど、
変数を物理演算に設定した直後に、
同じフレーム内でデバッグログに物理演算結果を出力しようとしたら、
変数が設定された結果が出せなくて、
Invokeで1フレーム後にデバッグログを呼び出したら、出力できたことがあるので、

一度フレームを走らせないといけないポイントで処理を連続してしまうのは、
結構ピットホールになりやすいかもしれない
181: 2017/12/28(木)02:14 ID:mH5YII84(5/8) AAS
velocityの変更、positionの変更は、同じフレーム内で取得しても変更が反映されるけど、
例えばAddForceでは、たとえ1フレームで加速するForceMode.Impulseでも、
同じフレーム内ではまだvelocityは速度変更されておらず、
次のフレームでvelocityの変更が反映されるみたい

でも、1フレームで移動を行うMovePositionは、
同じフレーム内でpositionの変更が反映されているという・・・
182: 2017/12/28(木)02:20 ID:aEDu9yFW(1) AAS
全然関係ねえよ
オブジェクトの生成と破壊は1フレーム掛かるから後処理は1フレーム待てと言われただろ
シーンの呼び出しも同じって>169に言われてんだろ
183: 2017/12/28(木)02:49 ID:mH5YII84(6/8) AAS
Invokeに1フレームかかるのか、1フレーム内で行う処理の量の問題なのか、
PCの性能の違いなのか、Unityのバージョンの違いなのかは不明だけど、

Rigidbody rb;
void Start() {
 rb = GetComponent<Rigidbody>();
 rb.angularVelocity = new Vector3(0, 0, 180 * Mathf.Deg2Rad);
 Invoke ("Log", 1);
省11
184: 2017/12/28(木)02:51 ID:ZI2vMH5M(1/2) AAS
外様が言うのは何だが
コードも貼られて実に良スレだな
185
(2): 2017/12/28(木)03:22 ID:mH5YII84(7/8) AAS
ごめんなさい、原因が分かったよ

Start()から、Log()を呼んでいるからでした・・・
Start()が終了するのに1フレームかかるみたいですね

Rigidbody rb;
void Start() {
 rb = GetComponent<Rigidbody>();
 Start2()
省12
186
(1): 2017/12/28(木)03:24 ID:yHTFG4+0(1) AAS
物理はFixedUpdateのタイムスライスで動いてるから、
Update系とは時間の流れ違うだろ
187
(1): 2017/12/28(木)04:43 ID:NrJHfHro(1) AAS
>>185
何の確認もせずに適当な思い込みで妄想しても
的外れなだけじゃないキムチ君w
毎回そんなアホな事をやってるから迷走すんだよ

だったらStartとStart2に
Debug.Log(Time.frameCount);
で実実行時のフレームカウント出してみなよ
省1
188: 2017/12/28(木)07:27 ID:yfK1iHQW(1) AAS
161最強!w
189
(1): 2017/12/28(木)09:26 ID:fukyqugk(1/5) AAS
初心者です
マテリアル作って保存したらファイル名が勝手に.matから.MATに変わってそのせいで警告が出てる??みたい
パソコンのせいなんでしょうか
解決方法分かりませんか?
190: 2017/12/28(木)09:35 ID:PGevnyVZ(1) AAS
警告文そのものを貼ってください
191: 2017/12/28(木)09:53 ID:fukyqugk(2/5) AAS
警告で
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
です
192
(1): 2017/12/28(木)10:09 ID:ZI2vMH5M(2/2) AAS
どーせテクスチャをエクスプローラーからコピペして置き換えしたりしてんだろ
193: 2017/12/28(木)10:24 ID:o+JGejkD(1) AAS
>>189
君みたいな雑魚にUnityは使いこなせません
10年webで下積みしてから出直してきなさい
194
(1): 2017/12/28(木)10:45 ID:fukyqugk(3/5) AAS
>>192
いえ、普通にUnityエディタ内でmaterialを作成してます
で真っ白なまま保存しても.matで保存されるんですが少しでも色を変えると保存した時に拡張子が.MATに変わってしまうんです
195
(1): 2017/12/28(木)11:13 ID:ghF3Rjv1(1/5) AAS
>>194
ファイル消したりしてるでしょ
元ファイル消したのにmetaファイル消してないから名前が使えない
だから別の名前使うね、ってなってる
生成も削除も移動も全てuntiy上で行ってください
196: 2017/12/28(木)11:16 ID:ghF3Rjv1(2/5) AAS
てか警告分の内容は理解してる?
中学英語の単語しか無いぞ
英語だからって毛嫌いせず読もうとしてみるの大事
だんだん慣れてくるから
197
(2): 2017/12/28(木)12:01 ID:fukyqugk(4/5) AAS
>>195
ありがとうございます、消してしまった気がします…
こうなった場合の対処法ってどうすれば良いんですか?調べたんですけど「やらないように注意」みたいにしか書いてなくて…

警告文は1回Google翻訳に突っ込んだ時にルー語で翻訳されてキレそうになりましたw
ちゃんと調べてある程度意味はわかりました
198
(1): 2017/12/28(木)12:18 ID:ghF3Rjv1(3/5) AAS
>>197
基本的には不要なmetaファイルを消せばいい

metaファイルの中を理解することは大変だけどmetaファイルの存在意義を理解することはそこまで難しくはないと思う
ググればmetaファイルとはなんぞやって記事いっぱいあるからゆっくり読んでみればいい

全部が理解できなくてもいいから色んな記事を読むといい
その過程で色んな知識がつくはず
それを繰り返してればそのうち色んなことに対処できるようになる
1-
あと 804 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.029s