前面的面板會(huì)遮擋后面的面板. 即使是空白的. 除非勾選 點(diǎn)擊穿透 可穿透空白區(qū)域
如果圖片大小不對(duì). 用縮放來(lái)調(diào)整大小
動(dòng)效播放、屬性設(shè)置
public class 包1 : MonoBehaviour
{
GComponent 主ui;
GComponent 戰(zhàn)斗面板;
float 開(kāi)始值, 結(jié)束值;
void Start()
{
主ui = GetComponent<UIPanel>().ui;
戰(zhàn)斗面板 = UIPackage.CreateObject("包2", "戰(zhàn)斗組").asCom;
戰(zhàn)斗面板.GetTransition("t0").SetHook("戰(zhàn)斗標(biāo)簽", 增加攻擊力Fun);
主ui.GetChild("n0").onClick.Add(() =>
{
播放動(dòng)效(戰(zhàn)斗面板);
});
}
// Update is called once per frame
void Update()
{
}
void 播放動(dòng)效(GComponent 播放者)
{
主ui.GetChild("n0").visible = false;
GRoot.inst.AddChild(播放者);
Transition 動(dòng)效 = 播放者.GetTransition("t0");
開(kāi)始值 = 10000;
結(jié)束值 = 開(kāi)始值 + 2500;
播放者.GetChild("n3").text = 開(kāi)始值.ToString();
播放者.GetChild("n6").text = 結(jié)束值.ToString();
動(dòng)效.Play(() =>
{
主ui.GetChild("n0").visible = true;
GRoot.inst.RemoveChild(播放者);
});
}
void 增加攻擊力Fun()
{
DOTween.To(
() => 開(kāi)始值,
x => {戰(zhàn)斗面板.GetChild("n3").text = Mathf.Floor(x).ToString();},
結(jié)束值,
0.3f).SetEase(Ease.Linear).SetUpdate(true);
}
}
循環(huán)列表
public class 循環(huán)列表fgui : MonoBehaviour
{
GComponent 主面板;
GList 列表;
void Start()
{
主面板 = GetComponent<UIPanel>().ui;
列表 = 主面板.GetChild("列表1").asList;
列表.SetVirtualAndLoop();
列表.itemRenderer = 渲染列表;
列表.numItems = 5;
列表.scrollPane.onScroll.Add(距離大小效果);
距離大小效果();
}
void 渲染列表(int index,GObject obj)
{
GButton g按鈕 = obj.asButton;
g按鈕.icon = UIPackage.GetItemURL("循環(huán)列表包", "n" + (index + 1));
}
void 距離大小效果()
{
float 列表中心 = 列表.scrollPane.posX + 列表.viewWidth / 2;// 最左邊的點(diǎn)x+寬/2
for(int i=0;i<列表.numChildren;i++)
{
GObject 圖片 = 列表.GetChildAt(i);
float 圖片中心x = 圖片.x + 圖片.width / 2;//每張圖片各自的中心
float 圖片寬度 = 圖片.width;
float 離中心距離 = Mathf.Abs(列表中心 - 圖片中心x);
if(離中心距離<圖片寬度)//離中心距離比較近.就放大.
{
float 距離大小 = 1 + (1 - 離中心距離 / 圖片寬度) * 0.2f;//如果離中心距離越遠(yuǎn).得出來(lái)的值就越小
//但是總體是大于1的.
圖片.SetScale(距離大小, 距離大小);
}
else//離比較遠(yuǎn)的就不放大了.
{
圖片.SetScale(1, 1);
}
}
}
// Update is called once per frame
void Update()
{
}
}
搖桿
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using FairyGUI;
public class 遙感主面板 : MonoBehaviour
{
GComponent 主面板;
GTextField 文本輸入;
遙感 遙感_;
void Start()
{
主面板 = GetComponent<UIPanel>().ui;
文本輸入 = 主面板.GetChild("角度txt").asTextField;
遙感_ = new 遙感(主面板);
遙感_.OnMove.Add(YaoganYidong);
遙感_.OnEnd.Add(YaoganJieshu);
}
// Update is called once per frame
void Update()
{
}
void YaoganYidong(EventContext neirong)
{
float jiaodu = (float)neirong.data;
文本輸入.text = jiaodu.ToString();
}
void YaoganJieshu()
{
文本輸入.text = "結(jié)束";
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using FairyGUI;
using DG.Tweening;
public class 遙感 : EventDispatcher//時(shí)間調(diào)節(jié)
{
public EventListener OnMove;
public EventListener OnEnd;
//面板里的對(duì)象
GButton 遙感按鈕;//注意.他的xy是在左上角的(默認(rèn)錨點(diǎn))
GObject 滑塊;
GObject 觸摸區(qū)域;
GObject 中心;
//搖桿的屬性
float 初始x;
float 初始y;
float kaishiWeizhiX;
float kaishiWeizhiY;
float zuihouWeizhiX;
float zuihouWeizhiY;
int chumoID;//遙感的狀態(tài)
int 半徑;
GTweener donghua;
public 遙感(GComponent 主ui)
{
OnMove = new EventListener(this, "onMove");
OnEnd = new EventListener(this, "onEnd");
遙感按鈕 = 主ui.GetChild("遙感").asButton;
遙感按鈕.changeStateOnClick = false;
滑塊 = 遙感按鈕.GetChild("滑塊");
觸摸區(qū)域 = 主ui.GetChild("遙感區(qū)域");
中心= 主ui.GetChild("中心點(diǎn)");
初始x = 中心.x + 中心.width / 2;
初始y = 中心.y + 中心.height / 2;
chumoID = -1;
半徑 = 150;
觸摸區(qū)域.onTouchBegin.Add(OnKaishichumo);
觸摸區(qū)域.onTouchMove.Add(OnYidongChumo);
觸摸區(qū)域.onTouchEnd.Add(OnJieshuChumo);
}
//開(kāi)始觸摸
void OnKaishichumo(EventContext neirong)
{
if(chumoID==-1)
{
InputEvent shuruShijian = neirong.inputEvent;
chumoID = shuruShijian.touchId;
if(donghua!=null)
{
donghua.Kill();//刪除上個(gè)動(dòng)畫(huà)
donghua = null;
}
Vector2 bendiPos = GRoot.inst.GlobalToLocal(new Vector2(shuruShijian.x, shuruShijian.y));//全局位置轉(zhuǎn)換到ui的本地坐標(biāo)
float weizhiX = bendiPos.x;//這些都是鼠標(biāo)位置
float weizhiY = bendiPos.y;
遙感按鈕.selected = true;
zuihouWeizhiX = weizhiX;//這些都是鼠標(biāo)位置
zuihouWeizhiY = weizhiY;
kaishiWeizhiX = weizhiX;//這些都是鼠標(biāo)位置
kaishiWeizhiY = weizhiY;
中心.visible = true;
中心.SetXY(weizhiX - 中心.width / 2, weizhiY - 中心.width / 2);//計(jì)算.鼠標(biāo)位置為圖片中心
遙感按鈕.SetXY(weizhiX - 遙感按鈕.width / 2, weizhiY - 遙感按鈕.height / 2);
float juliX = weizhiX - 初始x;//鼠標(biāo)位置x - 搖桿.x
float juliY = weizhiY - 初始y;
float jiaodu = Mathf.Atan2(juliY, juliX) * Mathf.Rad2Deg;
滑塊.rotation = jiaodu;
neirong.CaptureTouch();//捕獲觸摸.表示已經(jīng)使用了這個(gè)觸摸事件?
}
}
void OnYidongChumo(EventContext neirong)
{
InputEvent shuruShijian = neirong.inputEvent;
if(chumoID!=-1&&shuruShijian.touchId==chumoID)//觸摸狀態(tài)是觸摸開(kāi)始的賦值
{
Vector2 shubiaoWeizhi = GRoot.inst.GlobalToLocal(new Vector2(shuruShijian.x, shuruShijian.y));//鼠標(biāo)點(diǎn)擊的位置
float weizhiX = shubiaoWeizhi.x;
float weizhiY = shubiaoWeizhi.y;
float yidongJuliX = weizhiX - zuihouWeizhiX;
float yidongJuliY = weizhiY - zuihouWeizhiY;
zuihouWeizhiX = weizhiX;
zuihouWeizhiY = weizhiY;
float anniuX = 遙感按鈕.x + yidongJuliX;//搖桿按鈕的新位置
float anniuY = 遙感按鈕.y + yidongJuliY;
float weiyiX = anniuX + 遙感按鈕.width / 2 - kaishiWeizhiX;//簡(jiǎn)單的說(shuō)就是當(dāng)前搖桿.x - 開(kāi)始時(shí)搖桿.x
float weiyiY = anniuX + 遙感按鈕.height / 2 - kaishiWeizhiY;
float hudu = Mathf.Atan2(weiyiY, weiyiX);
float jiaodu = hudu * Mathf.Rad2Deg;
滑塊.rotation = jiaodu;
//設(shè)置位移范圍
float zuidaX = 半徑 * Mathf.Cos(hudu);//cos結(jié)果可能是負(fù)數(shù)
Debug.Log(Mathf.Sin(hudu) * 半徑 + " 三角函數(shù) " + Mathf.Tan(hudu) * zuidaX);
float zuidaY = 半徑 * Mathf.Sin(hudu);
if(Mathf.Abs(weiyiX)>Mathf.Abs(zuidaX))
{
weiyiX = zuidaX;
}
if(Mathf.Abs(weiyiY)>Mathf.Abs(zuidaY))
{
weiyiY = zuidaY;
}
anniuX = kaishiWeizhiX + weiyiX;
anniuY = kaishiWeizhiY + weiyiY;
遙感按鈕.SetXY(anniuX - 遙感按鈕.width / 2, anniuY - 遙感按鈕.height / 2);
OnMove.Call(jiaodu);
}
}
void OnJieshuChumo(EventContext neirong)
{
InputEvent shuruShijian = neirong.inputEvent;
if (chumoID != -1 && shuruShijian.touchId == chumoID)
{
chumoID = -1;
滑塊.rotation = 滑塊.rotation + 180;
中心.visible = false;
donghua = 遙感按鈕.TweenMove(new Vector2(初始x - 遙感按鈕.width / 2, 初始y - 遙感按鈕.height / 2), 0.3f).OnComplete(
() =>
{
donghua = null;
遙感按鈕.selected = false;
滑塊.rotation = 0;
中心.visible = true;
中心.SetXY(初始x - 中心.width / 2, 初始y - 中心.height / 2);
});
}
OnEnd.Call();
}
}