質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

3528閲覧

Unityの物理演算の再現性・処理落ち

ab7

総合スコア7

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/06/15 15:55

前提・実現したいこと

Unityで投球の軌道の再現を行っています。

発生している問題・エラーメッセージ

コマ送りをしたときと、再生したときで球体の軌道が異なってしまいます。
PCのグラフィック性能が低いため処理落ちが発生しているのかもしれない、と思ったのですが、どのように確認するとよいのでしょうか。もしくは、他の原因があるのでしょうか。
また、処理落ちが原因であれば、処理を一定にする方法はあるでしょうか。

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class normalball : MonoBehaviour 6{ 7 public Rigidbody rb; 8 private float speed, power, anglex, anglez; 9 private float vel; 10 private float revf, revr; 11 private float Forcelf, Forcelr; 12 // Start is called before the first frame update 13 void Start() 14 { 15 speed = 154.0f; 16 //球速[km/h] 17 power = 0.27862f * speed; 18 anglex = -25.4f; 19 //プラスでフォーク方向[cm] 20 anglez = -6.0f; 21 //プラスでシュート方向[cm] 22 rb = GetComponent<Rigidbody>(); 23 rb.AddForce( 24 (transform.forward) * power * 0.9984f + (transform.right) * power * -0.0246f + (transform.up) * power * -0.0246f, ForceMode.VelocityChange); 25 //初速がspeedになるように力を与える 26 } 27 28 // Update is called once per frame 29 void Update() 30 { 31 vel = rb.velocity.z; 32 revf = 3 * anglex * (vel / speed); 33 revr = 3 * anglez * (vel / speed); 34 Forcelf = -1.0f / 8.0f * Mathf.PI * Mathf.PI * 1.208f * Mathf.Pow(0.073f, 3.0f) * vel * revf; 35 Forcelr = 1.0f / 8.0f * Mathf.PI * Mathf.PI * 1.206f * Mathf.Pow(0.073f, 3.0f) * vel * revr; 36 rb.AddForce( 37 (transform.up) * Forcelf, ForceMode.Force); 38 rb.AddForce( 39 (transform.right) * Forcelr, ForceMode.Force); 40 //マグヌス効果を考慮 41 } 42} 43

補足情報

当初回転数でマグヌス効果を発生させようとしたのですが、回転数が多いためかうまく機能しませんでした。こちらも処理の問題でしょうか。

環境

Unity 2019.4.0f1 Personal
OS: Windows10 Home
CPU: Core i7-8565U 1.80GHz
RAM: 8GB
GPU: Intel UHD Graphics 620


よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

物理演算に関する処理にはFixedUpdateを利用しましょう。
https://docs.unity3d.com/ja/current/ScriptReference/MonoBehaviour.FixedUpdate.html

Updateだとフレームが飛んだ際の処理が飛ばされますが
FixedUpdateだと経過した時間ベースで処理が行われます

投稿2020/06/16 00:25

uskey512

総合スコア144

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ab7

2020/06/17 06:57

ありがとうございます。解決しました。
uskey512

2020/06/17 13:29

もんだいなさそうであればベストアンサーおねがいします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問