[過去ログ]
【3Dゲームエンジン】Unity質問スレッド33 (1002レス)
【3Dゲームエンジン】Unity質問スレッド33 http://mevius.5ch.net/test/read.cgi/gamedev/1513643755/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
174: 名前は開発中のものです。 [sage] 2017/12/28(木) 00:13:29.64 ID:mH5YII84 ボタンからの入力を受けていないだけとかはないですか? UIから、その該当スクリプトへのコールがかかっていないとか? 入力をInputにして、 if?(Input.GetKeyDown?(KeyCode.Space))?{ Debug.Log("Input OK"); GameObject A = GameObject.Find("objA"); Debug.Log(A); } を追加して、 スクリプトが機能しているかどうか、 オブジェクトを取得できているかどうかを確認してみてください http://mevius.5ch.net/test/read.cgi/gamedev/1513643755/174
175: 名前は開発中のものです。 [sage] 2017/12/28(木) 00:18:44.79 ID:mH5YII84 すみません、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上に同時に並んでいるわけですものね? http://mevius.5ch.net/test/read.cgi/gamedev/1513643755/175
176: 名前は開発中のものです。 [sage] 2017/12/28(木) 00:34:38.37 ID:mH5YII84 各オブジェクトのそれぞれのスクリプトで行っていることが良く分からないのですが、 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")と同じフレーム内で呼んでいないですよね?? http://mevius.5ch.net/test/read.cgi/gamedev/1513643755/176
180: 名前は開発中のものです。 [sage] 2017/12/28(木) 01:43:55.44 ID:mH5YII84 以前、物理演算で、どういう処理だったか忘れたけど、 変数を物理演算に設定した直後に、 同じフレーム内でデバッグログに物理演算結果を出力しようとしたら、 変数が設定された結果が出せなくて、 Invokeで1フレーム後にデバッグログを呼び出したら、出力できたことがあるので、 一度フレームを走らせないといけないポイントで処理を連続してしまうのは、 結構ピットホールになりやすいかもしれない http://mevius.5ch.net/test/read.cgi/gamedev/1513643755/180
181: 名前は開発中のものです。 [sage] 2017/12/28(木) 02:14:32.76 ID:mH5YII84 velocityの変更、positionの変更は、同じフレーム内で取得しても変更が反映されるけど、 例えばAddForceでは、たとえ1フレームで加速するForceMode.Impulseでも、 同じフレーム内ではまだvelocityは速度変更されておらず、 次のフレームでvelocityの変更が反映されるみたい でも、1フレームで移動を行うMovePositionは、 同じフレーム内でpositionの変更が反映されているという・・・ http://mevius.5ch.net/test/read.cgi/gamedev/1513643755/181
183: 名前は開発中のものです。 [sage] 2017/12/28(木) 02:49:46.90 ID:mH5YII84 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フレーム遅れるんでしょうね・・・ http://mevius.5ch.net/test/read.cgi/gamedev/1513643755/183
185: 名前は開発中のものです。 [sage] 2017/12/28(木) 03:22:50.01 ID:mH5YII84 ごめんなさい、原因が分かったよ 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でした http://mevius.5ch.net/test/read.cgi/gamedev/1513643755/185
215: 名前は開発中のものです。 [sage] 2017/12/28(木) 23:00:56.25 ID:mH5YII84 >>187 >>200 全部1フレーム内での出来事だったのか >>186 >>200 呼び出される順序の問題で、物理演算をまたいでしまうと、 その時点で1フレーム分の内容のズレが出ちゃうのが真相か・・・ http://mevius.5ch.net/test/read.cgi/gamedev/1513643755/215
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.653s*