版权申明:

  • 本文原创首发于以下网站:
  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.创建一个玩家信息类

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

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

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

3.UI控制脚本

  1. public class UI_Manager : MonoBehaviour, IPointerClickHandler
  2. {
  3. public PlayerInfo playerInfo;
  4. public InputField userName;
  5. public InputField userPassword;
  6. public GameObject error;
  7. public GameObject register;
  8. public WWW www;
  9. public void OnPointerClick(PointerEventData eventData)
  10. {
  11. switch (this.name) {
  12. case "Register":
  13. Register();
  14. break;
  15. case "Confirm":
  16. Save();
  17. break;
  18. case "Login":
  19. Load();
  20. break;
  21. case "Cancel":
  22. Cancel();
  23. break;
  24. case "Exit":
  25. Exit();
  26. break;
  27. }
  28. }
  29. private void Start()
  30. {
  31. if (this.name == "Load") {
  32. Loading();
  33. }
  34. }
  35. private void Update()
  36. {
  37. if (this.name == "Load") {
  38. GetComponent<Slider>().value = www.progress;
  39. }
  40. }
  41. public void Exit() {
  42. EditorApplication.isPlaying = false;
  43. }
  44. public void Cancel() {
  45. Destroy(register);
  46. }
  47. public void Loading() {
  48. StartCoroutine(DownLoadAB());
  49. }
  50. public IEnumerator DownLoadAB() {
  51. www = new WWW("file://" + Application.dataPath + "/AssetBundle/scene-bundle");
  52. yield return www;
  53. AssetBundle ab = www.assetBundle;
  54. SceneManager.LoadScene("DemoScene");
  55. }
  56. public void Load()
  57. {
  58. string[] s = File.ReadAllLines(Application.dataPath + "/JsonFiles/PlayerInfo.json");
  59. for (int i=0;i<s.Length;i++) {
  60. playerInfo = JsonUtility.FromJson<PlayerInfo>(s[i]);
  61. if (userName.text == playerInfo.userName && userPassword.text == playerInfo.userPassword) {
  62. SceneManager.LoadScene("LoadScene");
  63. return;
  64. }
  65. }
  66. error.SetActive(true);
  67. }
  68. public void Save()
  69. {
  70. playerInfo.userName = userName.text;
  71. playerInfo.userPassword = userPassword.text;
  72. if (playerInfo.userName != "" && playerInfo.userPassword != "") {
  73. string s = JsonUtility.ToJson(playerInfo) + "\r\n";
  74. File.AppendAllText(Application.dataPath + "/JsonFiles/PlayerInfo.json", s);
  75. Destroy(register);
  76. return;
  77. }
  78. error.SetActive(true);
  79. }
  80. public void Register() {
  81. Instantiate(register);
  82. }
  83. }

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. Flutter初体验--环境搭建

    Fluter最近火了起来,它的有点很多,今天我做一篇在Windows下安装Flutter的教程. 一.下载    无论你要安装什么软件,都要先下载下来.我用的是SourceTree,地址: https ...

  2. Http接口调用示例教程

    介绍HttpClient库的使用前,先介绍jdk里HttpURLConnection,因为HttpClient是开源的第三方库,使用方便,不过jdk里的都是比较基本的,有时候没有HttpClient的 ...

  3. 关于JLINK调试时出现的 erasing range....的问题结果方法

    声明:本人当然不是提倡盗版. 昨天在使用JLINK的时候遇到了这个问题,但是非常蹊跷,首先可以下载,但不能进入调试,到后来完成不能下载了. 这个问题的原因就是你得Keil检测到你锁使用的JLINK不是 ...

  4. Java类方法重载与重写

    目录 - 方法重载 - 方法重写 @(Java类方法重载与重写) - 方法重载 1.方法名相同 2.参数列表不同 public void person(double height,double wei ...

  5. <<Modern CMake>> 翻译 2.3 与代码通信

    <<Modern CMake>> 翻译 2.3 与代码通信 配置文件 CMake 允许您使用代码通过 configure_file 存取 CMake 变量. 此命令复制一个文件 ...

  6. Java性能调优之让程序“飞”起来-Java 代码优化

    代码优化的目标是: 1.减小代码的体积 2.提高代码运行的效率 代码优化细节 1.尽量指定类.方法的final修饰符 带有final修饰符的类是不可派生的.在Java核心API中,有许多应用final ...

  7. 考试安排查询脚本(CUP)

    去年热情高涨的时候心血来潮做了个简易的查询脚本,限于当时技术水平(菜),实现得不是很好,这几天终于想起来填坑了.环境依赖: brew install python3 pip3 install requ ...

  8. 从三个语言(C++,Java,.Net)的几个性能测试案例来看性能优化

    随着时间的发展,现在的虚拟机技术越来越成熟了,在有些情况下,Java,.Net等虚拟机密集计算的性能已经和C++相仿,在个别情况下,甚至还要更加优秀.本文详细分析几个性能测试案例,探讨现象背后的原因. ...

  9. 【MySQL】Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and ...

    线上遇到这个问题,详细信息如下: SQL state [HY000]; error code [1267]; Illegal mix of collations (utf8mb4_general_ci ...

  10. Android Studio "cannot resolve symbol R" 问题

    初接触Android Studio,又遇到了 "cannot resolve symbol R"问题(以前在 Eclipse 也遇到过),网上方法不一,后来在stackoverfl ...