ゲーム内で複数同時にLineRendererを設定した同じオブジェクトを使用したいと考えています。そこで単純にLineRendererの設定を行うスクリプトにオブジェクト生成プログラムから設定を行うために必要な情報を送る、という形で組んでみたのですが、以下のような問題が起きています。
####問題について
長押しの音符を作るために始点を生成、同時に終点を生成する形を取っていますが、これが同じタイミングで複数同時に始点を作る処理を行うと別のレーンに作られた終点がスクリプトの処理上後から生成されている始点へLineを伸ばしてしまい、複数本を別々のレーンに一直線で並べることができていません。
・LineRenderer側ではノーツ生成プログラムから生成された始点の情報を取得し、始点のx座標を基にしてLineを設定します。
・タイミングデータを修正して片方を0.1秒ずらしてもこの現象が起こったため、フレーム単位で計算されていると考えました。
<ノーツ生成スクリプト(該当部分)>
C#
1void TestLongset(int x,GameObject lnotes,GameObject lnotee,float tim1,float tim2) //x:レーン番号 2 { 3 int basyoiti = 1; //オブジェクトの生成位置 4 float settime = 0; 5 switch (x) 6 { 7 case 0: 8 basyoiti = -4; 9mk = Instantiate(lnotes, new Vector3(basyoiti, 5.7f, -1), Quaternion.identity) as GameObject; 10//mkはpublc型で、LineRendererスクリプトで参照する始点オブジェクト 11 mkl = Instantiate(lnotee, new Vector3(basyoiti, 5.7f + settime, -1), Quaternion.identity) as GameObject; 12 lonx = mk.transform.position.x; //LineRendererのスクリプトで使用 13 break; 14 //以下caseは似た処理だけなので割愛 15 //mk2~mk5というpublic型GameObjectを個別に使用して同型の処理 16 } 17 nowx = x; //LineRendererスクリプト側で使用 18 }
<LineRendererの設定を行うスクリプト(該当部分)>=>prefab化されたオブジェクトに設定
C#
1//Start()内でこの処理を行う 2//_tesnotegoは工場スクリプトの情報を取得するtestnotenagasi型の変数 3 end2 = _tesnotego.mk; //mkの始点オブジェクト情報を取得 4 end3 = _tesnotego.mk2; //以下全て同様 5 end4 = _tesnotego.mk3; 6 end5 = _tesnotego.mk4; 7 end6 = _tesnotego.mk5; 8//以下、レーン位置によって個別のものを使用し、始点にLineの終点を合わせる
このようにして始点オブジェクトそのものの格納を分離しても処理上後から出てくる始点に対して両方のLineが伸びてしまいます。
(処理構造は左から右へ進んでいますので、右にある音符が同一フレーム内で後から生成されたものです)
####実現したい事
長押しの帯を別々のレーンを流れる始点へ個別に合わせることですが、同時にできればこのまま1つのスクリプトでまとめてしまいたいと考えています。一番手っ取り早いのはスクリプトそのものを個別化することですが、手間がかかる上最終手段として考えているため、どちらのスクリプトを修正すればいいかで悩み続けています。
使用環境 Unity2019.1.5f1 Visual Studio
あなたの回答
tips
プレビュー