LuaAPIの仕様

はじめに

こちらは譜面制作において、自身の書いたプログラムを実行させたい方向けの記事になっております。
.dlファイルの#LUAタグにluaファイルを指定することでゲームプレイ時にluaを実行します。
(Luaファイルの拡張子は「.lua」推奨です。)
これにより、要素を操作したり画像を追加したりして所謂「Modchart」を作成できます。
yuyuko
Luaを書くに当たって、下記の知識が混合します。

  • ・Luaの文法
  • ・UnityAPI
  • ・ダンカグライクのLuaAPI(このページ)

コーディングについて

まず、Windows のメモ帳ではなく、より優れたテキストエディタを使用する必要があります。 個人的には「Visual Studio Code」をお勧めします。 なぜなら、本当に便利な機能とショートカットがあるからです。 iPadやiPhoneで使用できるブラウザ版VSCodeもあります。 また、Notepad++やSublimeTextもあるので、ご自身が使いやすいものをお使いください。

VSCode拡張機能の導入について

バージョン0.0.7 更新日時: 2024/05/07
「DankagLike LuaAPI」を公開しました。(初版 2023/08/25)
インストール方法はzipに同梱しています。

vscode_extensio_icon



[機能]
  • ・入力補完
  • ・型チェック
  • ・イベント関数、グローバル変数のスニペット
  • ・ホバーするとドキュメントが表示されます
[その他]
  • ・「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
Actionfunction
nullnil
[] (配列)配列としてのテーブル

■ デバッグについて

画面上部にメッセージを表示する機能を用意しています。
変数の中身を確認したり、コードに到達しているか確認できます。

SCREENMAN:SystemMessage("表示したいもの")
また、譜面プレビューのバージョンv1.36以降にデバッグツールを追加しています。
「1」~「4」キーでデバックメニューを開いて、
Consoleを選ぶとシステムのログが確認できます。
Console

Consoleに出力するのみであればLuaの標準出力のprint関数もあります。
print("表示したいもの")
譜面プレビューのゲーム画面で「D」キーを押すと、
ゲーム内の要素やパラメータのウィンドウが表示されます。
Luaから操作した時の様子を確認できます。
初回表示時に時間が掛かるので、開始を押す前か、ポーズしてから開くと良さそうです。

Luaの実行中にエラーが起きた際にはダイアログが表示されます。
メッセージ内容からエラーの発生したLuaの行番号が出力されるため、
これを手掛かりに修正を行なえます。
Console

■ 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を渡したことになり、次のフレームで再開します。

コルーチンの開始・停止は下記の関数を使用します。
function cs_coroutine.start(function, ...)
function cs_coroutine.stop(Coroutine)

■ 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のバージョンアプリ本体のバージョン譜面プレビューのバージョン
LuaAPI1.8
-v1.50
LuaAPI1.7
#68v1.48
LuaAPI1.6
#66v1.46
LuaAPI1.5
#64v1.44
LuaAPI1.4
#62v1.42
LuaAPI1.3
#61v1.40
LuaAPI1.2
#60v1.39
LuaAPI1.1
#59v1.38
LuaAPI1.0
#58v1.37

■ イベント関数

Console

イベント関数(ゲーム側から呼ばれる関数)の一覧です。
引数のあるイベント関数はゲーム側から値が渡ってきます。

function onloaded()
function start()
function update()
function finish()
function ondestroy()
function onHitNote(id, lane, noteType, judgeType)
function onMissedNote(id, lane, noteType)
function onSpawnNote(noteController)
function onSpawnLong(longController)
function onPause()
function onResume()
function onInputDown(touchId, posX, screenPosX, screenPosY)
function onInputMove(touchId, posX, screenPosX, screenPosY)
function onInputUp(touchId, posX, screenPosX, screenPosY)

■ LuaAPI (クラスと関数)

Console

ダンカグライクのLuaAPI(予め用意しているLuaのソースファイル中で使用できる関数)についてここで説明します。
これらの関数を使用するにはクラスの変数名:関数名の形で書く必要があります。
また、グローバルテーブル変数に定義されているクラスについては大文字で呼び出すことができます。
詳しくは、後述の各API中の記述例を参照ください。

・ScreenManクラス

クラスのグローバル変数名:SCREENMAN

void SystemMessage(string message)
void SystemMessage(double value)
void SystemMessage(object obj)
int GetScreenWidth()
int GetScreenHeight()
float GetDpi()
Canvas GetOverlayCanvas()
Canvas GetCameraCanvas()
void LoadBgChangeImages(string[] images)
void ChangeBgImage(string image)
void ResetBgImage()
void SetBgMaterial(Material material)
void ResetBgMaterial()
void SetBgDimmer(float dimmer)

・GameStateクラス

クラスのグローバル変数名:GAMESTATE

int GetPlayMode()
float GetMusicRate()
double GetSongTime()
double GetSongBeat()
double GetVisibleBeat()
double GetVisibleTime()
void SetVisibleRate(float rate)
double TimeToBeat(double musicTime)
double BeatToTime(double beat)
void SetSpeed(float speed, [float duration], [string ease = "Linear"])
void SetDistance(float distance)
void SetOffsetZ(float positionZ)
void SetNotesScrollType(int type)
void SetLaneAlpha(float alpha)
void ChangeJudgeEffect(int type)
void ChangeHoldTexture(NoteType noteType, Texture noteTexture)
void ChangeHoldTexture(int noteTypeIndex, Texture noteTexture)
void ResetHoldTexture()
Judge GetCurrentJudge()
void SetAutoType(int type)
void SetActiveSameTimeBar(bool isActive)
void SetLongEndType(int type)

・PlayerStatsクラス

クラスのグローバル変数名:PLAYERSTATS

bool IsFullCombo()
int GetCurrentCombo()
float GetCurrentLife()
bool IsDanger()
bool IsDead()
void SetLife(float life)
int GetGrade()
int GetScore()
int MaxCombo()
void SetJudgeAreaType(int type)
string GetNotesOptionsJson()
string GetDisplayOptionsJson()
string GetVolumeOptionsJson()
string GetJudgeTimeOptionsJson()
NotesOption GetNotesOptions()
DisplayOption GetDisplayOptions()
VolumeOption GetVolumeOptions()
JudgeTimeOption GetOtherOptions()
JudgeTimeOption GetJudgeTimeOptions()
float GetNoteSpeedOption()
float GetNoteSizeOption()
bool IsMirrorOption()
Texture GetNoteTexture(NoteType type)
Texture GetNoteTexture(int enumIndex)
Texture GetLongTexture(LongType type)
Texture GetLongTexture(int enumIndex)

・SongManクラス

クラスのグローバル変数名:SONGMAN

DifficultyType GetDifficulty()
int GetDifficultyToInt()
int GetMeter()
string GetBackgroundPath()
string GetBannerPath()
string GetArtist()
string GetTitle()
string GetSubtitle()
string[] GetDescription()
string GetIllust()
string GetChartArtist()
float GetBaseBpm()
float[] GetBpms()
float[] GetBpmPositions()
float GetOffset()
string GetSongDir()
float MusicLengthSeconds()

・CameraManクラス

クラスのグローバル変数名:CAMERAMAN

void SetChild(GameObject obj, [bool isRotateIdentity = false])
void SetChild(Transform tr, [bool isRotateIdentity = false])
void SetChild(Actor actor, [bool isRotateIdentity = false])
Transform GetTransform()
Camera GetCamera()
PostEffect GetPostEffect()

・PostEffectクラス

概要

void SetEnable(bool enable)
void SetMaterial(Material material)
void AddMaterial(Material material)
void RemoveMaterial(Material material)
void SetFloat(string name, float value)
void SetFloat(int id, float value)
void SetInt(string name, int value)
void SetInt(int id, int value)
void SetTexture(string name, Texture value)
void SetTexture(int id, Texture value)
void SetColor(string name, Color value)
void SetColor(int id, Color value)

