版权申明:

  • 本文原创首发于以下网站:
  1. 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123
  2. 优梦创客的官方博客:https://91make.top
  3. 优梦创客的游戏讲堂:https://91make.ke.qq.com
  4. 『优梦创客』的微信公众号:umaketop
  • 您可以自由转载,但必须加入完整的版权声明

1.创建玩家登陆界面UI



2.点击注册按钮进入注册界面



3.注册的玩家信息会被保存到PlayerInfo.json文件中



4.输入玩家信息如果用户名或密码出错会提示用户信息错误,并不执行加载



5.输入正确的信息才能加载到LoadScene场景中



6.加载结束后即可进入游戏画面

代码如下:

1.创建一个玩家信息类

[Serializable]//让玩家信息类可序列化和反序列化
public class PlayerInfo {
public string userName;
public string userPassword; }

2.将游戏场景打包成AssetBundle资源

public class BuildAsset : MonoBehaviour {
[MenuItem("AssetBundle/Build")] public static void Build() {
BuildPipeline.BuildAssetBundles(Application.dataPath + "/AssetBundle",BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows);
}
}

3.UI控制脚本

public class UI_Manager : MonoBehaviour, IPointerClickHandler
{
public PlayerInfo playerInfo;
public InputField userName;
public InputField userPassword;
public GameObject error;
public GameObject register;
public WWW www; public void OnPointerClick(PointerEventData eventData)
{
switch (this.name) {
case "Register":
Register();
break;
case "Confirm":
Save();
break;
case "Login":
Load();
break;
case "Cancel":
Cancel();
break;
case "Exit":
Exit();
break;
}
} private void Start()
{
if (this.name == "Load") {
Loading();
}
} private void Update()
{
if (this.name == "Load") {
GetComponent<Slider>().value = www.progress;
}
} public void Exit() {
EditorApplication.isPlaying = false;
} public void Cancel() {
Destroy(register);
} public void Loading() {
StartCoroutine(DownLoadAB());
} public IEnumerator DownLoadAB() {
www = new WWW("file://" + Application.dataPath + "/AssetBundle/scene-bundle");
yield return www;
AssetBundle ab = www.assetBundle;
SceneManager.LoadScene("DemoScene");
} public void Load()
{
string[] s = File.ReadAllLines(Application.dataPath + "/JsonFiles/PlayerInfo.json");
for (int i=0;i<s.Length;i++) {
playerInfo = JsonUtility.FromJson<PlayerInfo>(s[i]);
if (userName.text == playerInfo.userName && userPassword.text == playerInfo.userPassword) {
SceneManager.LoadScene("LoadScene");
return;
}
}
error.SetActive(true);
} public void Save()
{
playerInfo.userName = userName.text;
playerInfo.userPassword = userPassword.text;
if (playerInfo.userName != "" && playerInfo.userPassword != "") {
string s = JsonUtility.ToJson(playerInfo) + "\r\n";
File.AppendAllText(Application.dataPath + "/JsonFiles/PlayerInfo.json", s);
Destroy(register);
return;
}
error.SetActive(true);
} public void Register() {
Instantiate(register);
}
}

Unity进阶:用AssetBundle和Json做了一个玩家登陆界面的更多相关文章

  1. 利用Py-Socket模块做的一个不登陆windows服务器自动实现替换或者调用自动拨号功能

    xu言: 最近,有个朋友让我帮忙“搞点事情”,然后正好在学习socket模块,这个模块666啊,基本上可以实现远程服务器cmd shell的大部分功能.好,话不多说,直接上码~ 由于很多电信运营商都会 ...

  2. 「翻译」Unity中的AssetBundle详解(一)

    AssetBundles AssetBundle是一个存档文件,其中包含平台在运行时加载的特定资产(模型,纹理,预制,音频剪辑,甚至整个场景).AssetBundles可以表示彼此之间的依赖关系;例如 ...

  3. Unity热更新 AssetBundle

    在游戏开发中,常常需要用到热更新技术.比如:一个手机游戏开发好后,用户安装到手机上.如果此时我们要更新一个新的功能,如果没有热更新,那么需要用户卸载掉手机上的游戏,然后安装新的包,这样做十分麻烦,而且 ...

  4. 在Unity中使用LitJson解析json文件

    LitJson 这个库需要找资源,找到LitJson.dll后将它放在Assets文件夹下,在脚本中使用using引入即可 测试代码 json文件: {"Archice":[{&q ...

  5. [翻译]Unity中的AssetBundle详解(三)

    构建AssetBundles 在AssetBundle工作流程的文档中,我们有一个示例代码,它将三个参数传递给BuildPipeline.BuildAssetBundles函数.让我们更深入地了解我们 ...

  6. 「翻译」Unity中的AssetBundle详解(二)

    为AssetBundles准备资源 使用AssetBundles时,您可以随意将任何Asset分配给所需的任何Bundle.但是,在设置Bundles时,需要考虑一些策略.这些分组策略可以使用到任何你 ...

  7. Unity进阶之ET网络游戏开发框架 04-资源打包

    版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...

  8. 做了一个quartz用到的cron在线生成器

    做了一个quartz用到的cron在线生成器 做了一个quartz用到的cron在线生成器   做这个的目的是前期在做Quartz时老是不知道如何去写,我想也有很多人和我一样吧. 有一次使用了一个老外 ...

  9. {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)

    Django基础七之Ajax 本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 一 Ajax简介 ...

随机推荐

  1. 利用gcc编译链接时出现 ‘undefined reference to `std::ios_base::Init::Init()’ 解决

    一般编译链接c++程序最好使用g++,若有如上的报错信息,需要在gcc后加上 -lstdc++ eg: gcc test.c -lstdc++ gcc和g++都是GNU的一个编译器. g++:后缀.c ...

  2. LiteDB源码解析系列(1)LiteDB介绍

    最近利用端午假期,我把LiteDB的源码仔细的阅读了一遍,酣畅淋漓,确实收获了不少.后面将编写一系列关于LteDB的文章分享给大家,希望这么好的源码不要被埋没. 1.LiteDB是什么 这是一个小型的 ...

  3. 【MySQL】(二)InnoDB存储引擎

    InnoDB是事务安全的MySQL存储引擎,设计上采用了类似于Oracel数据库的架构.通常来说,InnoDB存储引擎是OLTP应用中核心表的首选存储引擎.同时,也正是因为InnoDB的存在,才使My ...

  4. C# backgroundwork的使用方法

    引言:在 WinForms 中,有时要执行耗时的操作,在该操作未完成之前操作用户界面,会导致用户界面停止响应.解决的方法就是新开一个线程,把耗时的操作放到线程中执行,这样就可以在用户界面上进行其它操作 ...

  5. SSM整合环境搭建demo

    1.项目目录结构 2.项目中用的jar包 3.web.xml(其中主要配置spring与springmvc) <?xml version="1.0" encoding=&qu ...

  6. JDK容器类Map源码解读

    java.util.Map接口是JDK1.2开始提供的一个基于键值对的散列表接口,其设计的初衷是为了替换JDK1.0中的java.util.Dictionary抽象类.Dictionary是JDK最初 ...

  7. Model设计中常见的技巧和注意事项

    verbose_name 可以作为第一个参数传入,书写更加工整和有序: name = models.CharField('类别名',default="", max_length=3 ...

  8. 证明线程池ThreadPoolExecutor的核心线程数,最大线程数,队列长度的关系

    关于线程池的几个参数,很多人不是很清楚如何配置,他们之间是什么关系,我用代码来证明一下. package www.itbac.com; import java.util.concurrent.*; p ...

  9. WPF后台设置颜色字体等

    Button TempButton = new Button();                                                TempButton.Tag = “按 ...

  10. ipv6的连接

    基础知识不说了,网上一大堆! 基本内容不说了,写字太累了! 只说三点细节,记住就行: 1.ff开头的是多播地址,只能用于udp多播 2.fe80开头的是本地link地址,不管ping也好,connec ...