LuaAPIの仕様
はじめに
こちらは譜面制作において、自身の書いたプログラムを実行させたい方向けの記事になっております。
.dlファイルの#LUA
タグにluaファイルを指定することでゲームプレイ時にluaを実行します。
(Luaファイルの拡張子は「.lua」推奨です。)
これにより、要素を操作したり画像を追加したりして所謂「Modchart」を作成できます。
Luaを書くに当たって、下記の知識が混合します。
- ・Luaの文法
- ・UnityAPI
- ・ダンカグライクのLuaAPI(このページ)
コーディングについて
まず、Windows のメモ帳ではなく、より優れたテキストエディタを使用する必要があります。 個人的には「Visual Studio Code」をお勧めします。 なぜなら、本当に便利な機能とショートカットがあるからです。 iPadやiPhoneで使用できるブラウザ版VSCodeもあります。 また、Notepad++やSublimeTextもあるので、ご自身が使いやすいものをお使いください。
VSCode拡張機能の導入について
バージョン0.1.0 更新日時: 2024/11/11
「DankagLike LuaAPI」を公開しました。(初版 2023/08/25)インストール方法はzipに同梱しています。
[機能]
- ・入力補完
- ・型チェック
- ・イベント関数、グローバル変数のスニペット
- ・ホバーするとドキュメントが表示されます
[その他]
- ・「lua-language-server」の依存インストール
- ・型定義ファイルを指定する設定項目は拡張機能が行ってくれます
Luaチュートリアル
サンプルコード & スライド資料
準備中です
■ Luaから使用できるUnityEngineのクラスについて
基本的にはCS.UnityEngine.(クラス名)
で使用できます。
型を変数に入れておく
毎回名前空間付きの型を指定するのは面倒なので、以下のように型を変数に入れて使うことができます。-- 型を変数に入れておく
local GameObject = CS.UnityEngine.GameObject
local gameObj = GameObject()
local gameObj2 = GameObject("example")
static変数、static関数
static変数へのアクセス、static関数の呼び出しは以下のように行います。local UnityEngine = CS.UnityEngine
local Color = UnityEngine.Color
local GameObject = UnityEngine.GameObject
-- static変数にアクセス
local white = Color.white
print(white)
-- static関数呼び出し
local lane = GameObject.Find("Lane")
print(lane)
メンバにアクセス
メンバへのアクセスは以下のように行います。メンバ関数の呼び出しはコロン「:」になります。
local UnityEngine = CS.UnityEngine
local GameObject = UnityEngine.GameObject
local Vector3 = UnityEngine.Vector3
-- 譜面プレビューで「D」キーを押すとシーンのGameObjectの名前を確認できます
local laneObj = GameObject.Find("Lane")
-- メンバ変数
laneObj.transform.localPosition = Vector3.right
-- メンバ関数
laneObj:SetActive(false)
型を取得
LuaからC#の型を取得するには以下のようにします。local type = typeof(CS.UnityEngine.MeshRenderer)
print(type)
UnityAPIの詳細についてはUnityスクリプトリファレンスをご参考下さい。コードストリッピングによってアプリで使用していないメソッドやクラスがビルドに含まれないため、一部使用できないUnityEngineのクラスがあるようです。
■ Unity(C#)とLuaの型の比較
UnityAPIやLuaAPIを呼び出す際には対応した型に変換されます。
C# | Lua |
---|---|
void | 戻り値なし |
int (整数) | number(64bit) |
float (実数32bit) | number |
double (実数64bit) | number |
string (文字列) | string |
bool (真偽値) | boolean |
Action | function |
null | nil |
[] (配列) | 配列としてのテーブル |
■ デバッグについて
画面上部にメッセージを表示する機能を用意しています。
変数の中身を確認したり、コードに到達しているか確認できます。
SCREENMAN:SystemMessage("表示したいもの")
また、譜面プレビューのバージョンv1.36以降にデバッグツールを追加しています。「1」~「4」キーでデバックメニューを開いて、
Consoleを選ぶとシステムのログが確認できます。
Consoleに出力するのみであればLuaの標準出力のprint関数もあります。
print("表示したいもの")
譜面プレビューのゲーム画面で「D」キーを押すと、ゲーム内の要素やパラメータのウィンドウが表示されます。
Luaから操作した時の様子を確認できます。
初回表示時に時間が掛かるので、開始を押す前か、ポーズしてから開くと良さそうです。
Luaの実行中にエラーが起きた際にはダイアログが表示されます。
メッセージ内容からエラーの発生したLuaの行番号が出力されるため、
これを手掛かりに修正を行なえます。
■ LuaからLuaファイルを読み込む
require "mylib.lua"
外部から読み込むLuaファイルに汎用処理を記述して、それを呼び出して使えるようにすると便利です。requireを使用して譜面フォルダからの相対パスの文字列を指定します。
拡張子が付いていない文字列を渡すと.luaが付いているものとして解釈されます。
■ コルーチンについて
コルーチン(Coroutine)とは、関数を途中で中断・再開できる機能を持つ構造の名称です。
それぞれの関数を中断したいところで、coroutine.yield関数を記述して処理を中断し、 再開する場合はそこから処理を続行します。coroutine.yield関数に渡す引数によって再度呼び出されるタイミングを変更します。
コルーチンは非同期処理を行うための方法の一つになります。
記述例.lua
local cs_coroutine = require "cs_coroutine"
Time = CS.UnityEngine.Time
-- コルーチンとして実行する関数
function CountTimeRoutine(waitTime, message)
local elapseTime = 0.0
while (elapseTime < waitTime) do
elapseTime = elapseTime + Time.deltaTime
SCREENMAN:SystemMessage(elapseTime)
-- 1フレーム待機
_coroutine.yield(nil)
end
SCREENMAN:SystemMessage(message)
end
function start()
-- コルーチン開始
_coroutine = cs_coroutine.start(CountTimeRoutine, 5, "Finish Coroutine")
end
LuaからUnityのコルーチンを実行できるようにする機能をrequireを使用して読み込みます。cs_coroutineのファイルは事前にアプリ内に組み込まれています。
local cs_coroutine = require "cs_coroutine"
コルーチンとして扱う関数内でcoroutine.yield()
を使用すると処理を中断します。 引数にはUnityのyield returnで返せる値を入れることができます。 引数が無い場合はnilを渡したことになり、次のフレームで再開します。コルーチンの開始・停止は下記の関数を使用します。
■ Tweenライブラリについて
LuaAPI1.1
LuaAPI ver1.1からTweenライブラリであるDOTweenをLua上で使用できるようになりました。クラスのメンバ関数の呼び出しに「:」を使用する事、C#の型アクセスに「CS.」を付ける事でUnityと同様に使用出来ます。DOTweenの使用方法については公式ドキュメントや検索で多数の記事があります。
_transform:DOLocalMove(CS.UnityEngine.Vector3(1, 0, 5), 1.0)
:SetEase(CS.DG.Tweening.Ease.InOutQuad)
:OnComplete(MyCompleteFunction)
■ LuaAPIバージョンについて
LuaAPIのバージョン管理について、各APIに対応したバージョンのタグを記載します。
また、LuaAPIバージョンに対応した各アプリのバージョンをこちらに記載していきます。
LuaAPIのバージョン | アプリ本体のバージョン | 譜面プレビューのバージョン |
---|---|---|
LuaAPI2.2 | #80 | v1.59 |
LuaAPI2.1 | #78 | v1.57 |
LuaAPI2.0 | #77 | v1.56 |
LuaAPI1.9 | #76 | v1.55 |
LuaAPI1.8 | #70 | v1.51 |
LuaAPI1.7 | #68 | v1.48 |
LuaAPI1.6 | #66 | v1.46 |
LuaAPI1.5 | #64 | v1.44 |
LuaAPI1.4 | #62 | v1.42 |
LuaAPI1.3 | #61 | v1.40 |
LuaAPI1.2 | #60 | v1.39 |
LuaAPI1.1 | #59 | v1.38 |
LuaAPI1.0 | #58 | v1.37 |
■ イベント関数
イベント関数(ゲーム側から呼ばれる関数)の一覧です。
引数のあるイベント関数はゲーム側から値が渡ってきます。
function onHitNote(id, lane, noteType, judgeType, isAttack)
ノーツが判定にヒットした時に実行されるイベント関数です。
各引数について以下のものが取得されます。
LuaAPI ver1.8からisAttackが追加されました。
各引数について以下のものが取得されます。
LuaAPI ver1.8からisAttackが追加されました。
- id:ノーツ番号
- lane:0から数えた左からのレーン数
- noteType:ノーツの種類の値
- judgeType:判定の種類の値
- isAttack:アタックノーツの真偽値
- None = 0
- Normal = 1, (タップノーツ)
- LongStart = 2, (ロング開始)
- LongRelay = 3, (ロング中継)
- LongEnd = 4, (ロング終端)
- Fuzzy = 5, (ファジーノーツ)
- FuzzyLongStart = 6, (ファジーロング開始)
- FuzzyLongRelay = 7, (ファジーロング中継)
- FuzzyLongEnd = 8, (ファジーロング終端)
- Brilliant = 0
- Great = 1
- Fast = 2
- Slow = 3
- Bad = 4
- Missed = 5, (onHitNoteでは取得されません)
LuaAPI1.8
記述例.lua
function onHitNote(id, lane, noteType, judgeType, isAttack)
local src={id,lane,noteType,judgeType,isAttack}
local dst=table.concat(src,",")
print(dst)
end
function onMissedNote(id, lane, noteType)
ミスの判定時に実行されるイベント関数です。
各引数について以下のものが取得されます。
各引数について以下のものが取得されます。
- id:ノーツ番号
- lane:0から数えた左からのレーン数
- noteType:ノーツの種類の値
- None = 0
- Normal = 1, (タップノーツ)
- LongStart = 2, (ロング開始)
- LongRelay = 3, (ロング中継)
- LongEnd = 4, (ロング終端)
- Fuzzy = 5, (ファジーノーツ)
- FuzzyLongStart = 6, (ファジーロング開始)
- FuzzyLongRelay = 7, (ファジーロング中継)
- FuzzyLongEnd = 8, (ファジーロング終端)
LuaAPI1.1
記述例.lua
function onMissedNote(id, lane, noteType)
local src={id,lane,noteType}
local dst=table.concat(src,",")
print(dst)
end
function onSpawnNote(noteController)
ノーツが生成された時に呼ばれるイベント関数です。
引数について以下のものが取得されます。
引数について以下のものが取得されます。
- noteController:生成したNoteControllerクラスの参照
NoteControllerクラスについて
■ 取得のみ可能なプロパティ- bool IsReleased:アクティブ状態から解放したか
- int NoteIndex:ノーツ番号
- int Lane:0数えで左側からのレーン数
- bool IsAttack:アタックノーツか
- bool IsMissed:ミスしたか
- NoteType NoteType:ノーツの種類
- float PosX:X座標
- double JustTime:ジャストの時間(秒)
- double JustBeat:ジャストの拍数 [LuaAPI ver1.5から追加]
- void SetTexture(Texture texture)
- 戻り値:なし
- 引数:Texture
- 説明:ノーツのテクスチャを変更します。
- void EnableDefaultMove(bool enable = true)
- 戻り値:なし
- 引数:bool ゲーム側のノーツ移動を有効にするか
- 説明:ゲーム側のノーツ移動を有効にするか設定します。ノーツをLua側で動かしてゲーム側の移動処理が必要ない場合はfalseを指定します。デフォルトはtrueに設定されています。
- void SetDelegate(Action<NoteController> noteControllerCallBack)
- 戻り値:なし
- 引数:Action<NoteController> 引数を1個持つfunction
- 説明:ノーツが表示されている間、毎フレーム呼ばれる関数を設定します
- void SetPosition(float x, float y, float z)
- 戻り値:なし
- 引数:float X座標, float Y座標, float Z座標
- 説明:ノーツ位置を座標で設定します。
- void SetLanePosition(float lane)
- 戻り値:なし
- 引数:float 左から0数えのレーン位置
- 説明:0から数えて左から指定したレーンの位置になるようにノーツのX座標を設定します。小数点も可。
- void SetBeatPosition(float beat)
- 戻り値:なし
- 引数:float 拍数
- 説明:判定までの拍数からノーツのZ座標を計算してノーツのZ座標と回転を設定します。
- void SetTimePosition(float time)
- 戻り値:なし
- 引数:float 時間(秒)
- 説明:判定までの時間(秒)からノーツのZ座標を計算してノーツのZ座標と回転を設定します。
- void SetSize(float size)
- 戻り値:なし
- 引数:float ノーツの大きさ(倍率)
- 説明:ノーツのサイズを設定します。
- void SetAlpha(float alpha)
- 戻り値:なし
- 引数:float 透明度
- 説明:ノーツの透明度(0~1)を設定します。
- void SetAttack(bool isAttack)
- 戻り値:なし
- 引数:bool 有効か
- 説明:アタックノーツを有効にするか設定します。(アタックノーツが存在する譜面で使用できます)
- void SetIndividualSpeed(float individualSpeed)
- 戻り値:なし
- 引数:float 個別の速度倍率
- 説明:ノーツ単体(個別)のスピードを設定します。(LuaAPI ver2.2で追加)
LuaAPI1.2
記述例.lua
function onSpawnNote(noteController)
-- 100番目のノーツの画像を変更する
if (noteController.NoteIndex == 100) then
-- 自身が用意したテクスチャに差し替える
-- ここでは直前に取得していますが、テクスチャは事前に保持して使いまわすとパフォーマンスが良いです
local tex = UTIL:LoadTexture("my_noteskin.png")
noteController:SetTexture(tex)
end
-- ロング終端ノーツを透明にする
if (noteController.NoteType == CS.NoteType.LongEnd) then
noteController:SetAlpha(0)
end
end
function onSpawnLong(longController)
ロングが生成された時に呼ばれるイベント関数です。
各引数について以下のものが取得されます。
各引数について以下のものが取得されます。
- longController:生成したLongControllerクラスの参照
LongControllerクラスについて
■ 取得のみ可能なプロパティ- bool IsReleased:アクティブ状態から解放したか
- float CurrentPosX:X座標
- int StartNoteIndex:ロング開始のノーツ番号
- int LastNoteIndex:ロング終端のノーツ番号
- double StartBeatPosition:ロング開始の拍数
- double EndBeatPosition:ロング終端の拍数
- double StartTime:ロング開始の時間(秒)
- double EndTime:ロング終端の時間(秒)
- LongType LongType:ロングの種類
- int TouchId:ロングを掴んでいる指のタッチ番号 (無い時は-1)
- void SetTexture(Texture texture)
- 戻り値:なし
- 引数:Texture
- 説明:ロングのテクスチャを変更します。
- void EnableDefaultMove(bool enable = true)
- 戻り値:なし
- 引数:bool 有効にするか
- 説明:ゲーム側のロング移動を有効にするか設定します。ロングをLua側で動かしてゲーム側の移動処理が必要ない場合はfalseを指定します。デフォルトはtrueに設定されています
- void SetDelegate(Action<LongController> longControllerCallBack)
- 戻り値:なし
- 引数:引数を1個持つfunction
- 説明:ロングが表示されている間、毎フレーム呼ばれる関数を設定します
- void SetAlpha(float alpha)
- 戻り値:なし
- 引数:float 透明度(0~1)
- 説明:透明度を設定します。
- void SetPosition(float x, float y, float z)
- 戻り値:なし
- 引数:float X座標, float Y座標, float Z座標
- 説明:ロング位置を座標で設定します。
- void SetBeatPosition(float beat)
- 戻り値:なし
- 引数:float 拍数
- 説明:判定までの拍数からロングのZ座標を計算して設定します。
- void SetTimePosition(float time)
- 戻り値:なし
- 引数:float 時間(秒)
- 説明:判定までの時間(秒)からロングのZ座標を計算して設定します。
LuaAPI1.2
記述例.lua
function onSpawnLong(longController)
-- 20拍から30拍の間にあるロングの画像を変更する
local longStartPos = longController.StartBeatPosition
if(20 < longStartPos and longStartPos < 30) then
-- 自身が用意したテクスチャに差し替える
-- ここでは直前に取得していますが、テクスチャは事前に保持して使いまわすとパフォーマンスが良いです
local tex = UTIL:LoadTexture("my_longskin.png")
longController:SetTexture(tex)
end
end
function onInputDown(touchId, posX, screenPosX, screenPosY)
画面上で指をダウンして入力判定があった時に呼ばれるイベント関数です。
onInputのイベント関数はAutoPlayでは呼び出されません。
各引数について以下のものが取得されます。
onInputのイベント関数はAutoPlayでは呼び出されません。
各引数について以下のものが取得されます。
- touchId:指のタッチ番号
- posX:レーン上のX座標
- screenPosX:スクリーン座標系のX座標
- screenPosY:スクリーン座標系のY座標
LuaAPI1.4
記述例.lua
function onInputDown(touchId, posX, screenPosX, screenPosY)
local src={touchId,posX,screenPosX,screenPosY}
local dst=table.concat(src,",")
print(dst)
end
function onInputMove(touchId, posX, screenPosX, screenPosY)
画面上で指を動かして入力判定があった時に呼ばれるイベント関数です。
各引数について以下のものが取得されます。
各引数について以下のものが取得されます。
- touchId:指のタッチ番号
- posX:レーン上のX座標
- screenPosX:スクリーン座標系のX座標
- screenPosY:スクリーン座標系のY座標
LuaAPI1.4
記述例.lua
function onInputMove(touchId, posX, screenPosX, screenPosY)
local src={touchId,posX,screenPosX,screenPosY}
local dst=table.concat(src,",")
print(dst)
end
function onInputUp(touchId, posX, screenPosX, screenPosY)
画面上で指をアップして入力判定があった時に呼ばれるイベント関数です。
一度ダウン判定のあった指のタッチ番号のアップ判定はレーン外でも入力を受け付けます。
各引数について以下のものが取得されます。
一度ダウン判定のあった指のタッチ番号のアップ判定はレーン外でも入力を受け付けます。
各引数について以下のものが取得されます。
- touchId:指のタッチ番号
- posX:レーン上のX座標
- screenPosX:スクリーン座標系のX座標
- screenPosY:スクリーン座標系のY座標
LuaAPI1.4
記述例.lua
function onInputUp(touchId, posX, screenPosX, screenPosY)
local src={touchId,posX,screenPosX,screenPosY}
local dst=table.concat(src,",")
print(dst)
end
■ LuaAPI (クラスと関数)
ダンカグライクのLuaAPI(予め用意しているLuaのソースファイル中で使用できる関数)についてここで説明します。
これらの関数を使用するには
クラスの変数名:関数名
の形で書く必要があります。また、グローバルテーブル変数に定義されているクラスについては大文字で呼び出すことができます。
詳しくは、後述の各API中の記述例を参照ください。
・ScreenManクラス
クラスのグローバル変数名:SCREENMAN
・GameStateクラス
クラスのグローバル変数名:GAMESTATE
void SetOffsetZ(float positionZ)
ノーツの判定位置の基準となるZ座標を設定します。
ノーツの見た目の位置が前後します。デフォルトは0に設定されています。
譜面のギミックに使用できます。
また、開始ボタンを押した直後に値が0にリセットされるため、扱いに注意してください。
ノーツの見た目の位置が前後します。デフォルトは0に設定されています。
譜面のギミックに使用できます。
また、開始ボタンを押した直後に値が0にリセットされるため、扱いに注意してください。
- 戻り値:なし
- 引数
- float positionZ:ノーツの判定位置の基準となるZ座標
LuaAPI1.1
記述例.lua
function update()
local beat = GAMESTATE:GetSongBeat()
-- Gimmick Modsがあるか確認する
checkMods(beat)
if(_isBack) then
local time = GAMESTATE:GetSongTime()
local value = _maxZ * (1.0 - (time - _backStartTime) / _duration)
if(value < 0) then
_isBack = false
GAMESTATE:SetOffsetZ(0)
else
GAMESTATE:SetOffsetZ(value)
end
end
end
void ChangeHoldTexture(int noteTypeIndex, Texture noteTexture)
ホールド中に表示されるテクスチャを変更します。(int版)
- 戻り値:なし
- 引数
- int noteTypeIndex:ノーツの種類のint(2 → ロング開始 , 3 → ロング中継, 6 → ファジーロング開始, 7 → ファジーロング中継)
- Texture noteTexture:テクスチャ
LuaAPI1.4
記述例.lua
local noteTexture = UTIL:LoadTexture("long_start.png")
GAMESTATE:ChangeHoldTexture(2, noteTexture)
・PlayerStatsクラス
クラスのグローバル変数名:PLAYERSTATS
・SongManクラス
クラスのグローバル変数名:SONGMAN
・CameraManクラス
クラスのグローバル変数名:CAMERAMAN
Transform GetTransform()
mainCameraのTransformを取得します
TransformクラスのリファレンスはUnityAPIのTransformで確認できます。
TransformクラスのリファレンスはUnityAPIのTransformで確認できます。
- 戻り値:Transform:mainCameraのTransform
- 引数
- なし
LuaAPI1.0~
記述例.lua
_cameraManTr = CAMERAMAN:GetTransform()
・PostEffectクラス
概要
画面のレンダリングが終わったあとに、画面全体に演出効果をかけるクラスです。
CAMERAMANクラスのGetPostEffect()から取得できます。
Built-in Render Pipelineに対応したShaderのMaterialをこのPostEffectクラスに設定して使用します。
PostEffectクラスからパラメーターを変更する以外に、
参照渡ししたMaterialに対して直接パラメーターを操作することもできます。(UnityのMaterial)
CAMERAMANクラスのGetPostEffect()から取得できます。
Built-in Render Pipelineに対応したShaderのMaterialをこのPostEffectクラスに設定して使用します。
PostEffectクラスからパラメーターを変更する以外に、
参照渡ししたMaterialに対して直接パラメーターを操作することもできます。(UnityのMaterial)
-- Materialの参照を渡す
_postEffect:SetMaterial(_glitchMaterial)
-- 下記のどちらも結果は同じ操作になります
-- PostEffectクラスから設定する場合
_postEffect:SetFloat(_GlitchSize1ID, _glitch1)
-- PostEffectに渡したMaterialの参照から設定する場合
_glitchMaterial:SetFloat(_GlitchSize1ID, _glitch1)
現状、外部からShaderを持ってくるにはAssetBundle(AssetManクラス)を使用する必要があります。・AssetManクラス
クラスのグローバル変数名:ASSETMAN
UnityAPIのAssetBundleをLuaから呼ぶためのラッパー(Wrapper)クラスです。
GameObject LoadGameObject(int hash, string name)
ロードしたAssetBundleのハッシュとアセット名からGameObjectを取得します。
この時、取得しただけでシーン上には生成されません。
GameObjectを生成するにはCS.UnityEngine.GameObject.Instantiate関数に取得したGameObjectを渡すことでシーン上に生成させることができます。
この時、取得しただけでシーン上には生成されません。
GameObjectを生成するにはCS.UnityEngine.GameObject.Instantiate関数に取得したGameObjectを渡すことでシーン上に生成させることができます。
- 戻り値:GameObject
- 引数
- int hash:AssetBundleのハッシュ
- string name:Asset名
LuaAPI1.0~
記述例.lua
local sakura = ASSETMAN:LoadGameObject(assetbundleHash, "SakurashowerWind")
CS.UnityEngine.GameObject.Instantiate(sakura)
・AppManクラス
クラスのグローバル変数名:APPMAN
・Utilクラス
クラスのグローバル変数名:UTIL
[]で囲われた引数はデフォルト引数を表しています。
Texture2D LoadTexture(string textureFileName)
画像のファイル名からテクスチャ(Texture2D)を返します
- 戻り値:Texture2D
- 引数
- string textureFileName:画像のファイル名(譜面フォルダからの相対パス)
LuaAPI1.0~
記述例.lua
local tex = UTIL:LoadTexture("Actor/yuyuko02.png")
Sprite[] CreateMultiSprite(Texture2D texture, int horizontalCount, int verticalCount)
1枚のテクスチャから複数のSpriteを作成して返します
横の分割数(horizontalCount) * 縦の分割数(verticalCount) 枚のSpriteを左上から右下の順番に生成します
C#から配列を返す場合、xLuaの仕様で開始の添え字が0になります
横の分割数(horizontalCount) * 縦の分割数(verticalCount) 枚のSpriteを左上から右下の順番に生成します
C#から配列を返す場合、xLuaの仕様で開始の添え字が0になります
- 戻り値:Sprite
- 引数
- Texture2D texture:Spriteに変換したいテクスチャ
- int horizontalCount:横方向の分割数
- int verticalCount:縦方向の分割数
LuaAPI1.6
記述例.lua
local sprites = UTIL:CreateMultiSprite(tex, 4, 2)
void TweenPosition(Transform tr, Vector3 pos, float duration, [string ease = "Linear"], [Action onComplete = null])
Tweenアニメーション 指定のワールド座標へ移動します
- 戻り値:なし
- 引数
- Transform tr:Transform
- Vector3 pos:移動させたいワールド座標
- float duration:移動に掛ける時間(秒)
- [string ease = "Linear":イージングの種類の文字列]
- [Action onComplete = null:完了後の処理]
LuaAPI1.0~
記述例.lua
UTIL:TweenPosition(tr, pos, 1.0, "Linear")
void TweenLocalPosition(Transform tr, Vector3 pos, float duration, [string ease = "Linear"], [Action onComplete = null])
Tweenアニメーション 指定のローカル座標へ移動します
- 戻り値:なし
- 引数
- Transform tr:Transform
- Vector3 pos:移動させたいローカル座標
- float duration:移動に掛ける時間(秒)
- [string ease = "Linear":イージングの種類の文字列]
- [Action onComplete = null:完了後の処理]
LuaAPI1.0~
記述例.lua
UTIL:TweenLocalPosition(tr, pos, 1.0, "Linear")
void TweenRotation(Transform tr, Vector3 rot, float duration, [string ease = "Linear"], [Action onComplete = null)]
Tweenアニメーション 指定のワールド座標の向きに回転させます (Vector3版)
- 戻り値:なし
- 引数
- Transform tr:Transform
- Vector3 rot:回転させたいワールド座標の向き
- float duration:回転に掛ける時間(秒)
- [string ease = "Linear":イージングの種類の文字列]
- [Action onComplete = null:完了後の処理]
LuaAPI1.0~
記述例.lua
UTIL:TweenRotation(tr, rot, 1.0, "Linear")
void TweenRotateQuaternion(Transform tr, Quaternion rot, float duration, [string ease = "Linear"], [Action onComplete = null)]
Tweenアニメーション 指定のワールド座標の向きに回転させます (Quaternion版)
- 戻り値:なし
- 引数
- Transform tr:Transform
- Quaternion rot:回転させたいワールド座標の向き
- float duration:回転に掛ける時間(秒)
- [string ease = "Linear":イージングの種類の文字列]
- [Action onComplete = null:完了後の処理]
LuaAPI1.0~
記述例.lua
UTIL:TweenRotateQuaternion(tr, rot, 1.0, "Linear")
void TweenLocalRotation(Transform tr, Vector3 rot, float duration, [string ease = "Linear"], [Action onComplete = null])
Tweenアニメーション 指定のローカル座標の向きに回転させます (Vector3版)
- 戻り値:なし
- 引数
- Transform tr:Transform
- Vector3 rot:回転させたいローカル座標の向き
- float duration:回転に掛ける時間(秒)
- [string ease = "Linear":イージングの種類の文字列]
- [Action onComplete = null:完了後の処理]
LuaAPI1.0~
記述例.lua
UTIL:TweenLocalRotation(tr, rot, 1.0, "Linear")
void TweenLocalRotateQuaternion(Transform tr, Quaternion rot, float duration, [string ease = "Linear"], [Action onComplete = null])
Tweenアニメーション 指定のローカル座標の向きに回転させます (Quaternion版)
- 戻り値:なし
- 引数
- Transform tr:Transform
- Quaternion rot:回転させたいローカル座標の向き
- float duration:回転に掛ける時間(秒)
- [string ease = "Linear":イージングの種類の文字列]
- [Action onComplete = null:完了後の処理]
LuaAPI1.0~
記述例.lua
UTIL:TweenLocalRotateQuaternion(tr, rot, 1.0, "Linear")
void TweenScale(Transform tr, Vector3 scale, float duration, [string ease = "Linear"], [Action onComplete = null])
Tweenアニメーション 指定のサイズにします
- 戻り値:なし
- 引数
- Transform tr:Transform
- Vector3 scale:サイズ
- float duration:掛ける時間(秒)
- [string ease = "Linear":イージングの種類の文字列]
- [Action onComplete = null:完了後の処理]
LuaAPI1.0~
記述例.lua
UTIL:TweenScale(tr, size, 1.0, "Linear")
float[] GetSpectrumData(int size, int channel, FFTWindow fftWindow)
現在再生されているAudioSourceのスペクトラムデータのブロックを取得します
- 戻り値:float[]:スペクトラムデータの配列 (要素番号は0から)
- 引数
- int size:サンプルサイズ
- int channel:サンプルする元のチャンネル
- FFTWindow fftWindow:サンプリング時に使用する FFTWindow のタイプ
LuaAPI2.1
記述例.lua
GameObject = CS.UnityEngine.GameObject
Vector3 = CS.UnityEngine.Vector3
Vector2 = CS.UnityEngine.Vector2
Quaternion = CS.UnityEngine.Quaternion
local SAMPLE_NUM = 512;
---@type CS.UnityEngine.FFTWindow
local FFT_WINDOW = CS.UnityEngine.FFTWindow.Hamming
local _spectrumData = {}
local _scale = 50
local _cubeObject = nil
local _cubes = {}
function onloaded()
for i=0,SAMPLE_NUM do
_spectrumData[i] = 0
end
CreateCube()
end
function CreateCube()
---@type CS.UnityEngine.GameObject
_cubeObject = GameObject("CubeParent");
for i=1,SAMPLE_NUM do
--グローバル変数として用意しているcubeを使う
---@type CS.UnityEngine.Transform
local cubeTr = GameObject.Instantiate(cube, _cubeObject.transform):GetComponent(typeof(CS.UnityEngine.Transform))
local deg = i/SAMPLE_NUM * 360
local pos = UTIL:PolarToCartesian(1, deg)
cubeTr:SetPositionAndRotation(Vector3(pos.x, 0, pos.y), Quaternion.Euler(Vector3(0, deg, 0)))
cubeTr.localScale = Vector3(1,1,1) * 0.01
_cubes[i] = cubeTr
end
_cubeObject.transform.localPosition = Vector3(0, 0, 1)
end
function update()
-- UTILにGetSpectrumDataのラッパーを実装 (LuaAPI ver2.1)
_spectrumData = UTIL:GetSpectrumData(SAMPLE_NUM, 0, FFT_WINDOW);
if (_spectrumData == nil) then
return;
end
for i=1,SAMPLE_NUM do
_cubes[i].localScale = Vector3(0.01, _spectrumData[i-1] * _scale, 0.01)
end
end
Tweenのイージングの種類について
下記のものが使用できます。
gifでアニメーションを見る
gifでアニメーションを見る
- Linear
- InSine/OutSine/InOutSine
- InQuad/OutQuad/InOutQuad
- InCubic/OutCubic/InOutCubic
- InQuart/OutQuart/InOutQuart
- InQuint/OutQuint/InOutQuint
- InExpo/OutExpo/InOutExpo
- InCirc/OutCirc/InOutCirc
- InElastic/OutElastic/InOutElastic
- InBack/OutBack/InOutBack
- InBounce/OutBounce/InOutBounce
- Flash/InFlash/OutFlash/InOutFlash
・ActorFactoryクラス
クラスのグローバル変数名:ACTORFACTORY
ActorFactoryは各Actorを生成するためのクラスです。
Create〇〇関数でActorを継承したクラスを持つゲームオブジェクトが生成されます。
Luaファイルを指定してActorにLuaテーブルを持たせることで、
読み込んだLuaファイルのイベント関数がActorから呼び出されます。
LuaAPI Ver1.3からLuaファイルの指定が必須でなくなりました。
Actorの種類は今後も増やす予定です。
・Actor2Dクラス
画像を表示する機能を持つ、Actorを継承したクラスです。
ActorFactoryクラスのCreate2D関数から生成されます。
読み込んだLuaファイルのイベント関数が呼び出されます。
読み込んだLuaファイルから自身のActor2Dには「self」でアクセスできます。
void LoadImage(string imagePath)
画像をファイル名から読み込んで、自身の持つSpriteRendererのspriteに設定します。
(ファイル名は譜面フォルダからの相対パス)
(ファイル名は譜面フォルダからの相対パス)
- 戻り値:なし
- 引数
- string imagePath:画像ファイル名(ファイル名は譜面フォルダからの相対パス)
LuaAPI1.0~
記述例.lua
function onloaded()
-- Actor2Dを生成
_yuyukoActor2D = ACTORFACTORY:Create2D()
-- 画像読み込み
_yuyukoActor2D:LoadImage("Actor/yuyuko01.png")
-- カメラの向きに合わせて回転
CAMERAMAN:SetChild(_yuyukoActor2D, true)
end
・ActorAudioクラス
音声再生の機能を持つ、Actorを継承したクラスです。
ActorFactoryクラスのCreateAudio関数から生成されます。
読み込んだLuaファイルのイベント関数が呼び出されます。
読み込んだLuaファイルから自身のActorAudioには「self」でアクセスできます。
void LoadAudio(string filePath, [Action onComplete = null])
音声ファイルを読み込みます
ゲーム側で非同期に読み込むため、読み込まれるまで時間差が生じます
読み込みが完了するとonCompleteのコールバックが呼ばれます。
読み込みに失敗した場合はデバッグのConsoleにエラーが出力されます。
ゲーム側で非同期に読み込むため、読み込まれるまで時間差が生じます
読み込みが完了するとonCompleteのコールバックが呼ばれます。
読み込みに失敗した場合はデバッグのConsoleにエラーが出力されます。
- 戻り値:なし
- 引数
- string filePath:ファイル名(譜面フォルダからの相対パス)
- [Action onComplete = null]:完了時に呼び出す引数なしのfunction
LuaAPI1.1
記述例.lua
function onCompletedLoadAudio()
print('音声が読み込まれました')
end
function onloaded()
self:LoadAudio("voice.ogg", onCompletedLoadAudio)
end
void Play()
音声を再生します
- 戻り値:なし
- 引数
- なし
LuaAPI1.1
記述例.lua
local _actorAudio = nil
local _isLoadedAudio = false
local _nextPlayAudioTime = 3.0
function OnLoadedAudio()
_isLoadedAudio = true
print("音声が読み込まれました")
end
function onloaded()
_actorAudio = ACTORFACTORY:CreateAudio()
_actorAudio:LoadAudio("voice.mp3", OnLoadedAudio)
end
function update()
local time = GAMESTATE:GetSongTime()
-- 6秒毎に音声再生
if(_isLoadedAudio and _nextPlayAudioTime < time) then
_actorAudio:Play()
_nextPlayAudioTime = _nextPlayAudioTime + 6
end
end
・ActorVideoCanvasクラス
動画再生の機能を持つ、Actorを継承したクラスです。
ActorFactoryクラスのCreateVideoCanvas関数から生成されます。
読み込んだLuaファイルのイベント関数が呼び出されます。
読み込んだLuaファイルから自身のActorVideoCanvasには「self」でアクセスできます。
動画の音声は再生しない仕様です。変更したい場合はVideoPlayerを取得して、UnityAPIを介して変更してください。
void SetVideoPath(string filePath)
動画のファイルパスを指定してメモリにロードします。
Playで再生する前に必要です。
対応しているファイル形式 .mp4 (H.264コーデック推奨)、.mov、.wmv等
ビデオファイルの互換性についてはUnity公式ドキュメントを確認してください。
Playで再生する前に必要です。
対応しているファイル形式 .mp4 (H.264コーデック推奨)、.mov、.wmv等
ビデオファイルの互換性についてはUnity公式ドキュメントを確認してください。
- 戻り値:なし
- 引数
- string filePath:譜面フォルダからの相対パス
LuaAPI1.3
記述例.lua
_videoCanvas:SetVideoPath("video.mp4")
void SetOffsetTime(double offsetTime)
動画と楽曲の再生同期を指定した時間(秒)ずらします。
- 戻り値:なし
- 引数
- double offsetTime:時間(秒)
LuaAPI1.3
記述例.lua
local _actorVideo = nil
function onloaded()
-- ActorVideoCanvasを生成
_actorVideo = ACTORFACTORY:CreateVideoCanvas()
-- 動画ファイルの場所
_actorVideo:SetVideoPath("muishiki.mp4")
-- 画面の外側にサイズを合わせる
_actorVideo:SetScreenMatchMode(1)
-- 動画の明るさを設定
_actorVideo:SetBrightness(1 - PLAYERSTATUS:GetDisplayOption().Dimmer)
-- 楽曲の再生時間からずらす秒数を指定(NotePreview v1.41以降)
_actorVideo:SetOffsetTime(21.5)
end
function start()
-- 動画を再生
_actorVideo:Play()
-- (NotePreview v1.40以前の場合)
--UTIL:DelayFrameAction(16, delayOffset)
end
--function delayOffset()
-- _actorVideo:SetOffsetTime(19.8)
--end
void Play()
動画を再生します
- 戻り値:なし
- 引数
- なし
LuaAPI1.3
記述例.lua
local _actorVideo = nil
function onloaded()
-- ActorVideoCanvasを生成
_actorVideo = ACTORFACTORY:CreateVideoCanvas()
-- 動画ファイルの場所
_actorVideo:SetVideoPath("muishiki.mp4")
-- 画面の外側にサイズを合わせる
_actorVideo:SetScreenMatchMode(1)
-- 動画の明るさを設定
_actorVideo:SetBrightness(0.8)
-- 楽曲の再生時間からずらす秒数を指定(NotePreview v1.41以降)
_actorVideo:SetOffsetTime(21.5)
end
function start()
-- 動画を再生
_actorVideo:Play()
end
・ActorUITextクラス
テキストを表示する機能を持つ、Actorを継承したクラスです。
ActorFactoryクラスのCreateUIText関数から生成されます。
読み込んだLuaファイルのイベント関数が呼び出されます。
読み込んだLuaファイルから自身のActorUITextには「self」でアクセスできます。
・DanmakuStageクラス
クラスのグローバル変数名:DSTAGE または DANMAKUSTAGE
ダンマクステージを構築するAPIです。
こちらの機能は現在Beta版になります。
BulletBuilder GetBulletBuilder()
敵弾生成を行なうクラスを取得します。
メソッドチェーンの形で設定を記述して、
最後にBuild関数を呼ぶことで弾が発射されます。
メソッドチェーンの形で設定を記述して、
最後にBuild関数を呼ぶことで弾が発射されます。
- 戻り値:BulletBuilder
- 引数
- なし
LuaAPI1.6
記述例.lua
-- 弾生成のクラスを取得 SetBasicParam(...) -> 順不同 With...() -> Build() をチェーン状に呼ぶことで弾が発射される
DSTAGE:GetBulletBuilder()
:SetBasicParam(Vector2(0, 3.5), Vector2(0, -1), 0.15, 0.3, 10)
:Build() -- 構築して発射
void SetEnemySprite(Sprite sprite)
敵キャラクターのSpriteを設定します
カットイン演出のキャラクター画像も変更されます
SpriteはUtilクラスの関数を使用して生成できます
カットイン演出のキャラクター画像も変更されます
SpriteはUtilクラスの関数を使用して生成できます
- 戻り値:なし
- 引数
- Sprite sprite:敵キャラクターのSprite
LuaAPI1.6
記述例.lua
function onloaded()
local tex = UTIL:LoadTexture("enemy.png")
local enemySprite = UTIL:CreateSprite(tex)
DSTAGE:SetEnemySprite(enemySprite)
end
・BulletBuilderクラス
DanmakuStageクラスのGetBulletBuilder関数から取得されます。
弾の設定をメソッドチェーンで記述して、最後にBuild関数を呼ぶことで弾を発射します。
BulletBuilder SetBasicParam(Vector2 startPosition, Vector2 initialVelocity, [float hitDistance = 0.15], [float size = 0.3], [int damage = 10])
弾の基礎パラメータを設定します
With~関数より前に記述する必要があります
With~関数より前に記述する必要があります
- 戻り値:BulletBuilder
- 引数
- Vector2 startPosition:発射位置
- Vector2 initialVelocity:初速度
- [float hitDistance = 0.15f:当たり判定の距離]
- [float size = 0.3f:見た目のサイズ]
- [int damage = 10:プレイヤーのライフの最大値を100とした場合のダメージ量]
LuaAPI1.6
記述例.lua
DSTAGE:GetBulletBuilder()
:SetBasicParam(enemyPos, velocity, hitDistance, size, damage)
:Build()
BulletBuilder WithUpdateFunc(Action<EnemyBullet> luaFunction)
毎フレーム呼ばれる関数を設定します
呼ばれる関数の引数にはEnemyBulletクラスの参照が取得されます
呼ばれる関数の引数にはEnemyBulletクラスの参照が取得されます
- 戻り値:BulletBuilder
- 引数
- Action<EnemyBullet> luaFunction:引数を1つ持つLuaの関数
LuaAPI1.6
記述例.lua
local Vector2 = CS.UnityEngine.Vector2
local _isShoted = false
function start()
DSTAGE:Begin()
end
function finish()
DSTAGE:End()
end
function update()
local beat = GAMESTATE:GetSongBeat()
if (beat > 10 and not _isShoted) then
DSTAGE:GetBulletBuilder()
:SetBasicParam(Vector2(0, 3.5), Vector2(0, -1), 0.15, 0.3, 10)
:WithUpdateFunc(UpdateFunc)
:Build()
_isShoted = true
end
end
function UpdateFunc(bullet)
-- なにかする
end
BulletBuilder WithDelayFunc(Action<EnemyBullet> luaFunction, float delayTime)
指定した秒数後に呼ばれる関数を設定します
呼ばれる関数の引数にはEnemyBulletクラスの参照が取得されます
呼ばれる関数の引数にはEnemyBulletクラスの参照が取得されます
- 戻り値:BulletBuilder
- 引数
- Action<EnemyBullet> luaFunction:引数を1つ持つLuaの関数
- float delayTime:時間(秒)
LuaAPI1.6
記述例.lua
local Vector2 = CS.UnityEngine.Vector2
local _isShoted = false
function start()
DSTAGE:Begin()
end
function finish()
DSTAGE:End()
end
function update()
local beat = GAMESTATE:GetSongBeat()
if (beat > 10 and not _isShoted) then
DSTAGE:GetBulletBuilder()
:SetBasicParam(Vector2(0, 3.5), Vector2(0, -1), 0.15, 0.3, 10)
:WithDelayFunc(DelayFunc, 1.5)
:Build()
_isShoted = true
end
end
function DelayFunc(bullet)
-- 角加速度を変更
bullet:SetAngularVelocity(-30)
end
BulletBuilder WithSortingOrder(int sortingOrder)
SortingOrder(レイヤー順番)を設定します
- 戻り値:BulletBuilder
- 引数
- int sortingOrder:レイヤー順番
LuaAPI1.8
記述例.lua
DSTAGE:GetBulletBuilder() -- 弾生成のクラスを取得
:SetBasicParam(_enemyPos, DSTAGE:ToPlayerAiming(_enemyPos) * 1.2, 0.5, 1, 10) -- 基礎パラメーター
:WithSortingOrder(8) -- レイヤー順番
:Build() -- 構築して発射
BulletBuilder WithAttribute(string key, string value)
カスタム属性を設定します
- 戻り値:BulletBuilder
- 引数
- string key:属性キー
- string value:属性値
LuaAPI1.8
記述例.lua
DSTAGE:GetBulletBuilder() -- 弾生成のクラスを取得
:SetBasicParam(_enemyPos, DSTAGE:ToPlayerAiming(_enemyPos) * 1.2, 0.5, 1, 10) -- 基礎パラメーター
:WithAttribute("target", "player") -- キーと値
:Build() -- 構築して発射
BulletBuilder WithReleaseType(int releaseType)
破棄タイプを設定します
0 → 生存時間(LifeTime)を過ぎるか、画面から見えなくなったら破棄 (Default)
1 → 生存時間(LifeTime)を過ぎるか、一度画面に表示されてから見えなくなったら破棄
2 → 生存時間(LifeTime)を過ぎた時だけ破棄
0 → 生存時間(LifeTime)を過ぎるか、画面から見えなくなったら破棄 (Default)
1 → 生存時間(LifeTime)を過ぎるか、一度画面に表示されてから見えなくなったら破棄
2 → 生存時間(LifeTime)を過ぎた時だけ破棄
- 戻り値:BulletBuilder
- 引数
- int releaseType:破棄タイプのint
LuaAPI1.8
記述例.lua
DSTAGE:GetBulletBuilder() -- 弾生成のクラスを取得
:SetBasicParam(_enemyPos, DSTAGE:ToPlayerAiming(_enemyPos) * 1.2, 0.5, 1, 10) -- 基礎パラメーター
:WithReleaseType(1) -- 画面外から発射できるようにする
:Build() -- 構築して発射
BulletBuilder WithPersistence(bool isPersistence, float resumptionTime = 1f)
弾が自機に当たっても消えないようにするか
isPersistenceがtrueの時、resumptionTimeに設定した秒数の後にヒット判定が再開されます
isPersistenceがtrueの時、resumptionTimeに設定した秒数の後にヒット判定が再開されます
- 戻り値:BulletBuilder
- 引数
- bool isPersistence:持続性の弾にするか
- [float resumptionTime = 1f:ヒット判定の再開時間(秒)]
LuaAPI1.8
記述例.lua
DSTAGE:GetBulletBuilder() -- 弾生成のクラスを取得
:SetBasicParam(_enemyPos, DSTAGE:ToPlayerAiming(_enemyPos) * 1.2, 0.5, 1, 10) -- 基礎パラメーター
:WithPersistence(true, 1.5) -- 自機に当たっても消えないようにする
:Build() -- 構築して発射
・EnemyBulletクラス
弾幕ステージの敵弾クラスです
BulletBuilderに設定した呼び出し関数の引数として取得されます
■ 取得のみ可能なプロパティ
- Transform Transform:弾のTransform
- SpriteRenderer SpriteRenderer:弾のSpriteRenderer
- Vector2 Velocity:弾の速度
- Vector2 Acceleration:弾の加速度
- float AngularVelocity:弾の角速度
- float AngularAcceleration:弾の角加速度
- float Size:弾のサイズ
- int Damage:弾のダメージ量
- bool IsPersistence:プレイヤーに当たっても消えない弾か
- int ReleaseType:破棄タイプのint
- bool IsReleased:アクティブ状態から解放したか
・DanmakuPlayerクラス
弾幕ステージの自機クラスです
DanmakuStageクラスのGetPlayer関数から取得できます
■ 取得のみ可能なプロパティ
- Vector2 Position:プレイヤー(自機)の位置
・DanmakuEnemyクラス
弾幕ステージの敵機クラスです
DanmakuStageクラスのGetEnemy関数から取得できます
将来的にDanmakuBossに名前が変わるかもしれません
■ 取得のみ可能なプロパティ
- Vector2 Position:敵機の位置
■ LuaAPI (Enum)
列挙型のLuaAPIについて記載します。
アクセスやキャストは以下のように行ないます。
-- 直接指定
local enum1 = CS.DifficultyType.Easy
-- 値からキャスト
local enum2 = CS.DifficultyType.__CastFrom(0)
-- 名前からキャスト
local enum3 = CS.DifficultyType.__CastFrom("Easy")
・enum DifficultyType
Name | Value |
---|---|
Easy | 0 |
Normal | 1 |
Hard | 2 |
Extra | 3 |
Lunatic | 4 |
・enum PlatformType
Name | Value |
---|---|
Other(その他) | 0 |
Windows | 1 |
MacOS | 2 |
Android | 3 |
iOS | 4 |
・enum NoteType
Name | Value |
---|---|
None | 0 |
Normal | 1 |
LongStart | 2 |
LongRelay | 3 |
LongEnd | 4 |
Fuzzy | 5 |
FuzzyLongStart | 6 |
FuzzyLongRelay | 7 |
FuzzyLongEnd | 8 |
・enum LongType
Name | Value |
---|---|
Long | 0 |
FuzzyLong | 1 |
■ Injection (グローバル変数)
アプリ側で事前に用意しているオブジェクトにアクセスする変数を記載します。
LuaAPI1.3
- 型:DummyNote(Prefab)
- LuaAPI Ver1.3からGameObjectではなく、DummyNoteクラスが取得されるようになりました。
以下のように記述してダミーノーツを生成した後、dummyNoteローカル変数にはDummyNoteクラスの参照が入ります。local dummyNote = CS.UnityEngine.GameObject.Instantiate(DummyNote)
- 記述例:
local GameObject = CS.UnityEngine.GameObject local Vector3 = CS.UnityEngine.Vector3 function start() -------------------------------------- -- LuaAPI Ver1.3以降のDummyNoteの場合 -------------------------------------- -- ダミーノーツを生成 (PrefabはGameObject.Instantiate関数で実体が生成されます) local dummyNoteClass = GameObject.Instantiate(DummyNote) -- ロング開始ノーツのTextureを取得 local longStartTexture = PLAYERSTATS:GetNoteTexture(CS.NoteType.LongStart) -- ロング開始ノーツのTextureに差し替える dummyNoteClass:SetTexture(longStartTexture) -- ダミーノーツのZ座標を判定まで0.5拍の座標に設定する dummyNoteClass:SetBeatPosition(0.5) -- ダミーノーツのX座標を6レーン目に設定する dummyNoteClass:SetLanePosition(5) -------------------------------------- -- LuaAPI Ver1.2以前のDummyNoteの場合 -------------------------------------- -- ダミーノーツを生成 (PrefabはGameObject.Instantiate関数で実体が生成されます) local dummyNote = GameObject.Instantiate(DummyNote) -- ファジーのTextureを取得 local noteTexture = PLAYERSTATS:GetNoteTexture(CS.NoteType.Fuzzy) -- ファジーのTextureに差し替える local meshRenderer = dummyNote:GetComponent(typeof(CS.UnityEngine.MeshRenderer)) meshRenderer.material:SetTexture("_MainTex", noteTexture) -- ダミーノーツの位置を判定まで0.5拍の座標に設定する local posZ = UTIL:CalculateBeatToNotePositionZ(0.5) dummyNote.transform.localPosition = Vector3(0, 0, posZ) -- ダミーノーツの角度をZ座標から取得して設定する dummyNote.transform.localRotation = UTIL:CalculateNoteRotation(posZ) end
DummyNoteクラスについて
DummyNoteクラスが持つ関数を介してコンポーネント(クラス)の取得、パラメーター変更ができます。
■ アクセス可能な関数
■ アクセス可能な関数
- Transform GetTransform()
- 戻り値:Transform
- 引数:なし
- 説明:自身のTransformを取得します
- void SetActive(bool isActive)
- 戻り値:なし
- 引数:表示するか
- 説明:bool 表示/非表示を設定
- void SetLanePosition(float lane)
- 戻り値:なし
- 引数:float 拍数
- 説明:0から数えて左から指定したレーンの位置になるようにDummyNoteのX座標を設定します。(小数点も可)
- void SetBeatPosition(float beat)
- 戻り値:なし
- 引数:float 0から数えて左からのレーン数(小数点も可)
- 説明:判定までの拍数からDummyNoteのZ座標と回転を設定します。(CMODを使用している場合、少し計算量が増えます)
- void SetTimePosition(float time)
- 戻り値:なし
- 引数:float 時間(秒)
- 説明:判定までの時間(秒)からDummyNoteのZ座標と回転を設定します。(CMODを使用していない場合、少し計算量が増えます)
- void SetSize(float size)
- 戻り値:なし
- 引数:float
- 説明:ノーツのサイズを設定します
- void SetTexture(Texture noteTex)
- 戻り値:なし
- 引数:Texture
- 説明:ノーツのテクスチャを設定します
- void SetColor(Color color)
- 戻り値:なし
- 引数:Color
- 説明:色を設定する Color構造体版
- void SetColor(float r, float g, float b, float a)
- 戻り値:なし
- 引数:Red, Green, Blue, Alphaの各0~1の値
- 説明:色を設定する float4つ版
- void SetAlpha(float a)
- 戻り値:なし
- 引数:float 透明度 0~1の値
- 説明:透明度を設定します(0~1) 設定されたColorに対して乗算されます
LuaAPI1.3
記述例.lua
local dummyNote = CS.UnityEngine.GameObject.Instantiate(DummyNote)
dummyNote:SetLanePosition(1)
dummyNote:SetBeatPosition(1)
LuaAPI1.1
- 型:Material
- 内容:PostEffectで使用できるマテリアルです。Shaderプロパティにfloat型の「_Strength」を持ち、0~1の範囲でグレースケールの強さを調整できます。
- 記述例:
function onloaded() -- PostEffectを取得 local postEffect = CAMERAMAN:GetPostEffect() -- PostEffectにグレースケールのMaterialを設定する postEffect:SetMaterial(Greyscale) -- グレースケールの強さを設定 Greyscale:SetFloat("_Strength", 1.0) -- PostEffectを有効にする postEffect:SetEnable(true) end
LuaAPI1.2
- 型:LaneSprite(Prefab)
- 内容:レーンの上または下に被せてレーンの見た目の色を変更するためのオブジェクト(Prefab)です。PrefabはCS.UnityEngine.GameObject.Instantiate関数を使用してシーン上に生成することができます。
- 記述例:
local GameObject = CS.UnityEngine.GameObject function onloaded() -- LaneSprite型のインスタンスが返ります local laneSprite = GameObject.Instantiate(LaneSpritePrefab) laneSprite:SetColor(1, 0, 0, 0.5) laneSprite:SetLanePosition(1) -- GameObjectを取得したい場合は.gameObjectを付ける local laneSpriteObject = laneSprite.gameObject end
LaneSpriteクラスについて
LaneSpriteクラスが持つ関数を介してコンポーネント(クラス)の取得、パラメーター変更ができます。
■ アクセス可能な関数
■ アクセス可能な関数
- SpriteRenderer GetSpriteRenderer()
- 戻り値:SpriteRenderer
- 引数:なし
- 説明:自身の持つSpriteRendererを取得します
- Transform GetTransform()
- 戻り値:Transform
- 引数:なし
- 説明:自身のTransformを取得します
- void SetLanePosition(float lane)
- 戻り値:なし
- 引数:float 0から数えて左からのレーン数(小数点も可)
- 説明:0から数えて左から指定したレーンの位置になるように座標を設定します。(小数点も可)
- void SetColor(Color color)
- 戻り値:なし
- 引数:Color
- 説明:色を設定する Color構造体版
- void SetColor(float r, float g, float b, float a)
- 戻り値:なし
- 引数:Red, Green, Blue, Alphaの各0~1の値
- 説明:色を設定する float4つ版
- void SetAlpha(float a)
- 戻り値:なし
- 引数:float 透明度 0~1の値
- 説明:色のAlpha値を設定する
- void SetSortingLayer(int layerId)
- 戻り値:なし
- 引数:int
- 説明:レーンとの表示順番を変更します(sortingLayerID)
初期設定ではDefaultになっています。
0 (Background) → レーンの後ろに描画します
1 (Default) → レーンと同じレイヤーに描画します
2 (Foreground) → レーンの手前に描画します
Backgroundの場合にはレーンが黒色半透明なので、色が少し暗くなります。 - void SetSortingOrder(int order)
- 戻り値:なし
- 引数:int
- 説明:レイヤー内の表示順番を変更します(sortingOrder)
LuaAPI1.2
記述例.lua
laneSprite:SetColor(1, 0, 0, 0.5)
laneSprite:SetLanePosition(1)
ライセンス
MITライセンスのオープンソースを使用させていただきました
「xLua」ライセンスのページへ
解説/実装:na24ddr