Unity游戏开发之排行榜(采用PlayerPrefs存储)

Posted 计算机秃头少女酱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity游戏开发之排行榜(采用PlayerPrefs存储)相关的知识,希望对你有一定的参考价值。

   首先找一些排行榜的背景图片当作排行榜的背景,也可以添加前三名的排名图片,将前三名的排名变成图片显示出来,我这里没做注解。也可以在建立的空UI中添加Rect Transform可以让排行榜有一个滑动效果,注意添加这个组件一定要添加Image组件。

源代码:

RankItem 类代码:

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

public class RankItem : MonoBehaviour

    private Text pm = null;
    private Text xm = null;
    private Text fs = null;
  
    public void Init(int rank,string name,string score)
     
        pm = transform.Find("pm").GetComponent<Text>();
        xm = transform.Find("xm").GetComponent<Text>();
        fs = transform.Find("fs").GetComponent<Text>();
        pm.text = "第" + rank + "名";
        xm.text = name;
        fs.text = " " + score;
   

    

RankListPanel 类源代码:

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

public class RankListPanel : MonoBehaviour

    private RankItem  RankItemmould; //模板
    private Transform RankItemparent;   //父亲
    private List<RankItem > RankItemList ;   //列表
    void Start()
   
        //初始化
        RankItemmould = transform.Find("rankItem").GetComponent<RankItem >();
        RankItemparent = transform.Find("scrollView/viewPort/content/grip");               
        RankItemList = new List<RankItem>();
        RankItemmanage.Instance.save("张三", 27000);
        RankItemmanage.Instance.save("王二",28000);
        RankItemmanage.Instance.save("赵六", 26000);
        RankItemmanage.Instance.save("拉拉啦",31000);
        RankItemmanage.Instance.save("李四儿", 34000);
        RankItemmanage.Instance.save("孙六", 32000);


        Init();
   

    public void Init()
   
        List<Rank> _allRankInfoList = RankItemmanage .Instance.get ();
        if(_allRankInfoList.Count <= 0)
       
            return;
       
        for (int i = 0; i < _allRankInfoList.Count; i++)
       
            RankItem rankItem = GetARankItem ();
            rankItem.Init(i+1, _allRankInfoList[i].name, ""+ _allRankInfoList[i].score );  
       
   
    //新的排行项目
    RankItem CreateANewRankItem()
       
            GameObject go = Instantiate(RankItemmould.gameObject) as GameObject;    //复制排行相对应
        RankItem Newpaihang = go.GetComponent<RankItem>();
        Newpaihang.transform.SetParent(RankItemparent);
        RankItemList.Add(Newpaihang);
            return Newpaihang;
       

        RankItem  GetARankItem()
       
        RankItem newrankItem = CreateANewRankItem ();
            return newrankItem;
       

    

RankItemmanage类源代码:

using System.Collections.Generic;
using UnityEngine;

//排行信息管理
public class Rank

    public string name = "";
    public int score = 0;

public class RankItemmanage

    private List <Rank > Linelist=null;  //
    private static RankItemmanage Xpaihang = null;
    private int max=10;
    public static RankItemmanage Instance
   
        get
       
            if (Xpaihang == null)
           
                Xpaihang = new RankItemmanage();
           
            return Xpaihang;
       
   
    //存储信息
  public void save(string name,int score)
   
        Analyze();
        //最新信息加入列表
        Rank rankInfo = new Rank();
        rankInfo.name = name;
        rankInfo.score = score ;
        Linelist.Add(rankInfo);

        //新加入的信息进行排序
        //对超过排名的信息进行抹去
        Linelist.Sort(CompareSpeedFromBigToSmall); 
        if (Linelist.Count > max)
       
            Linelist.RemoveAt(Linelist.Count - 1);
       

        string Memory = "";   //所有排行信息
        for(int i=0;i< Linelist.Count; i++)  
       
            //每一个排行信息
            string HMemory = "";
            HMemory += Linelist[i].name;
            HMemory += "+";
            HMemory += Linelist[i].score;
            if (i != (Linelist.Count - 1))
           
                HMemory += "|";
           
            Memory += HMemory;
       
        //存储排行信息
         PlayerPrefs.SetString("RankInfo", Memory);
   
    //获得排行信息
    public List<Rank> get()
   
        Analyze();
        return Linelist;
   
    //分离解析存储的排行信息
    private void Analyze()
   
        Linelist = new List<Rank>();
        string rankString = PlayerPrefs.GetString("RankInfo");
        //如果存储有信息进行解析
        if(!string.IsNullOrEmpty (rankString))
       
            string[] rankItemArray = rankString.Split('|');
            for(int i=0;i<rankItemArray.Length; i++)
           
                string[] rankItem = rankItemArray[i].Split('+');
                Rank rankInfo = new Rank();
                rankInfo.name = rankItem[0];
                rankInfo.score = int.Parse(rankItem[1]);
                Linelist.Add(rankInfo);
           
       
        if (Linelist.Count > 0)
       
            Linelist.Sort(CompareSpeedFromBigToSmall);
       
   
    //冒泡排序
    private int CompareSpeedFromBigToSmall(Rank rank1, Rank rank2)
   
        double a = rank1.score;
        double b = rank2.score;
        if (a==b)
       
            return 0;
       
        else if (a>b)
       
            return -1;
       
        else
       
            return 1;
       
   

 

