27.xLua热补丁-属性和索引器替换
27.1 知识点
准备工作
准备一个有属性和索引器的测试类
public class Lesson27_Test : MonoBehaviour
{
public int[] array = new int[] { 1, 2, 3 };
//属性
public int Age
{
get
{
Debug.Log("C#属性get");
return 666;
}
set
{
Debug.Log("C#属性set" + value);
}
}
//索引器
public int this[int index]
{
get
{
Debug.Log($"C#索引器get index:{index}");
if (index >= array.Length || index < 0)
{
Debug.Log("索引不正确");
return -1;
}
return array[index];
}
set
{
if (index >= array.Length || index < 0)
{
Debug.Log("索引不正确");
return;
}
Debug.Log($"C#索引器set index:{index} value:{value}");
array[index] = value;
}
}
}
启动Lua脚本 并调用属性和索引器相关
LuaManager.Instance.Init();
LuaManager.Instance.DoLuaFile("Lesson27_xLua热补补丁_属性和索引器替换");
Lesson27_Test test = this.gameObject.AddComponent<Lesson27_Test>();
test.Age = 100;
Debug.Log(test.Age);
test[99] = 100;
Debug.Log(test[9999]);
属性替换
--属性热补丁替换 xet_属性名 把属性当做成员函数替换 set多一个value参数
xlua.hotfix(CS.Lesson27_Test, {
--get_属性名 是得到属性 的方法
get_Age = function(self)
print("Lua属性get")
return 999;
end,
--set_属性名 是设置属性 的方法
set_Age = function(self, value)
print("Lua属性set"..value)
end,
})
索引器替换
--索引器热补丁替换 xet_Item 把索引器当做成员函数替换 都有一个index参数 set多一个value参数
xlua.hotfix(CS.Lesson27_Test, {
--get_Item 通过索引器获取
get_Item = function(self, index)
print("Lua索引器get index:"..index)
return 999
end,
--set_Item 通过索引器设置
set_Item = function(self, index, value )
print("Lua索引器set index:"..index .." value:" ..value)
end
})
27.2 知识点代码
Lesson27_xLua热补丁_属性和索引器替换.lua
print('我是Lua脚本 Lesson27_xLua热补丁_属性和索引器替换')
print("*********知识点一 属性替换***********")
--属性热补丁替换 xet_属性名 把属性当做成员函数替换 set多一个value参数
xlua.hotfix(CS.Lesson27_Test, {
--get_属性名 是得到属性 的方法
get_Age = function(self)
print("Lua属性get")
return 999;
end,
--set_属性名 是设置属性 的方法
set_Age = function(self, value)
print("Lua属性set"..value)
end,
})
print("*********知识点二 索引器替换***********")
--索引器热补丁替换 xet_Item 把索引器当做成员函数替换 都有一个index参数 set多一个value参数
xlua.hotfix(CS.Lesson27_Test, {
--get_Item 通过索引器获取
get_Item = function(self, index)
print("Lua索引器get index:"..index)
return 999
end,
--set_Item 通说索引器设置
set_Item = function(self, index, value )
print("Lua索引器set index:"..index .."value:" ..value)
end
})
Lesson27_xLua热补丁_属性和索引器替换
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
public class Lesson27_xLua热补丁_属性和索引器替换 : MonoBehaviour
{
void Start()
{
LuaManager.Instance.Init();
LuaManager.Instance.DoLuaFile("Lesson27_xLua热补丁_属性和索引器替换");
Lesson27_Test test = this.gameObject.AddComponent<Lesson27_Test>();
test.Age = 100;
Debug.Log(test.Age);
test[99] = 100;
Debug.Log(test[9999]);
}
}
[Hotfix]
public class Lesson27_Test : MonoBehaviour
{
public int[] array = new int[] { 1, 2, 3 };
//属性
public int Age
{
get
{
Debug.Log("C#属性get");
return 666;
}
set
{
Debug.Log("C#属性set" + value);
}
}
//索引器
public int this[int index]
{
get
{
Debug.Log($"C#索引器get index:{index}");
if (index >= array.Length || index < 0)
{
Debug.Log("索引不正确");
return -1;
}
return array[index];
}
set
{
if (index >= array.Length || index < 0)
{
Debug.Log("索引不正确");
return;
}
Debug.Log($"C#索引器set index:{index} value:{value}");
array[index] = value;
}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com