Luaでよくある問題の解決法
require "uiDefine"。
エラーメッセージ: モジュール 'uiDefine' が見つかりませんでした。
fieldpackage.preload['uiDefine'] がない。
そのようなビルトイン lib'uiDefine' はありません。
回避策 require "ui.uiDefine" で。 luaベースのルートディレクトリの下で、フルパスを要求します。 資産/スクリプト/lua はルートディレクトリ
静的 パブリック クラス UnityCommonExtension
{ <未定義
静的 パブリック ボイド DestroyAllChildren ( この GameObject ターゲット )
{ <未定義
前 ( トランスフォーム 子 で 対象 . トランスフォーム )
{ <未定義
ゲームオブジェクト . デストロイ ( 子 . ゲームオブジェクト );
}
}
}
for i = 1, #headIconParent do
headIconParent[i]:DestroyAllChildren()を実行します。
終了
もし
公開 静的 クラス LuaGenConfig
{ <未定義
//ルア でC#を使うには C#標準ライブラリ、またはUnityAPI、サードパーティライブラリなどのライブラリの設定。
[ LuaCallCSharp ]
公開 静的 リスト <です。 <スパン タイプ > LuaCallCSharp = <スパン 新しい リスト <です。 <スパン タイプ >()
{ <未定義
//typeof(UnityCommonExtension)です。
}
}
エラーメッセージ: nil 値を呼び出そうとしました (メソッド 'DestroyAllChildren')
回避策
for i = 1, #headIconParent do
CS.UnityCommonExtension.DestroyAllChildren(headIconParent[i])を実行します。
終了
または LuaGenConfig それを追加し、次に headIconParent[i]:DestroyAllChildren()を実行します。
または headIconParent[i].DestroyAllChildren(headIconParent[i])
for i = 1, pairs(headIconParent) do end
エラーメッセージが表示されます。for' limitは数値でなければなりません。
解決策: for i= 1, #headIconParent do end を使用します。
また、for k, v pairs(headIconParent) do end も有効です。
C#の配列がluaに渡される。
local widgets = {}--go:GetComponentsInChildren("UIWidget",true)
ローカル widArr = InterfaceForLua.GetWidgetArray(go)。
for i = 0, widArr.Length - 1 do.
table.insert(widgets, widArr[i])
終了
しかし、c#のリストをluaに渡しても認識されない。
メソッドを定義している場合は function()#### end と書き、そうでない場合は渡されたメソッドではなく、呼び出しを実行する関数を省くようにします。
luaのメソッドの定義, : 定義: call, . 定義. c#のスタティックメソッド呼び出しでも、selfを省略してcall , : が使われます。
function UIItemIconInfo:CreateItemIcon(itemNum, parent, uniqueName)
ローカル go = ResUtil.LoadGameObject("UI/CommonIcon/ItemIconInfoLua")
ローカルスクリプト = {}
setmetatable(script,{__index = UIItemIconInfo})
script.gameObject = go
script.Data = itemNum
script.eName =uniqueName
script:InitEvent()を実行します。
script:awake()
script:onBindComplete()を実行します。
script:start()
if parent ~= nil then
parent:AddChildEx(go.transform)を実行します。
終了
go.name =string.format("アイテム%s", tostring(itemNum.ItemId))
if parent ~= nil andparent:GetComponent("UIWidget") ~= nil then
ローカル parentDepth = parent:GetComponent("UIWidget").depth。
local widgets = {} localwidArr = InterfaceForLua.GetWidgetArray(go)(インターフェースForLua.GetWidgetArray(go)
for i = 0, widArr.Length - 1 do.
table.insert(widgets, widArr[i])
終了
for k in pairs(widgets) do
ウィジェット[k].depth= ウィジェット[k].depth + parentDepth
終了
終了
スクリプトを返す
終了
function UIItemIconInfo:onBindComplete()
self:SetMask(false)を実行します。
self:ItemIconCanClick(true)を指定します。
self:AddDragScrollView(false, nil)
self:SetItemIconScale(Vector3.one)を設定します。
self:SetBackGroundVisable(true,true)です。
self:SetSelectHide(true)を指定します。
終了
関数 UIItemIconInfo:SetMask(bVis)
マスク:SetActive(bVis)
終了
シングルトンで self を使用する
以上が、luaのシングルトンの使い方です。
ローカルウィジェット = {}
local widArr = InterfaceForLua.GetWidgetArray(go) - これは、c#から渡されたUIWidget[]です。
logError(typeof(widgets). " ". .typeof(widArr)) -- テーブル userdata
-- widgets = widArr -- うまくいけば、テーブルは等しく、それらは参照であり、一方が他方を変更します。
table.insert(widgets,widArr) --うまくいけば、テーブルの挿入は、別のテーブルです。
エラーメッセージ: ユーザーデータ値の長さを取得しようとしました。
回避策:userdata を繰り返し、テーブルを挿入します。
for i = 0, widArr.Length - 1 do
table.insert(ウィジェット,widArr[i])
終了
--------------forループ
for i = 1, #widgets do
ウィジェット[i].深さ = ウィジェット[i].深さ + parentDepth
終了
for k in pairs(widgets) do
print(k)
ウィジェット[k].深さ = ウィジェット[k].深さ + parentDepth
終了
------- 両方とも同じことをする
ローカル widArr = InterfaceForLua.GetWidgetArray(go) 5.2 以前の長さを取得するためにローカル変数 widArr.Length を追加しました。 テーブル .getn
LuaException: ui.CommonIcon.UIItemIconInfoLua:157: nil値(フィールド 'depth')に対して演算を行おうとした結果です。
スタックトレースバック。
ui.CommonIcon.UIItemIconInfoLua:157:in フィールド 'CreateItemIcon'(アイテムアイコン)
解決方法
LuaException: c# exception:Non-static method requires atarget.,stack: atSystem.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlagsinvokeAttr, System.Reflection.Binder binder, System.Object[] parameters,System.Globalization.CultureInfo culture) [0x000fe] in/Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:236
MethodBase.Invoke (System.Object obj, System.Object[]parameters) [0x00000] in/Users/builduser/buildslave/mono/build /mcs/class/corlib/System.Reflection/MethodBase.cs:115
atXLua.OverloadMethodWrap.Call (IntPtr L) [0x00151] inE:\redemptionproject╱V2AssetsⒸLuaSrcⒸMethodWarps╱Cache.cs: 220
at XLua.MethodWrap.Call(IntPtr L) [0x00036] inE:\redemptionV2Assets╱XLuaSrc╱MethodWarpsCache.cs:260
スタックトレースバック。
[C]: フィールド 'SetActive' で。
解決策:'SetActive' はスタティックメソッドではないので、次のようにアクセスします。
UIItemIconInfo script = go:GetComponent('UIItemIconInfo')です。
エラーメッセージ: 'script'付近のシンタックスエラー
回避策:ローカルとして宣言するだけ
go.transform.localScale = CS.UnityEngine.Vector3(0.7f, 0.7f, 0.7f) (luaではnewなし)
エラーメッセージ: '0.7f'付近の数値が不正です。
解決策:fを削除してください。luaにはintegerやfloatといった型はなく、数値で表現されます。
文字列値に対して算術演算を行おうとする。
スタックトレースバック。
解決方法 これは現在、c#の構文で書かれており、+を.に変えています。例えば print("AAAAAAAbbb: " + tostring(Data.Reward.Count)) のような感じです。
LuaException: error loading modulecoruntine_test from resource, coruntine_test.lua:29: syntax error near 'local'.
スタックトレースバック。
[C]:in ?
[C]:in function 'require'
[string"chunk"]:1: メインチャンク内
解決策:29行目の呼び出しでチェックを配置し、requireの場所に来る、例えば、check = number assignment
関連
-
luaのクロージャとテーブルや関数のいくつかの表現を理解する。
-
Vimを使ったLua開発環境の構築方法詳細
-
Lua連携プログラムcoroutineの紹介とメリット・デメリット
-
REDISのNULL判定を読み込むサンプルコード
-
Lua cjsonモジュールのコンパイル時の注意点とエラーの解決方法
-
Luaにおけるif文の使い方を説明します。
-
Luaの繰り返し...ループまでチュートリアル
-
Luaチュートリアル(XVI)。システムライブラリ (os ライブラリ)
-
Luaチュートリアル(6):コンパイルと実行でエラーが発生した場合
-
Rubyメタプログラミング技術 (Ruby Metaprogramming techniques)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン