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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Unity

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

Q&A

1回答

651閲覧

unity ボールの軌道予測点がうまくできない

ryosakanazuki

総合スコア6

Unity3D

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Unity

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

0グッド

0クリップ

投稿2018/05/09 19:57

unityで、変化球シミュレーターをjavascriptで作っています。
その上で、揚力などを設定したら、その軌道予測点が出るようにしたいのですが
実行すると、フリーズしてしまいます。どうすればよいでしょうか?

原因と思われる部分

js

1if(count == false){ 2 if(create == true){ 3 for(var i=0; i < hittime;){ 4 var ztrail = (az*i*i)/2; 5 var ytrail = yball + (v0y* i)+ (ay*i*i)/2- (9.8*i*i)/2; 6 var xtrail = xball - (v0x* i - (drag*i*i)/2); 7 var trail = Instantiate(prefab, new Vector3 (xtrail,ytrail,ztrail), Quaternion.identity); 8 i += 0.05; 9 } 10 create = false; 11 } 12

全文

js

1#pragma strict 2 3var target; 4var xtarget:float; 5var ball; 6var xball:float; 7var yball:float; 8var prefab:GameObject; 9 10var throwball = true; 11var now:float = 0; 12var count = false; 13var create = true; 14var speed:int; //球速 km/h 15var xspeed:float; 16var v0angle:float; 17var distance:float; //マウンドからホームベースまで 18 19var lift:float; //揚力 20var angle:int; //軸の角度  水平 0° 21var ay:float; 22var az:float; 23 24var drag:float; //抗力 25var diameter:float; //直径 26var square:float; //抗力 面積 27var fluid:float = 1.2; //流体密度 28var cd:float = 0.38; //抗力係数 29 30function Start () { 31 target = GameObject.Find("target").transform.position; 32 xtarget = GameObject.Find("target").transform.position.x; 33 ball = transform.position; 34 xball = transform.position.x; 35 yball = transform.position.y; 36 distance = Mathf.Abs(xtarget- xball); 37 xspeed = (speed*10)/36; 38 diameter = transform.localScale.z; 39 GetComponent.<Rigidbody>().useGravity = false; 40 square = (diameter* diameter* Mathf.PI)/ 16; 41 drag = ((((speed*10)/36)* ((speed*10)/36))* fluid* square* cd)/2; 42 az = lift * (Mathf.Sin(angle * (Mathf.PI / 180))) * (-1); 43 ay = lift * (Mathf.Cos(angle * (Mathf.PI / 180))); 44} 45 46function Update () { 47 yball = transform.position.y; 48 49 if(count == true){ 50 if(yball < 0){ 51 count = false; 52 throwball = true; 53 transform.position = ball; 54 GetComponent.<Rigidbody>().useGravity = false; 55 GetComponent.<Rigidbody>().isKinematic = true; 56 GetComponent.<Rigidbody>().isKinematic = false; //ボールを初期位置へ 57 now = 0; 58 GetComponent.<TrailRenderer>().Clear(); 59 } 60 61 } 62 now += Time.deltaTime; 63} 64 65function FixedUpdate () { 66 67 var t = Time.deltaTime; 68 var v0x = Mathf.Cos(v0angle * (Mathf.PI / 180)) * ((((speed*10)/36)*(GetComponent.<Rigidbody>().mass))/t); //addforce計算 69 var v0y = Mathf.Sin(v0angle * (Mathf.PI / 180)) * ((((speed*10)/36)*(GetComponent.<Rigidbody>().mass))/t); 70 var hittime = (xspeed- Mathf.Sqrt((xspeed*xspeed)-(2*distance*drag)))/drag; 71 72 if (Input.GetKey(KeyCode.S)){ 73 if(throwball == true){ 74 GetComponent.<Rigidbody>().AddForce(new Vector3(-v0x, v0y, 0)); //投球 75 GetComponent.<Rigidbody>().useGravity = true; 76 throwball = false; 77 count = true; 78 create = false; 79 } 80 } 81 82 83 if(count == true){ 84 GetComponent.<Rigidbody>().AddForce(new Vector3(drag, ay, az)); 85 } 86 87 if(count == false){ 88 if(create == true){ 89 for(var i=0; i < hittime;){ 90 var ztrail = (az*i*i)/2; 91 var ytrail = yball + (v0y* i)+ (ay*i*i)/2- (9.8*i*i)/2; 92 var xtrail = xball - (v0x* i - (drag*i*i)/2); 93 var trail = Instantiate(prefab, new Vector3 (xtrail,ytrail,ztrail), Quaternion.identity); 94 i += 0.05; 95 } 96 create = false; 97 } 98 99 } 100 101} 102

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

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

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

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

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

guest

回答1

0

抜粋いただいた「原因と思われる部分」のiの型を出力してみたところ、どうやら整数型になっているようです。
i += 0.05の後もiが0のままになっており、いつまでもループが終わらないのではないか...と思ったのですが、ループ部分をfor(var i=0.0; i < hittime;){にすると変化はあるでしょうか?

投稿2018/05/09 21:35

Bongo

総合スコア10807

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問