・AssetManクラス

クラスのグローバル変数名:ASSETMAN

UnityAPIのAssetBundleをLuaから呼ぶためのラッパー(Wrapper)クラスです。

int LoadAssetBundle(string name)
GameObject LoadGameObject(int hash, string name)
Shader LoadShader(int hash, string name)
Material LoadMaterial(int hash, string name)
Sprite LoadSprite(int hash, string name)

・AppManクラス

クラスのグローバル変数名:APPMAN

string GetAppVersion()
PlatformType GetPlatform()
int GetPlatformInt()
string GetUnityVersion()
string GetPersistentDataPath()
bool IsNotePreview()

・Utilクラス

クラスのグローバル変数名:UTIL

[]で囲われた引数はデフォルト引数を表しています。

Texture2D LoadTexture(string textureFileName)
Sprite CreateSprite(Texture2D texture)
Sprite[] CreateMultiSprite(Texture2D texture, int horizontalCount, int verticalCount)
Material CreateMaterial(Shader shader)
int ShaderPropertyToID(string propertyName)
Vector2 PolarToCartesian(float radius, float declination)
Vector2 CartesianToPolar(float x, float y)
float CalculateBeatToNotePositionZ(double beat)
float CalculateTimeToNotePositionZ(double time)
Quaternion CalculateNoteRotation(float positionZ)
void TweenPosition(Transform tr, Vector3 pos, float duration, [string ease = "Linear"], [Action onComplete = null])
void TweenLocalPosition(Transform tr, Vector3 pos, float duration, [string ease = "Linear"], [Action onComplete = null])
void TweenRotation(Transform tr, Vector3 rot, float duration, [string ease = "Linear"], [Action onComplete = null)]
void TweenRotateQuaternion(Transform tr, Quaternion rot, float duration, [string ease = "Linear"], [Action onComplete = null)]
void TweenLocalRotation(Transform tr, Vector3 rot, float duration, [string ease = "Linear"], [Action onComplete = null])
void TweenLocalRotateQuaternion(Transform tr, Quaternion rot, float duration, [string ease = "Linear"], [Action onComplete = null])
void TweenScale(Transform tr, Vector3 scale, float duration, [string ease = "Linear"], [Action onComplete = null])
void KillTween(Transform tr, [bool complete = false])
void DelayAction(int millisecond, Action action)
void DelayFrameAction(int frame, Action action)

Tweenのイージングの種類について

・ActorFactoryクラス

クラスのグローバル変数名:ACTORFACTORY

ActorFactoryは各Actorを生成するためのクラスです。
Create〇〇関数でActorを継承したクラスを持つゲームオブジェクトが生成されます。

Luaファイルを指定してActorにLuaテーブルを持たせることで、
読み込んだLuaファイルのイベント関数がActorから呼び出されます。
LuaAPI Ver1.3からLuaファイルの指定が必須でなくなりました。
Actorの種類は今後も増やす予定です。

Actor2D Create2D([string luaFileName = null])
ActorAudio CreateAudio([string luaFileName = null])
ActorVideoCanvas CreateVideoCanvas([string luaFileName = null])
ActorUIText CreateUIText([string luaFileName = null])

・Actor2Dクラス

画像を表示する機能を持つ、Actorを継承したクラスです。
ActorFactoryクラスのCreate2D関数から生成されます。
読み込んだLuaファイルのイベント関数が呼び出されます。
読み込んだLuaファイルから自身のActor2Dには「self」でアクセスできます。

void LoadImage(string imagePath)
SpriteRenderer GetSpriteRenderer()
Transform GetTransform()
void SetSortingLayer(int layerId)
void SetSortingOrder(int order)
Sprite GetSprite()
void SetSprite(Sprite sprite)
Material GetMaterial()
void SetMaterial(Material material)
void InvokeFunction(string functionName)
int InvokeFunction(string functionName, int value)

