長押し音符の生成をInstantiateで行う時LineRendererの設定も行ったノーツを生成しているのですが、public型で設定したGameObjectに終点を指定すると、始点はLineRendererを持つオブジェクトになるのに対し終点がその設定したオブジェクトの位置に固定されてしまいます。
=>セットしたオブジェクトの座標が(0,0)の時、始点にしたいオブジェクトの生成位置が(0,5.7f)の時でもLineの終点は(0,0)を参照しているため、これを(0,5.7f)に生成され下に移動していくオブジェクトの位置へ常に設定できるようにしたい
###できていること
・LineRendererで初めからシーンにある場合ならば長押し始点扱いのオブジェクトへ常に終点が追従するようにできています。
・始点オブジェクトが特定座標付近に来た時ボタンを押すことで、その座標を予め用意しておいた空のオブジェクトの座標へ固定する(判定される)仕組みはできています。押さなかった場合は画面外へ始点オブジェクトを移動し、長押しの帯が通過しているように見せる処理も組めています。
###実現したいこと・知りたいこと
LineRendererが入っているオブジェクトを始点、長押し開始の音符を終点として線を引く時、Lineの終点座標に生成された長押し開始のオブジェクトの座標を常に指定できるようにしたいです。
=>Instantiateで生成したprefabの現在位置をLineRendererの座標指定に使用したい
他のゲームを作る際にも役立つはずなので特に知りたいと思っています。
###試したこと
・Lineの始点終点を設定するスクリプトから音符を流すスクリプトで生成された始点オブジェクトを取得し、それの座標を参照する
エラー:NullReferenceException: Object reference not set to an instance of an object
=>Lineの始点終点を後ろに続く/!/のコードで設定できなくなりました
C#
1(LineRendererをもつオブジェクト側の設定 Update()内処理) 2longend2 = _tesno.mkl; 3//_tesnoにノーツ生成スクリプトの情報を取得させ、public型のmklに生成されたオブジェクトを入れる 4//GameObject型のlongend2にmklへ入れられた始点役オブジェクトの情報を追加する 5 6/*!*/var positions2=new Vector3[] 7 { 8 new Vector2(gameObject.transform.position.x,gameObject.transform.position.y), 9 new Vector2(longend2.transform.position.x, longend2.transform.position.y) 10 }; 11//longend2(始点扱いオブジェクト)の座標を毎フレーム取得
・逆にLineを設定しているスクリプトへ工場スクリプトから、始点扱いオブジェクトを生成した時にオブジェクト情報を移動させる
エラー:NullReferenceException: Object reference not set to an instance of an object
=>始点オブジェクトが無限生成されてしまう(始点オブジェクトの生成タイミングは曲開始からの時刻で始点生成スクリプトにて決められています)
C#
1(ノーツ生成側の処理) 2 _long.longend2 = mk; 3//LineRendererの終点にInstantiateで生成したオブジェクトを指定するため、GameObject型のmkを指定 4 5(LineRenderer側のUpdate関数内処理) 6var positions2=new Vector3[] 7 { 8 new Vector2(gameObject.transform.position.x,gameObject.transform.position.y), 9 new Vector2(longend2.transform.position.x, longend2.transform.position.y) 10 }; 11 //LineRendererをもつオブジェクトを線の始点とし、longend2を線の終点にする 12 //longend2に生成された始点役オブジェクトの座標を指定し、移動に合わせて線も移動する
使用環境はUnity2019.1.5.f1とVisual Studioになります。
・2021/02/23追記 エラーメッセージとエラーを起こしているコードの記載を行いました。
・2021/02/25追記 エラーメッセージについて、工場役スクリプトをもつオブジェクトを線生成スクリプトへpublic型GameObjectに設定し参照することで、両方同時に解決できました。しかしLineの終点位置をprefabの現在座標に設定し、常時始点と終点間にLineを生成する試みは上手く行っていません。
=>今回は始点生成位置がいつも5.7fだったため、そこから毎フレーム移動速度である0.11fを引き算した数値をLineの終点にすればよかっただけでした。
あなたの回答
tips
プレビュー