Unity3D使用UGUI开发原生虚拟摇杆
程序员文章站
2022-06-09 10:20:59
在unity3d中开发虚拟摇杆方式有比较多,可以使用easytouch、fairygui等插件来开发。本文给大家介绍使用unity3d的原生ugui来开发出自己的虚拟摇杆,这样可以减少游戏资源包的大小...
在unity3d中开发虚拟摇杆方式有比较多,可以使用easytouch、fairygui等插件来开发。本文给大家介绍使用unity3d的原生ugui来开发出自己的虚拟摇杆,这样可以减少游戏资源包的大小。
先展示下效果图:
现在开发我们的开发
创建一个image1,并且在image1创建一个子对象image2
在image1中挂载一个自定义脚本,这里我命名为joystick
脚本代码如下
using system.collections; using system.collections.generic; using unityengine; using unityengine.eventsystems; using unityengine.ui; public class joystick : scrollrect { private float mradius; public system.action<recttransform> joystickmovehandle; public system.action<recttransform> joystickendhandle; protected override void start() { mradius = this.getcomponent<recttransform>().sizedelta.x * 0.5f; this.content.gameobject.setactive(false); } public override void ondrag(pointereventdata eventdata) { base.ondrag(eventdata); this.content.gameobject.setactive(true); //虚拟摇杆移动 var contentpostion = this.content.anchoredposition; if (contentpostion.magnitude > mradius) { contentpostion = contentpostion.normalized * mradius; setcontentanchoredposition(contentpostion); } //旋转 if (content.anchoredposition.y != 0) { content.eulerangles = new vector3(0, 0, vector3.angle(vector3.right, content.anchoredposition) * content.anchoredposition.y / mathf.abs(content.anchoredposition.y) - 90); } } private void fixedupdate() { if (this.content.gameobject.activeinhierarchy) { if (joystickmovehandle != null) { joystickmovehandle(this.content); } } } public override void onenddrag(pointereventdata eventdata) { base.onenddrag(eventdata); this.content.gameobject.setactive(false); if (joystickendhandle != null) { joystickendhandle(this.content); } } }
然后将image2拖动到content属性变量里
这样就可以移动并且拖动我们的虚拟摇杆了
接下来要让我们的游戏主角跟随我们的摇杆移动而移动
在我们的主角儿挂载一个自定义脚本
在start方法里添加代码:
mjoystick = gameobject.find("joystick").getcomponent<joystick>(); mjoystick.joystickmovehandle = joystickhandle; mjoystick.joystickendhandle = joystickendhandle;
其中joystickhandle方法代码为:
transform.eulerangles = new vector3(0, -content.eulerangles.z, 0); transform.translate(vector3.forward * time.deltatime * mmovespeed);
接下来就可以运行我们的游戏,观察主角移动旋转位置。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 七十一种网络故障及其解决办法一览
下一篇: 避免用例驱动的坑