・ActorAudioクラス

音声再生の機能を持つ、Actorを継承したクラスです。
ActorFactoryクラスのCreateAudio関数から生成されます。
読み込んだLuaファイルのイベント関数が呼び出されます。
読み込んだLuaファイルから自身のActorAudioには「self」でアクセスできます。

AudioSource GetAudioSource()
void LoadAudio(string filePath, [Action onComplete = null])
void SetVolume(float volume)
void SetSystemSEVolume()
void SetTouchSEVolume()
void SetMusicVolume()
void Play()
void Pause()
void Stop()

・ActorVideoCanvasクラス

動画再生の機能を持つ、Actorを継承したクラスです。
ActorFactoryクラスのCreateVideoCanvas関数から生成されます。
読み込んだLuaファイルのイベント関数が呼び出されます。
読み込んだLuaファイルから自身のActorVideoCanvasには「self」でアクセスできます。
動画の音声は再生しない仕様です。変更したい場合はVideoPlayerを取得して、UnityAPIを介して変更してください。
また、権利を有しない動画ファイルの自動公衆送信はお控えください。

VideoPlayer GetVideoPlayer()
RawImage GetRawImage()
void SetVideoPath(string filePath)
void SetOffsetTime(double offsetTime)
void SetBrightness(float brightness)
void SetAlpha(float alpha)
void SetScreenMatchMode(int mode)
void SetFinishCallBack(Action function)
void Play()
void Pause()
void Stop()
void SetAutoMusicSync(bool isAuto)
void SetExternalReferenceTime(double time)

・ActorUITextクラス

テキストを表示する機能を持つ、Actorを継承したクラスです。
ActorFactoryクラスのCreateUIText関数から生成されます。
読み込んだLuaファイルのイベント関数が呼び出されます。
読み込んだLuaファイルから自身のActorUITextには「self」でアクセスできます。

TextMeshProUGUI GetTextMeshProUGUI()
RectTransform GetRectTransform()
void SetText(string text)
void SetSize(int size)
void SetColor(Color color)
void SetColor(float red, float green, float blue, float alpha)
void SetAnchor(float anchorX, float anchorY)
void SetAnchoredPosition(float posX, float posY)
void SetBold(bool isBold)
void SetOutLine(float outlineWidth, Color color)

・DanmakuStageクラス

クラスのグローバル変数名:DSTAGE または DANMAKUSTAGE

ダンマクステージを構築するAPIです。
こちらの機能は現在Beta版になります。

void Begin()
void End()
BulletBuilder GetBulletBuilder()
DanmakuPlayer GetPlayer()
DanmakuEnemy GetEnemy()
void SetEnemySprite(Sprite sprite)
void SetMoveTypeInt(int moveType)
void SetCameraModeInt(int cameraMode)
void SetLimitPosition(bool isLimit)
Vector2 ToPlayerAiming(Vector2 startPosition)

・BulletBuilderクラス

DanmakuStageクラスのGetBulletBuilder関数から取得されます。
弾の設定をメソッドチェーンで記述して、最後にBuild関数を呼ぶことで弾を発射します。

