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
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。