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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
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);
}
を追加して、
スクリプトが機能しているかどうか、
オブジェクトを取得できているかどうかを確認してみてください
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);
}
を追加して、
スクリプトAが機能しているかどうか、
オブジェクトBを取得できているかどうかを確認してみてください

ボタンからの呼び出しが届いていないだけであれば、
上記でオブジェクトを取得できるはずですが・・・

シーン2では、
objA:DontDestroyによって、シーン1から持ち越し
objB
・・・が、Hierarchy上に同時に並んでいるわけですものね?
176
(1): 2017/12/28(木)00:34 ID:mH5YII84(3/8) AAS
各オブジェクトのそれぞれのスクリプトで行っていることが良く分からないのですが、

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")と同じフレーム内で呼んでいないですよね??
177
(1): 2017/12/28(木)00:51 ID:fQL7hUYb(1/2) AAS
>>169
レス遅れてすみません。
ありがとうございます。
とても参考になり、わかりやすかったです。

結果として、やったことは
SceneManager.LoadSceneの直後にSceneManager.sceneLoadedを行って
そのデリゲート処理完了後にそれぞれのテストメソッドを呼び出して参照したりしたところ
問題なく参照できました。
>>161にはレスしませんでしたが、当たりだった感じです。

>>170
なるほど。。。他の方々のレスを見る感じ、テスト環境でやっていたのかもしれないので
もしかするとオブジェクト等の量とかでかわるんですかね?

>>173
そこは上のレスを書いた時点で確認できていました
debug.log等での確認なので精度はわかりませんが
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
 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")と同じフレーム内で呼んでいないですよね??

恐らくそういうことだったんだと思います
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);
 //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フレーム遅れるんでしょうね・・・
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()
}
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でした
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ファイルとはなんぞやって記事いっぱいあるからゆっくり読んでみればいい

全部が理解できなくてもいいから色んな記事を読むといい
その過程で色んな知識がつくはず
それを繰り返してればそのうち色んなことに対処できるようになる
199
(1): 2017/12/28(木)12:24 ID:ghF3Rjv1(4/5) AAS
>>197
あと警告やエラー文は基本翻訳ソフトに突っ込まないほうがいい
単語の意味を調べる程度にしときな
プログラム上で使われる意味合いと英文としての意味合いが異なって余計に混乱することになることが多いと思う
GUIDみたいな略語なんかは翻訳仕様がないしね

むしろ警告文をそのままググるほうが同じ問題で引っかかった人が解決法とか書いてくれてたりすることもあるからそういうふうに調べたほうがいいよ
200
(1): 2017/12/28(木)12:36 ID:epGNZdyE(1/4) AAS
>>185

正確に言うと1フレーム内なんだけど、イベントが呼び出される順番の問題では?

Awake
Start
FixedUpdate
Update
LastUpdate
OnRenderImage
OnGUI
OnDestroy

同じフレーム内でも、Updateの前にFixedUpdateが来るから、
FixedUpdateの処理が1フレーム分先の内容になっているんだと思う
1-
あと 802 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.023s