注:每次运行都会存储一遍游戏者的信息。这个排行需要和游戏类结合,这边我为了测试直接输入信息并直接调用了 Init()函数。

unity开发培训机构排行榜

Unity3D是美国Unity Technologies公司开发的一款强大的跨平台游戏开发引擎,能让游戏开发者轻松创建诸如3D视频游戏、实时3D动画等互动内容,并广泛应用于网页游戏及手机游戏开发领域。unity3d培训机构排行榜值得看。

其实小编很想告诉大家:目前网上形形色色的unity3d培训机构排行榜不值得大家相信,因为并不权威。所以大家做个参考就好了,没有必要太当真。

技术分享图片

目前国内53%的网页游戏均使用Unity3D开发,而有80%的3D手机游戏使用Unity3D开发,已经有2000多款基于Unity3D开发的手机游戏发布在全球各大应用商城,仅App Store平台上就有1500+款用Unity3D开发的游戏,累计下载量超过5亿次。

而Unity3D开发工程师已成为移动互联网新时代的高薪职业,但国内专业人才不足一万,市场需求却有80万。

凭借着其编辑器强大,渲染能力强,资源种类多,全平台支持,开发人员多 等优势,目前国内有80%的手机游戏使用Unity3D进行开发,像《炉石传说》《神庙逃亡2》《我叫MT2》等经典手游都是由Unity3D开发的。

而随着Unity3D游戏开发技术的崛起,相关专业人才却严重不足。据官方数据显示,中国Unity3D游戏开发人才缺口高达80万,并且随着行业的迅速发展需求量会进一步增加。

而且以80%VR基于Unity开发为例,众多风投机构、BAT、新浪等知名企业,纷纷寻找专业开发人才,平均薪酬可达16k,甚至可达35K,远远超过其他软件开发岗位的薪资水平。

技术分享图片

想学unity3d技术,可以了解课程优势选择。优势突出在以下几点:

1)拥有从业多年的游戏架构师任教,课程大纲有深度、有广度,课程定位准确,保证学生在学习的道路上走得正,走得稳。

2.讲解游戏架构,并免费赠送快速开发架构代码,让学生毕业时拥有更高的起点。

3.详细讲解游戏热更新技术,赠送Lua语言编写的热更新框架。

4.深入的图形学课程,讲解包括OpenGL渲染管线,着色器,高光计算、菲尼尔色散、雾方程式等高阶课程。对于从事过Unity游戏开发的人员也具有相当的学习价值。

 

以上是关于Unity游戏开发之排行榜(采用PlayerPrefs存储)的主要内容,如果未能解决你的问题,请参考以下文章

Unity Android 游戏可以使用 Google Play 游戏插件登录,但无法从排行榜加载分数

使用谷歌的 Unity3d 插件自定义 UI 的谷歌玩游戏服务排行榜

[转]unity3D游戏开发之GUI

Unity3D游戏开发之Tall窗口布局如何设置

Google Play 服务 Unity 插件显示排行榜

游戏开发小白如何选择游戏引擎