Unity功能——通过按键设置物体朝左/右旋转(含C#转xlua版)

博文简介:

开发场景:unity的3d场景;        功能:当设定的键被按下时,进行物体朝左/右旋转;

适用范围:本文代码适用于设置3d物体朝左右旋转,也适用于设置UI对象朝左右旋转;

注:可自定义按键作为物体旋转的按键,这里使用常用的A,D键来控制物体的左右旋转;

若功能需求为:根据鼠标朝左/右旋转;限制物体旋转的角度;

可参考本人的另一篇博文:Unity功能——物体随鼠标朝左/右旋转(带角度限制)

1、监测按键触发

C#:        if (Input.GetKey(KeyCode.D)){...}

xlua:      if CS.UnityEngine.Input.GetKey(CS.UnityEngine..KeyCode.A) then ...  end

if (Input.GetKey(KeyCode.D)){...}
--C# 改 xlua版

if CS.UnityEngine.Input.GetKey(CS.UnityEngine..KeyCode.A) then
    --要实现的需求的功能代码
end
2、设置物体旋转

C#:        transform.Rotate(Vector3.forward * rotateSpeed);

xlua:     self.transform:Rotate(CS.UnityEngine.Vector3.forward * self.rotateSpeed)

transform.Rotate(- Vector3.forward * rotateSpeed);
--C# 改 xlua版,注意使用冒号调用函数

self.transform:Rotate(CS.UnityEngine.Vector3.forward * self.rotateSpeed)
3、完整功能代码

 注:使用hotfix把C#转xlua时,对应的C#脚本上需要:

(1)脚本引用using Xlua;(2)类上面添加[Hotfix]标签;(3)方法上添加[LuaCallCSharp]标签

private void MoveItem(){
    if (Input.GetKey(KeyCode.A))
        transform.Rotate(-Vector3.forward * rotateSpeed);
    else if (Input.GetKey(KeyCode.D))
        transform.Rotate(Vector3.forward * rotateSpeed);
}
xlua.private_accessible(CS.类名)
xlua.hotfix(CS.类名,'方法名',function(self)
	if CS.UnityEngine.Input.GetKey(CS.UnityEngine.KeyCode.A) then
		self.transform:Rotate(CS.UnityEngine.Vector3.forward * self.rotateSpeed)
	elseif CS.UnityEngine.Input.GetKey(CS.UnityEngine.KeyCode.D) then
		self.transform:Rotate(-CS.UnityEngine.Vector3.forward * self.rotateSpeed)
	end
end)
上一篇:去掉el-table表头右侧类名是gutter,width=17px的空白区域(包括表头样式及表格奇偶行样式和表格自动滚动)