Unity3D之UGUI 应用案例详解(目录界面、游戏场景及CD技能、开始界面、菜单开发、角色面板及背包系统、关卡界面、任务列表、设置界面、登录界面)

目录界面

游戏场景及CD技能


开始界面

菜单开发

角色面板及背包系统

关卡界面

任务列表

设置界面

登录界面

关键代码

GameManager

using UnityEngine;
using System.Collections;

public class GameManager : MonoBehaviour {


    public void OnStratGame(int sceneIndex) {
        Application.LoadLevel(sceneIndex);
    }
}

LevelButtonScrollList



using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class LevelButtonScrollList : MonoBehaviour, IBeginDragHandler,IDragHandler,IEndDragHandler{
    //持有引用
    private ScrollRect scrollRect;

    //定义页面的数组
    private float[] pageArray = new float[] {0, 0.333f,0.666f,1};

    //差值运算 滑动页面时有缓慢效果;
    private float targetHorizontalPosition=0;

    //滑行速度
    public float smoothSpeed = 4;

    //定义拖拽标志位
    private bool isDraging=false;


    //定义选中的数组;
    public Toggle[] toggle;
    void Start () {
    //获取组件
        scrollRect=this.GetComponent<ScrollRect>();
    }
    
    
    void Update () {
        //当拖拽结束后才执行吃函数
        if (!isDraging)
        {
            //差值运算
            scrollRect.horizontalNormalizedPosition = Mathf.Lerp(scrollRect.horizontalNormalizedPosition, targetHorizontalPosition, Time.deltaTime * smoothSpeed);//参数1:起始位置 参数2:目标位置 参数3:时间变化

        }

    
    }

    //滑动开始
    public void OnBeginDrag(PointerEventData eventData)
    {
        //开始拖拽
        isDraging = true;
    }

    /// <summary>
    /// 控制滑动列表按照页数滚动
    /// </summary>
    /// <param name="eventData"></param>
    public void OnEndDrag(PointerEventData eventData)//滑动结束
    {
        //拖拽结束
        isDraging = false;

       //滑动结束后获取相应的位置;从而来通过滑动条控制页数
       Vector2 temp = scrollRect.normalizedPosition;//二维向量;
        Debug.Log(temp);
        //换可以通过水平位置获取活动值;
        float  posx = scrollRect.horizontalNormalizedPosition;

        //定义下标
        int index = 0;
        //比较位移值;
        float offset = Mathf.Abs(pageArray[index] - posx );//取 区间值减移动位置值
        
        //遍历数组
        for (int i = 1; i < pageArray.Length; i++)
        {
            float offsetTemp = Mathf.Abs(pageArray[i] - posx);
            //如果当前值小于滑动值;
            if (offsetTemp<offset)
            {
                //记录下标
                index = i;

                offset = offsetTemp;
            }
           
        }

        //离最近的值进行页面设置
       // scrollRect.horizontalNormalizedPosition = pageArray[index];

        targetHorizontalPosition = pageArray[index];

        //滑动到当前页数把toggle按钮设置true;
        toggle[index].isOn = true;
    }


    //注册4个公开的方法;
    public void MoveToPage1(bool isOn) {

        if (isOn)
        {
            targetHorizontalPosition = pageArray[0];
        }
    }

    public void MoveToPage2(bool isOn)
    {

        if (isOn)
        {
            targetHorizontalPosition = pageArray[1];
        }
    }

    public void MoveToPage3(bool isOn)
    {

        if (isOn)
        {
            targetHorizontalPosition = pageArray[2];
        }
    }

    public void MoveToPage4(bool isOn)
    {

        if (isOn)
        {
            targetHorizontalPosition = pageArray[3];
        }
    }



    //滑动进行时;
    public void OnDrag(PointerEventData eventData)
    {
      

    }
}

MyToggle

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class MyToggle : MonoBehaviour {
    //定义两个公开的持有引用
    public GameObject isOnGameObject;
    public GameObject isOffGameObject;
    
    //持有yinyong
    private Toggle toggle;

    void Start () {
        //获取组件
        toggle=this.GetComponent<Toggle>();
        //传递参数
        ToggleOnChange(toggle.isOn);
    }
    
    
    void Update () {
    
    }

    //注册事件
    public void ToggleOnChange(bool isOn){
        //通过传递参数判断是否隐藏;
        isOnGameObject.SetActive(isOn);
        isOffGameObject.SetActive(!isOn);

}
}

Player

using UnityEngine;
using System.Collections;

public class Player : MonoBehaviour {

    public float speed = 100;

    void Start () {
    
    }
    

    void Update () {

        this.transform.Rotate(Vector3.up * Time.deltaTime * speed);
    }

    public void ChangeSpeed(float speedNew) {
        this.speed = speedNew;
    }
}

SkillItem

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class SkillItem : MonoBehaviour {

    //定义冷却时间
    public float coldTime = 2f;
    
    //定义计时器;
    private float timer = 0;//从零开始计时
    
    //定义持有的引用
    private Image filledImage;

    //计时标志位
    private bool isStartTimer = false;

    //设置快捷键
    public KeyCode keyCode;
    void Start () {
    
        //通过查找方法获取相应的组件
        filledImage=this.transform.Find("FilledImage").GetComponent<Image>();
    }
    

    void Update () {

        //设置快捷键
        if (Input.GetKeyDown(keyCode))
        {
            //按下快捷键 表示可以开始计时;
            isStartTimer = true;
        }

    
        //判断标志位 时候可以开始计时
        if (isStartTimer)
        {
            //计时器累加
            timer += Time.deltaTime;
            //控制关键组件的比例值
            filledImage.fillAmount=(coldTime-timer)/coldTime;
            //判断计时器大于等于冷却时间 归零
            if (timer>=coldTime)
            {
                //计时器归零;
                timer = 0;
                //标志位设置
                isStartTimer = false;
                //恢复到初始值;
                filledImage.fillAmount = 0;
            }
        }
        
    }

    public void OnClick() {
     //触发点击事件。设置标志位
        isStartTimer = true;
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,408评论 4 371
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,690评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,036评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,726评论 0 221
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,123评论 3 296
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,037评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,178评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,964评论 0 213
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,703评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,863评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,333评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,658评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,374评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,195评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,988评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,167评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,970评论 2 279

推荐阅读更多精彩内容