在上一篇公众号文章《》中,我们为大家梳理了《火拼24》项目开发的全流程大纲,将项目从最初构思到最终产品上线的一系列步骤清晰呈现。
选择 24 点这个基础且经典的数学玩法,是因为我们的初衷是要向开发者展示,如何借助 Unity Online Services(UOS)的能力,将一个基础的单机游戏原型,打造成一个可以上线,并且适合长线运营的完整的联网游戏。玩法本身并不是我们想展示的重点,因为我们知道开发者最不缺的,就是超酷的创意!开发者可以使用 Unity 实现游戏创意的从 0 到 1,而 UOS 则能让您的游戏充满生命力,陪伴您的游戏从 1 走到一万、十万、百万。
而今天,我们将正式开启《火拼24》系列教程的第一节内容!
接下来,就让我们进入本节教程的重点:配置项目环境并集成 Passport Login 来实现用户登录。这一步,是开启整个项目之旅的关键钥匙。它不仅能让我们的应用拥有一个简洁美观的启动界面,还能搭建起用户与应用的桥梁,实现安全便捷的登录功能,为后续游戏的开发和运营奠定坚实的基础。
教程视频
项目工程获取与学习指引
1. 初始项目工程下载
仓库地址:
https://cnb.cool/unity/uos/Rush24Tutorial/-/tree/lesson1-start
分支名称:lesson1-start 分支
分支说明:请先下载 lesson1-start分支的项目工程,该分支已完成单机闯关的基础功能,是本节学习的起点。
仓库地址:
https://cnb.cool/unity/uos/Rush24Tutorial/-/tree/lesson1-end
分支名称:lesson1-end 分支
分支说明:lesson1-end 分支包含本节所有功能的完整实现代码,建议在学习完成后参考或用于调试对照。
教程学习大纲
1. 下载项目工程,安装 UOS Launcher
2. 绑定 UOS App 并安装 Passport Login SDK
3. 使用 PassportUI 实现用户登录
教程操作步骤
1. 下载项目工程,安装 UOS Launcher
1.1 下载并打开项目工程
请先通过上面提供的 git 仓库链接,下载初始状态(lesson1-start 分支)的项目工程。
然后通过 Unity Hub,打开刚刚下载好的项目工程。在教程中,我们是使用Unity 2022.3.42 f1c1版本来打开项目工程的,该教程同样适用于团结引擎,请大家自行选择想要使用的版本来开始你的学习。
1.2 UOS Launcher 安装
在 Unity Editor 菜单栏中打开「Window -> Package Manager」,点击左上角的「+」,选择「Add package from git URL」;
然后输入UOS Launcher 的 git 地址,点击「Add」等待安装完成。
https://cnb.cool/unity/uos/UOSLauncher.git
请注意:该步骤要求当前环境已安装 git,如果还没安装过 git 的话,请先前往安装 git ,然后再通过 git 安装 UOS Launcher。
2. 绑定 UOS App 并安装 Passport Login SDK
2.1 UOS App 的信息绑定
温馨提示:大家可以参考之前的的公众号文章教程,来为你当前的项目绑定你创建好的 UOS App。
点击菜单栏「UOS -> Open Launcher」,就可以打开 UOS 的 App 信息配置窗口了。点击 Launcher 面板的「LinkApp」按钮,在弹出窗口中选择「By Unity project」,在「Select organization」这里选择一个自己的项目组织,然后在「Select project 」选项这里,我们选择「Create a new project 」,自行设置修改项目名字「Project name」。
教程中,我们就先选择绑定创建好的 Rush24 应用了。
2.2 开启 Passport 服务并安装 SDK
在 UOS Launcher 的下拉服务窗口列表中,找到「Passport Login」,点击「Enable」开启服务。
然后点击「Install SDK」,安装 Passport Login SDK。
2.3 导入 PassportUI 资源
在弹出的窗口中,点击「导入」按钮,来导入 PassportUI 资源。
3. 使用 PassportUI 实现用户登录
登录功能模块的 UI 界面和脚本,我们使用的是 UOS 的 Passport 服务为用户提供的示例模板,在之前点击导入「PassportUI」资源的时候已经导入过了,可以直接在项目中使用,也可以根据自己喜欢的 UI 风格,进行自定义调整界面。
3.1 创建登录控制的脚本
在 Login 脚本文件夹下,创建一个新的脚本 LoginController.cs,来实现 Passport 用户登录的功能。
在场景中创建一个空对象,命名为 LoginController,然后将刚才创建的脚本 LoginController.cs 挂载在当前空对象上。
在初始闯关状态时,我们是默认就会加载游戏的数据。但是,在这里我们会修改为先使用 Passport 实现登录功能后,再加载游戏的数据。所以,先将场景中的 LoadGameData 对象设置为隐藏状态,后面代码中会根据需要再激活的。
打开 LoginController.cs 脚本,添加代码。在 Start 方法中添加判断的代码,如果用户没有为当前项目绑定 UOS App 的话,给一个错误提示信息:
using UnityEngine;
using Unity.UOS.Common;
using Logger = TwentyFour.Scripts.Utilities.Logger;
namespace Unity.UOS.TwentyFour
{
public class LoginController : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
if (string.IsNullOrEmpty(Settings.AppID))
{
Logger.LogError("Empty App Info! Please open the menu in editor: UOS -> Open Launcher, and enter UOS App info. For more tutorial, open the menu in editor: Tutorial -> Show Tutorial.");
}
}
}
}3.2 初始化 PassportUI
在调用 Passport SDK 进行 UI 初始化的方法 Init 时,需要先传入配置 _config 和回调函数 _callback。
_config 是 Passport Login SDK 进行初始化时的相关配置:来设置是否自动旋转屏幕方向、是否通过自行调用 Login 函数启动登录面板,以及设置 UI 风格主题是深色还是浅色等等。
_callback 是 Passport Login SDK 的回调函数:Passport 中已经封装注册好了,在用户拒绝协议、完成登录、完成所有流程、用户登出这几个状态下的回调事件。
可以在「Passport登录」的文档手册上直接复制示例代码:
https://uos.unity.cn/doc/passport/login#createScript
复制过来代码后,修改为如下:
在 _config 中,会通过宏定义区分下,如果使用的是团结引擎或者 Unity 的话,在 WebGL 场景下分别为 UnityContainerId 赋值。主要作用是可以根据编译环境,自动切换 WebGL 场景下的容器 ID,方便代码在不同平台下的兼容和维护。
在 _callback 中,如果用户拒绝了协议,就退出游戏。也是使用宏定义区分下,是否在 Unity 编辑器中时,退出游戏的代码的不同处理。
using System.Collections;
using System.Collections.Generic;
using Unity.Passport.Runtime.UI;
using Unity.UOS.Common;
using UnityEngine;
using Logger = TwentyFour.Scripts.Utilities.Logger;
namespace Unity.UOS.TwentyFour
{
public class LoginController : MonoBehaviour
{
// sdk 配置(Config 是 SDK 初始化时的配置)
private readonly PassportUIConfig _config = new()
{
AutoRotation = true, // 是否开启自动旋转,默认值为 false。
InvokeLoginManually = false, // 是否通过自行调用 Login 函数启动登录面板,默认值为 false。
Theme = PassportUITheme.Dark, // 风格主题配置。
#if TUANJIE_1_0_OR_NEWER
UnityContainerId = "tuanjie-container" // WebGL 场景下 Tuanjie 实例容器 Id。
#else
UnityContainerId = "unity-container" // WebGL 场景下 Unity 实例容器 Id。
#endif
};
// sdk 回调
private void _callback(PassportEvent e)
{
// event: 不同情况下的回调事件,详情可以参考下面的回调类型。
switch (e)
{
case PassportEvent.RejectedTos:
Debug.Log("用户拒绝了协议");
//Quit game if TOS rejected
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
break;
case PassportEvent.LoggedIn:
Debug.Log("完成登录");
break;
case PassportEvent.Completed:
Debug.Log("完成所有流程");
break;
case PassportEvent.LoggedOut:
Debug.Log("用户登出");
break;
}
}
//......
}
}然后在 LoginController.cs 脚本中添加登录的代码:
定义变量 coverPageHintText,用于在登录过程中显示提示信息。
启动协程 InitLogin,开始初始化登录过程。
设置 coverPageHintText 的文本为“正在...感应身份...”,向用户显示登录中的状态。
然后让协程暂停一帧,确保 UI 有时间更新显示后,调用 Login() 方法,正式开始登录流程。
在 Login 方法中,会先初始化 Passport SDK,然后调用 PassportUI.Init 方法来异步初始化 Passport UI 组件。
using System.Collections;
using System.Collections.Generic;
using Unity.Passport.Runtime;
using Unity.Passport.Runtime.UI;
using Unity.UOS.Common;
using UnityEngine;
using UnityEngine.UI;
using Logger = TwentyFour.Scripts.Utilities.Logger;
namespace Unity.UOS.TwentyFour
{
public class LoginController : MonoBehaviour
{
public Text coverPageHintText;
//......
// Start is called before the first frame update
void Start()
{
if (string.IsNullOrEmpty(Settings.AppID))
{
Logger.LogError("Empty App Info! Please open the menu in editor: UOS -> Open Launcher, and enter UOS App info. For more tutorial, open the menu in editor: Tutorial -> Show Tutorial.");
}
StartCoroutine(InitLogin());
}
IEnumerator InitLogin()
{
coverPageHintText.text = "正在...感应身份...";
yield return null;
//Init Passport Login UI
Login();
}
private async void Login()
{
await PassportSDK.Initialize();
await PassportUI.Init(_config, _callback);
}
}
}回到场景中,为 Inspector 面板上的 coverPageHintText 变量赋值:
3.3 运行测试 PassportUI 登录的效果
此时运行游戏后,弹出的输入框中可以输入你的手机号:
输入收到的短信验证码:
然后会需要进行实名身份认证:
所以当用户短信验证和实名认证通过后,会自动进入 PassportEvent.Completed 状态。会在 Console 控制台看到输出的日志信息:“完成所有流程”。
点击 Passport Login 旁边的「Developer Portal」按钮,可以进入 UOS 网页端的 Passport 模块来查看信息。
在 Passport 的「用户管理」页面,可以看到已创建的用户。
3.4 激活加载关卡数据的游戏对象
用户登录后,我们加载游戏数据进入闯关环节。所以需要先激活场景中的加载关卡数据的游戏对象 LoadGameData。
找到 LoginController.cs 脚本,定义加载数据的变量 loadGameData;
添加 GotoLoadingPage 方法,来激活场景中的 LoadGameData 游戏对象;
然后在 _callback 回调方法的 PassportEvent.Completed 状态下,调用方法 GotoLoadingPage。
namespace Unity.UOS.TwentyFour
{
public class LoginController : MonoBehaviour
{
public GameObject loadGameData;
// sdk 回调
private void _callback(PassportEvent e)
{
// event: 不同情况下的回调事件,详情可以参考下面的回调类型。
switch (e)
{
//......
case PassportEvent.Completed:
Debug.Log("完成所有流程");
GotoLoadingPage();
break;
}
}
//......
void GotoLoadingPage()
{
loadGameData.SetActive(true);
}
}
}在场景中,为 Inspector 面板上的 loadGameData 变量赋值:
此时也可以运行游戏进行测试下,看到登录成功后可以进行游戏闯关了。
3.5 修改 Passport 登录配置
在「登录配置」模块,点击选中「模拟短信验证」,这样验证码直接输入「111111」即可;取消选中「实名认证」,则暂时不再验证用户的身份信息。根据需要也可以自定义配置下用户协议:
然后我们再次点击运行项目,是会看到在弹出的窗口中询问是否接受协议的。点击「接受以上协议」后,会直接进入游戏主页面进行闯关的。
3.6 实现登出 Passport 账户
但是如果我们修改了 Passport 的登录配置后,想要重新验证下效果的话,可以选择先登出账号,然后再重新登录。
登出按钮为:
找到 MainScene 场景中的 UI 对象 PlayerInfoPanel 下的按钮 Button_LogOut,可以看到它身上已经绑定好的事件:点击按钮时会激活 Popup_Logout 面板。
在 Login 文件夹下,创建实现账户登出的脚本 LogoutController.cs。
脚本 LogoutController.cs 中代码如下:
PassportLogin SDK 是 UOS 提供的身份认证服务,用于管理用户登录状态(如设备登录、第三方账号关联等)。
通过 PassportLoginSDK 集成的 Logout() 方法,主动终止当前用户的登录会话。这一步会清除本地存储的用户凭证(如Token)、重置身份状态,并通知 Passport 服务端用户已登出。
using UnityEngine;
using Unity.Passport.Runtime;
using TwentyFour.Scripts.Gameplay.HomePage;
namespace TwentyFour.Scripts.Features.Player
{
public class LogoutController : MonoBehaviour
{
public void Logout()
{
PassportLoginSDK.Identity.Logout();
GameRouter.LoadStartScene();
}
}
}接着会调用 GameRouter.cs 脚本中的加载初始场景的方法 LoadStartScene:
public static class GameRouter
{
public static void LoadStartScene()
{
SceneManager.LoadScene(StartScene);
}
}然后找到 Popup_Logout 面板下的确认退出的按钮子对象 Button_OK,将 LogoutController.cs 脚本挂载到它身上。
同时,为 Button_OK 按钮选择绑定 LogoutController.cs 脚本中的 Logout 方法。
修改为以上设置后,记得将 PlayerInfoPanel 和 Popup_Logout 面板都恢复为默认的隐藏状态。
然后我们再次点击运行项目,退出账号重新登录时,在输入手机号的验证码页面,大家就可以使用 111111 了,也不再需要进行实名认证了。
下节教程预告
教程主题——《火拼24》系列教程一(下):创建角色
《火拼24》下一篇教程:即将上线!会在现有功能的基础上,带大家完整实现「角色创建-服务端管理」流程,并添加了角色昵称的敏感词校验机制,帮你从源头规范游戏身份信息。
记得锁定更新,别错过每一步关键指南!
学习福利与兑换指南
我们为大家精心准备了一份学习福利哟——参与《火拼24》学习项目,在学习过程中所使用的云资源将全部免费!
那么,如何获取这份福利呢?以下是兑换流程:
关注「UOS游戏云服务」公众号,然后在公众号内发送消息「24点教程」,你将会收到《火拼24》教程专属兑换码:
接下来,打开 UOS App 网页端,进入「设置」页面,在页面右上角找到并点击「兑换福利」按钮。
在弹出的窗口中,输入你之前收到的《火拼24》教程专属兑换码,再点击「兑换福利」按钮就可以啦!
兑换成功后,在「概览」页面,你就能看到《火拼24》学习项目的相关说明,请大家仔细阅读哦!
寄语
是时候开启你的开发实践之旅了!
立即下载 《火拼24》第一节教程的分支代码,跟随教程搭建 Launcher 的启动界面,集成 Passport Login 安全登录系统!从经典 24 点玩法到完整联网游戏,每一步实践都是成长的勋章。
立即行动,解锁游戏开发的第一块基石——让《火拼24》成为你技术进阶的实战平台,见证从功能模块到完整产品的系统性蜕变!
Unity Online Services (UOS) 是一个专为游戏开发者设计的一站式游戏云服务平台,提供覆盖游戏全生命周期的开发、运营和推广支持。
了解更多 UOS 相关信息:
官网:https://uos.unity.cn
技术交流 QQ 群:823878269
Unity 官方微信
第一时间了解Unity引擎动向,学习进阶开发技能
每一个“点赞”、“在看”,都是我们前进的动力
热门跟贴