当前位置:网站首页>Fairygui joystick
Fairygui joystick
2022-07-06 12:39:00 【SQ Liu】
FairyGUI rocker
Material resources :
One 、 preparation
1、 establish FairyGUI The new project
2、 Import material
3、 The new button
4、 Edit button
5、 Set the scope
6、 Set correlation
7、 Packaging releases
Two 、Unity It shows that
1、 establish Unity The new project
2、 Import FairyGUI Of unity Bao He DOTween package
3、Unity It shows that
3、 ... and 、 Script control
1、 newly build 2 Script
One is RockingBarMain, Need to be mounted on UIPanel On ; The other is the script of the rocker itself RockingBar.
2、 coded
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using FairyGUI;
using DG.Tweening;
public class RockingBar : EventDispatcher // Event sending and receiving class
{
// The monitor of the event
public EventListener onMove {
get; private set; } // Set a security permission
public EventListener onEnd {
get; private set; }
//mainUI The object in
private GButton rockingbarButton;
private GObject thumb;
private GObject touchArea;
private GObject center;
// Properties of the rocker
private float initX;
private float initY;
private float startStageX;
private float startStageY;
private float lastStageX;
private float lastStageY;
private int touchID;
private int radius {
get; set; }
private Tweener tweener;
public RockingBar(GComponent mainUI)
{
onMove = new EventListener(this,"onMove");
onEnd = new EventListener(this, "onEnd");
rockingbarButton = mainUI.GetChild("RockingBar").asButton;
rockingbarButton.changeStateOnClick = false;
thumb = rockingbarButton.GetChild("thumb");
touchArea = mainUI.GetChild("RockingBarTouchArea");
center = mainUI.GetChild("RockingBarCenter");
initX = center.x + center.width / 2;
initY = center.y + center.height / 2;
touchID = -1;
radius = 150;
touchArea.onTouchBegin.Add(OnTouchBegin);
touchArea.onTouchMove.Add(OnTouchMove);
touchArea.onTouchEnd.Add(OnTouchEnd);
}
// Start touching
private void OnTouchBegin(EventContext context)
{
if (touchID == -1) // First touch
{
InputEvent inputEvent = (InputEvent)context.data;
touchID = inputEvent.touchId;
if (tweener != null)
{
tweener.Kill(); // Kill the last animation
tweener = null;
}
Vector2 localPos = GRoot.inst.GlobalToLocal(new Vector2(inputEvent.x, inputEvent.y));
float posX = localPos.x;
float posY = localPos.y;
rockingbarButton.selected = true;
lastStageX = posX;
lastStageY = posY;
startStageX = posX;
startStageY = posY;
center.visible = true;
center.SetXY(posX - center.width / 2, posY - center.height / 2);
rockingbarButton.SetXY(posX - rockingbarButton.width / 2, posY - rockingbarButton.height / 2);
float deltaX = posX - initX;
float deltaY = posY - initY;
float degrees = Mathf.Atan2(deltaY, deltaX) * 180 / Mathf.PI; // The angle of arc
thumb.rotation = degrees + 90;
context.CaptureTouch();
}
}
// Mobile touch
private void OnTouchMove(EventContext context)
{
InputEvent inputEvent = (InputEvent)context.data;
if (touchID != -1 && inputEvent.touchId == touchID)
{
Vector2 localPos = GRoot.inst.GlobalToLocal(new Vector2(inputEvent.x, inputEvent.y));
float posX = localPos.x;
float posY = localPos.y;
float moveX = posX - lastStageX;
float moveY = posY - lastStageY;
lastStageX = posX;
lastStageY = posY;
float buttonX = rockingbarButton.x + moveX;
float buttonY = rockingbarButton.y + moveY;
float deltaX = buttonX + rockingbarButton.width / 2 - startStageX;
float deltaY = buttonY + rockingbarButton.height / 2 - startStageY;
float rad = Mathf.Atan2(deltaY, deltaX);
float degree = rad * 180 / Mathf.PI;
thumb.rotation = degree + 90;
// set range
float maxX = radius * Mathf.Cos(rad);
float maxY = radius * Mathf.Sin(rad);
if (Mathf.Abs(deltaX) > Mathf.Abs(maxX))
{
deltaX = maxX;
}
if (Mathf.Abs(deltaY) > Mathf.Abs(maxY))
{
deltaY = maxY;
}
buttonX = startStageX + deltaX;
buttonY = startStageY + deltaY;
rockingbarButton.SetXY(buttonX - rockingbarButton.width / 2, buttonY - rockingbarButton.height / 2);
onMove.Call(degree);
}
}
// End touch
private void OnTouchEnd(EventContext context)
{
InputEvent inputEvent = (InputEvent)context.data;
if (touchID != -1 && inputEvent.touchId == touchID)
{
touchID = -1;
thumb.rotation = thumb.rotation + 180;
center.visible = false;
tweener = rockingbarButton.TweenMove(new Vector2(initX - rockingbarButton.width / 2, initY - rockingbarButton.height / 2), 0.3f).OnComplete(() =>
{
tweener = null;
rockingbarButton.selected = false;
thumb.rotation = 0;
center.visible = true;
center.SetXY(initX - center.width / 2, initY - center.height / 2);
;
}
);
}
onEnd.Call();
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using FairyGUI;
public class RockingBarMain : MonoBehaviour
{
private GComponent mainUI;
private GTextField gTextField;
private RockingBar rockingBar;
void Start()
{
mainUI = GetComponent<UIPanel>().ui;
gTextField = mainUI.GetChild("n4").asTextField;
rockingBar = new RockingBar(mainUI);
rockingBar.onMove.Add(RockingBarMove);
rockingBar.onEnd.Add(RockingBarEnd);
}
// Update is called once per frame
void Update()
{
}
private void RockingBarMove(EventContext context)
{
float degree = (float)context.data;
gTextField.text = degree.ToString();
}
private void RockingBarEnd()
{
gTextField.text = "";
}
}
Four 、 All implementation
边栏推荐
- Problèmes avec MySQL time, fuseau horaire, remplissage automatique 0
- PT OSC deadlock analysis
- Intermediate use tutorial of postman [environment variables, test scripts, assertions, interface documents, etc.]
- 单片机蓝牙无线烧录
- ES6 grammar summary -- Part 2 (advanced part es6~es11)
- In 2020, the average salary of IT industry exceeded 170000, ranking first
- Custom view puzzle getcolor r.color The color obtained by colorprimary is incorrect
- Esp8266 uses Arduino to connect Alibaba cloud Internet of things
- FairyGUI摇杆
- [offer18] delete the node of the linked list
猜你喜欢
C programming exercise
Working principle of genius telephone watch Z3
Latex learning
SVN更新后不出现红色感叹号
Gravure sans fil Bluetooth sur micro - ordinateur à puce unique
level16
Intermediate use tutorial of postman [environment variables, test scripts, assertions, interface documents, etc.]
程序设计大作业:教务管理系统(C语言)
Classification, understanding and application of common methods of JS array
(三)R语言的生物信息学入门——Function, data.frame, 简单DNA读取与分析
随机推荐
ES6 grammar summary -- Part 2 (advanced part es6~es11)
基於Redis的分布式ID生成器
MySQL error warning: a long semaphore wait
1041 Be Unique (20 point(s))(哈希:找第一个出现一次的数)
MySQL takes up too much memory solution
(4) Data visualization of R language -- matrix chart, histogram, pie chart, scatter chart, linear regression and strip chart
Force buckle 1189 Maximum number of "balloons"
Classification, understanding and application of common methods of JS array
[Nodejs] 20. Koa2 onion ring model ----- code demonstration
Unity3D,阿里云服务器,平台配置
Who says that PT online schema change does not lock the table, or deadlock
JS regular expression basic knowledge learning
Servlet
Esp8266 uses Arduino to connect Alibaba cloud Internet of things
level16
SVN更新后不出现红色感叹号
MySQL时间、时区、自动填充0的问题
燕山大学校园网自动登录问题解决方案
Pat 1097 duplication on a linked list (25 points)
ESP8266连接onenet(旧版MQTT方式)