SetPosition(float x, float y, float z)と SetLanePosition(float lane) を使おうと思ったのですが、記述式が間違っているせいか、全然動作しないです... function onSpawnNote(noteController) if noteController.NoteIndex == 2610 then noteController:SetLanePosition(-2) end
ゲーム側の方でノーツのx,y,z座標位置が上書きされてしまうため、 EnableDefaultMove(false) を使用してゲーム側のノーツ移動を無効化したあとに Lua側で毎フレーム位置を更新する必要があります。 動作確認したコードになります。
function onloaded() -- X座標を動かす場合のAutoPlay対応 GAMESTATE:SetAutoType(1) end --- ノーツが生成された時に1フレームだけ呼ばれるイベント関数 --- @param noteController CS.NoteController --- function onSpawnNote(noteController) -- 指定したノーツ番号に対してのみ処理を行う if noteController.NoteIndex == 1 then -- ゲーム側のノーツ移動を無効化 noteController:EnableDefaultMove(false) -- ノーツの初期位置を設定 noteController:SetLanePosition(-2) -- 値が-2の場合、ノーツはレーン外に配置される -- ノーツの位置を更新するためのデリゲートを設定 noteController:SetDelegate(onUpdateNotePosition) end end -- ノーツが表示されている間、毎フレームノーツの位置を更新する function onUpdateNotePosition(noteController) -- 現在の曲の拍位置を取得 local songBeat = GAMESTATE:GetSongBeat() -- ノーツの位置を現在の拍位置に合わせて更新 noteController:SetBeatPosition(noteController.JustBeat - songBeat) end