Unity3D使用UGUI开发原生虚拟摇杆
作者:即步 发布时间:2021-10-04 17:28:26
标签: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);
接下来就可以运行我们的游戏,观察主角移动旋转位置。
来源:https://blog.csdn.net/qq_33747722/article/details/79971527
0
投稿
猜你喜欢
- 1、注解@PathVariable:将请求url中的占位符参数与控制器方法入参绑定起来(Rest风格请求)@RequestHeader:获取
- 目录方案一,更改启动项方案二,禁用检查应用程序的CAS发布者策略方案一,更改启动项出问题应用的启动项是使用的默认设置,查看App.g.cs文
- 以下总结是2016/3/23在做一个网站时遇到的一个功能模块,现在将总结从为知笔记上搬家到CSDN,与大家共享,欢迎指正。0.准备工作 0.
- 在没介绍正文之前,先给大家介绍下websocket的背景和原理:背景在浏览器中通过http仅能实现单向的通信,comet可以一定程度上模拟双
- springboot前端传参date类型后台处理先说结论建议大家直接使用@JsonFormat,原因如下: 1、针对json格式
- ID说明 设备唯一标识符(UDID):设备唯一硬件标识,设备生产时根据特定的硬件信息生成,可用于设备的生产环境及合法性校验。不对第
- 目录了解程序集如何在C#.NET中加载程序集,模块和引用.NET中的程序集绑定绑定重定向当问题开始发生时故障排除边注References了解
- 前言在开发过程中,会遇到很多的实体需要将查出的数据处理为下拉或者级联下拉的结构,提供给前端进行展示。在数据库查出的结构中,可能是集合<
- 前言有时候我们在项目中,会用到一些本地 jar 包文件,比如隔壁公司自己打包的;此时无法从maven远程仓库拉取;那么我们可以考虑把 jar
- 在日常生活中,我们使用maven下载需要的jar包,但是很多的时候由于中央仓库没有,所以我们没有办法下载到需要的jar包,手动去下载上,然后
- 前言我们在开发Web应用时,肯定要为用户提供上传的功能,比如用户上传一张图像作为头像等。为了能上传文件,我们必须将表单的method设置为P
- 1.shiro安全框架Apache Shiro 是一个强大易用的 Java 安全框架,提供了认证、授权、加密和session会话管理等功能,
- 什么是抽象类什么是抽象类呢?抽象类顾名思义就是很抽象,就是当我们没有足够的信息去描述这个类的时候我们就可以先不用描述,这样的类就是抽象类。用
- java实现数据加密问题,具体代码如下所示:package Array;import java.util.Scanner;/*某个公司采用电
- 引出泛型我们通过如下的示例,引出为什么泛型的概念。public class Test {public static void main(St
- 在使用Java集合的时候,都需要使用Iterator。但是java集合中还有一个迭代器ListIterator,在使用List、ArrayL
- 一、引言使用原生的zookeeper时候会遇到watcher一次注册生效一次等情况,因此使用curatorcurator是Netflix公司
- 简介反射是Java编程语言中的一个特性。它允许执行的Java程序检查或 操作 自身,并操作程序的内部属性。例如,Java类可以获取其所有成员
- 一:什么是逆行工程。MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDB
- 一、基本回收算法 1. 引用计数(Reference Counting) 比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一