BulletBuilder SetBasicParam(Vector2 startPosition, Vector2 initialVelocity, [float hitDistance = 0.15], [float size = 0.3], [int damage = 10])
BulletBuilder WithBasicSprite(int spriteTypeInt)
BulletBuilder WithSprite(Sprite sprite)
BulletBuilder WithAcceleration(Vector2 acceleration)
BulletBuilder WithAngularVelocity(float angularVelocity)
BulletBuilder WithAngularAcceleration(float angularAcceleration)
BulletBuilder WithRotation(float rotation)
BulletBuilder WithRotationSpeed(float rotationSpeed)
BulletBuilder WithLifeTime(float lifeTime)
BulletBuilder WithTrail([float width = 0.07], [float time = 0.5])
BulletBuilder WithUpdateFunc(Action<EnemyBullet> luaFunction)
BulletBuilder WithDelayFunc(Action<EnemyBullet> luaFunction, float delayTime)
BulletBuilder WithSortingOrder(int sortingOrder)
BulletBuilder WithAttribute(string key, string value)
BulletBuilder WithReleaseType(int releaseType)
BulletBuilder WithPersistence(bool isPersistence, float resumptionTime = 1f)
void 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:アクティブ状態から解放したか
■ アクセス可能な関数
void SetVelocity(Vector2 velocity)
void SetAccelation(Vector2 accelation)
void SetAngularVelocity(float angularVelocity)
void SetAngularAcceleration(float angularAcceleration)
void SetSprite(Sprite sprite)
void SetSize(float size)
void SetHitDistance(float hitDistance)
void SetDamage(int damage)
void SetRotationSpeed(float rotationSpeed)
void SetReleaseType(int releaseType)
string GetAttribute(string key)
void SetAttribute(string key, string value)

・DanmakuPlayerクラス

弾幕ステージの自機クラスです
DanmakuStageクラスのGetPlayer関数から取得できます

■ 取得のみ可能なプロパティ

  • Vector2 Position:プレイヤー(自機)の位置
■ アクセス可能な関数
Transform GetTransform()
SpriteRenderer GetSpriteRenderer()
void SetPlayerMoveTypeInt(int playerMoveTypeInt)
void SetLimitJudgeLine(bool isLimit)
void SetSprite(Sprite sprite)
void SetColor(Color color)
void SetColor(float r, float g, float b, float a)
void SetAlpha(float alpha)
void SetSize(float size)
void AddListenerOnHit(Action<int> func)

・DanmakuEnemyクラス

弾幕ステージの敵機クラスです
DanmakuStageクラスのGetEnemy関数から取得できます
将来的にDanmakuBossに名前が変わるかもしれません

■ 取得のみ可能なプロパティ

  • Vector2 Position:敵機の位置
■ アクセス可能な関数
Transform GetTransform()
SpriteRenderer GetSpriteRenderer()
void SetCharacter(int charaIndex)
void SetSprite(Sprite sprite)
void SetPosition(Vector2 position)
void SetPosition(float x, float z)
void SetSize(float size)
void SetColor(Color color)
void SetColor(float r, float g, float b, float a)
void SetAlpha(float alpha)
int GetLifePoint()
void SetLifePoint(int lifePoint)
void SetMaxLifePoint(int maxLifePoint)
void SetActiveLifePoint(bool isActive)
void AddListenerOnDead(Action func)

■ LuaAPI (Enum)

列挙型のLuaAPIについて記載します。
アクセスやキャストは以下のように行ないます。

-- 直接指定
local enum1 = CS.DifficultyType.Easy
-- 値からキャスト
local enum2 = CS.DifficultyType.__CastFrom(0)
-- 名前からキャスト
local enum3 = CS.DifficultyType.__CastFrom("Easy")

・enum DifficultyType

NameValue
Easy0
Normal1
Hard2
Extra3
Lunatic4

・enum PlatformType

NameValue
Other(その他)0
Windows1
MacOS2
Android3
iOS4

・enum NoteType

NameValue
None0
Normal1
LongStart2
LongRelay3
LongEnd4
Fuzzy5
FuzzyLongStart6
FuzzyLongRelay7
FuzzyLongEnd8

・enum LongType

NameValue
Long0
FuzzyLong1

■ Injection (グローバル変数)

アプリ側で事前に用意しているオブジェクトにアクセスする変数を記載します。

DummyNote (または DummyNotePrefab)
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クラスについて

Greyscale
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
LaneSprite (または LaneSpritePrefab)
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クラスについて

ライセンス

MITライセンスのオープンソースを使用させていただきました
「xLua」ライセンスのページへ

解説/実装:na24ddr