FGUI代碼筆記


前面的面板會(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();
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容