博文简介:
开发场景: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)