【ulua入门】(2) 动态实例化GameObject,然后更改UGUI元素的值,使用案件移动物体

参考链接 :  http://www.manew.com/thread-91203-1-1.html


在这里下载ulua : https://github.com/jarjin/LuaFramework_UGUI


这是第二篇关于ulua的博客,关于基础的部分,请看 第一篇。


首先,我们新建一个 TestComponemt.cs 脚本,使用它来处理跟lua脚本的交互


using UnityEngine;
using System.Collections;
using LuaInterface;
using LuaFramework;
using UnityEngine.UI;

namespace LuaFramework
{
    public class TestComponemt : MonoBehaviour
    {
        public LuaTable table;

         //添加监听
       public static void AddButtonClick(GameObject go, LuaFunction luafunc) 
       {
              if (go == null || luafunc == null) 
                     return;

              Button btn = go.GetComponent

里面的AddButtonClick, Text, Add 三个方法,我们会在之后使用。


然后制作如下的简单UI界面和cube

【ulua入门】(2) 动态实例化GameObject,然后更改UGUI元素的值,使用案件移动物体_第1张图片

并且把它们放到如图所示的文件夹内,制作成prefab。


然后找到 Packager.cs 脚本,添加如下代码:

【ulua入门】(2) 动态实例化GameObject,然后更改UGUI元素的值,使用案件移动物体_第2张图片


然后我们来写 myTestLua.lua 的代码,如下:

 myTestLua = { name = "myTestLua"}

local go
local cube

function myTestLua:Awake()
	print("Awake  + "..self.name)
	LuaHelper = LuaFramework.LuaHelper;
	resMgr = LuaHelper.GetResManager();
	resMgr:LoadPrefab('mytestpanel', {'myTestPanel', 'Cube'}, OnFinishLoad)
	resMgr:LoadPrefab('cube', {'Cube'}, OnCubeLoadFinish)
	print("Awake  + "..self.name)
end

function OnFinishLoad(objs)

	go = UnityEngine.GameObject.Instantiate(objs[0]);
	local parent = UnityEngine.GameObject.Find("Canvas");
	go.transform.parent = parent.transform;
	go.transform.localScale = Vector3.one;
	go.transform.localPosition = Vector3.zero;

	local btn = go.transform:FindChild("Button").gameObject;
	LuaFramework.TestComponemt.AddButtonClick(btn, OnClick);
end

function OnCubeLoadFinish(objs)
	cube = UnityEngine.GameObject.Instantiate(objs[0])
	print("load finish")
	UpdateBeat:Add(Update, cube)
end

function Update()
	local Input = UnityEngine.Input
	local h = Input.GetAxis("Horizontal")
	local v = Input.GetAxis("Vertical")

	local x = cube.transform.position.x + h
	local y = cube.transform.position.y + v
	cube.transform.position = Vector3.New(x, y, 0)
end

function OnClick()
	local text = go.transform:FindChild("Text").gameObject;
	print("can change text?")
	text:GetComponent(typeof(UnityEngine.UI.Text)).text = "Hello, LuaFramework";
	--LuaFramework.TestComponemt.Text(text, "Hello, LuaFramework");
	print("ok?")
end

function myTestLua:Update()

end

function myTestLua:New(obj)
	local o = {}
	setmetatable(o, self)
	self.__index = self
	return o
end

function testPrint()
	print("hello, LuaFramework  "..self.name)
end


return myTestLua


最后,运行程序,点击button按钮,点击WASD键,程序运行正常。


【ulua入门】(2) 动态实例化GameObject,然后更改UGUI元素的值,使用案件移动物体_第3张图片


如有不懂,欢迎评论

你可能感兴趣的:(uLua,uLua)