[過去ログ] 【3Dゲームエンジン】Unity質問スレッド33 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
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")と同じフレーム内で呼んでいないですよね??
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の変更が反映されているという・・・
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フレーム遅れるんでしょうね・・・
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でした
215: 2017/12/28(木)23:00 ID:mH5YII84(8/8) AAS
>>187 >>200

全部1フレーム内での出来事だったのか

>>186 >>200

呼び出される順序の問題で、物理演算をまたいでしまうと、
その時点で1フレーム分の内容のズレが出ちゃうのが真相か・・・
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.027s