业务需求:
我现在需要在Unity 中创建一个登录功能我有以下业务需求:
1.用户可以注册账号密码
2.用户可以登录
3.使用Oracle 数据库表存储
4.我有一个服务器 地址已经安装了oracle 数据库
5.创建一个数据库用户 ,账号密码 为Unity/ Unity
程序实现步骤:
- 概述
- 准备工作
- 安装 Oracle 数据库并创建表空间
- 创建 Oracle 数据库用户并授予权限
- 创建 Oracle 数据库表
- 在 Unity 中设置 Oracle 数据库连接
- 实现用户注册功能
- 实现用户登录功能
- 测试与验证
- 总结
1. 概述
在游戏或应用开发中,用户管理功能如注册和登录是基础的一部分。本教程将指导你如何使用 Unity 实现用户注册与登录功能,并将用户数据存储在 Oracle 数据库中。我们将一步步教你如何在 Unity 中连接 Oracle 数据库,创建用户表并实现基本的用户注册和登录功能。
2. 准备工作
2.1 安装 Oracle 数据库并创建表空间
首先,你需要在服务器上安装 Oracle 数据库,并创建一个表空间来存储用户数据。如果你已经安装好 Oracle 数据库,可以跳过这一部分。
安装完数据库以后:
你已经有一个 Oracle 数据库实例,并且你有一个管理员账号(例如 SYS 或 SYSTEM),你可以使用以下命令创建一个新用户 Unity,并授予其必要的权限。
接下来创建表空间,因为每个数据库用户下面的表数据都存在表空间中,一个表空间可以有无数用户来使用。【Oracle】 - 数据库的实例、表空间、用户、表之间关系_oracle 表空间 表 实例-优快云博客
创建表空间并设置大小:
CREATE TABLESPACE unity_data
DATAFILE '/path_to_your_datafile/unity_data.dbf'
SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
unity_data: 表空间名称。DATAFILE: 数据文件存储路径,确保该路径在服务器上有效。SIZE: 初始大小为 100MB。AUTOEXTEND: 表空间会自动扩展。
如果不限制表空间 用下面代码
autoextend on next 100M maxsize unlimited ;
2.2 创建 Oracle 数据库用户并授予权限
在创建好表空间后,接下来需要创建一个用于连接的数据库用户,并为其授予适当的权限:
CREATE USER Unity IDENTIFIED BY Unity
DEFAULT TABLESPACE unity_data
TEMPORARY TABLESPACE temp;
GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE VIEW, CREATE PROCEDURE, UNLIMITED TABLESPACE TO Unity;
Unity: 新建的用户,密码也是Unity。DEFAULT TABLESPACE unity_data: 默认表空间为unity_data。- 授予该用户连接和创建表的权限。
CREATE SESSION: 允许用户登录到数据库。CREATE TABLE: 允许用户创建表。CREATE SEQUENCE: 允许用户创建序列(例如用于自动生成主键)。CREATE VIEW: 允许用户创建视图。CREATE PROCEDURE: 允许用户创建存储过程。UNLIMITED TABLESPACE: 允许用户使用无限的表空间。
3. 创建 Oracle 数据库表
在数据库中为用户信息创建一张表。这个表将用于存储注册用户的用户名和密码:
-- 使用 Unity 用户登录
CONNECT Unity/Unity;
-- 创建一个表格 存储用户账号密码
CREATE TABLE users (
user_id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
username VARCHAR2(50) NOT NULL,
password VARCHAR2(100) NOT NULL,
PRIMARY KEY (user_id)
);
username: 用户名,唯一标识用户。password: 密码,建议加密存储。- 这些表在后面可以继续用命令添加
GENERATED BY DEFAULT AS IDENTITY 是 Oracle 12c 引入的语法,用于创建自增列。具体来说,Oracle 12c Release 1 (12.1) 及以上版本支持这种语法。
如果数据库版本是11g 11.2.1 就不支持了! 需要用下面的语句分别实现自增触发,需要分步骤进行:
1.授予子用户(本案例的数据库用户是Unity)创建序列、触发器、表的权限
-- 授予创建表、序列、触发器的权限
GRANT CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER TO Unity;
2. 确保 Unity 账户拥有足够的权限
如果你已经授予了权限,但仍然遇到问题,请确保权限已经正确应用。你可以使用以下查询来检查 Unity 账户的权限:
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'Unity';
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'Unity';
3.创建表-Unity 账户下创建一个表格,用来存储账号密码
CREATE TABLE Unity.UserInfo (
UserID NUMBER PRIMARY KEY,
Account VARCHAR2(50) NOT NULL,
Password VARCHAR2(100) NOT NULL,
PhoneNumber VARCHAR2(20),
Gender CHAR(1) CHECK (Gender IN ('M', 'F'))
);
有了表以后,我们可以设置账户对这个表的权限
假设你有一个名为 Unity 的用户,并且你希望该用户能够在 Unity 模式下的 UserInfo 表中插入数据,你可以使用以下 SQL 语句:
GRANT INSERT ON Unity.UserInfo TO Unity;
执行这条语句后,Unity 用户将能够在 Unity.UserInfo 表中插入数据。
其他权限
除了 INSERT,你还可以授予其他权限,例如:
-
SELECT: 允许查询表中的数据。 -
UPDATE: 允许更新表中的数据。 -
DELETE: 允许删除表中的数据。 -
ALL: 授予所有可能的权限。
例如,授予 Unity 用户在 Unity.UserInfo 表上的所有权限:
GRANT ALL ON Unity.UserInfo TO Unity;
4.创建序列
CREATE SEQUENCE Unity.UserInfo_Seq
START WITH 1
INCREMENT BY 1;
5.创建触发器
CREATE OR REPLACE TRIGGER Unity.UserInfo_BIR
BEFORE INSERT ON Unity.UserInfo
FOR EACH ROW
BEGIN
IF :NEW.UserID IS NULL THEN
SELECT Unity.UserInfo_Seq.NEXTVAL INTO :NEW.UserID FROM DUAL;
END IF;
END;
/
6.插入数据
INSERT ALL
INTO Unity.UserInfo (UserID, UserName, Email, CreatedDate) VALUES (2, 'Jane Smith', 'jane.smith@example.com', TO_DATE('2023-10-02', 'YYYY-MM-DD'))
INTO Unity.UserInfo (UserID, UserName, Email, CreatedDate) VALUES (3, 'Alice Johnson', 'alice.johnson@example.com', TO_DATE('2023-10-03', 'YYYY-MM-DD'))
SELECT 1 FROM DUAL;
总结
通过授予 Unity 账户必要的权限,并确保权限正确应用,你应该能够在 Unity 账户下成功创建表、序列、触发器,并插入数据。
===================
4. 在 Unity 中设置 Oracle 数据库连接
为了在 Unity 中与 Oracle 数据库交互,我们可以使用 Oracle Data Provider for .NET (ODP.NET)。以下是如何在 Unity 中连接到 Oracle 数据库的步骤:
4.1 安装 ODP.NET 库
你需要在项目中引入 Oracle 的 .NET 数据提供程序(ODP.NET)。可以通过 NuGet 安装 Oracle.ManagedDataAccess 库。
下载下面的文件放在Asset/Plugin 下面
链接: https://pan.baidu.com/s/1CnABP3gf-dUgT92plGPzrw 提取码: 146m
首先,你需要在 Unity 项目中安装 Oracle.ManagedDataAccess 库。你可以通过 NuGet 包管理器来安装这个库,或者手动下载并添加到 Unity 项目中。
4.2 配置数据库连接
在 Unity 中,编写 C# 代码来连接 Oracle 数据库。以下是连接 Oracle 数据库的基本代码:
using Oracle.ManagedDataAccess.Client;
public class DatabaseManager
{
private string connectionString = "User Id=Unity;Password=Unity;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=your-server-ip)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=your-service-name)))";
public OracleConnection GetConnection()
{
OracleConnection connection = new OracleConnection(connectionString);
connection.Open();
return connection;
}
}
修改 your-server-ip 和 your-service-name,以匹配你服务器的 IP 和数据库服务名。
5. 实现用户注册功能
在 Unity 中,我们可以通过用户界面收集用户名和密码,并将这些数据存储在 Oracle 数据库中。
5.1 编写注册代码
public class UserManager
{
private DatabaseManager dbManager = new DatabaseManager();
public bool Register(string username, string password)
{
using (OracleConnection conn = dbManager.GetConnection())
{
string encryptedPassword = EncryptPassword(password); // 加密密码
string query = "INSERT INTO users (username, password) VALUES (:username, :password)";
OracleCommand cmd = new OracleCommand(query, conn);
cmd.Parameters.Add(new OracleParameter("username", username));
cmd.Parameters.Add(new OracleParameter("password", encryptedPassword));
try
{
cmd.ExecuteNonQuery();
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}
}
private string EncryptPassword(string password)
{
// 加密逻辑(例如使用哈希函数)
return password; // 这是简化示例,实际需要加密
}
}
加密密码以确保数据安全。
5.2 注册界面
在 Unity 中创建简单的注册界面,用户可以输入用户名和密码,并点击注册按钮:
public class RegisterUI : MonoBehaviour
{
public InputField usernameInput;
public InputField passwordInput;
public UserManager userManager;
public void OnRegisterButtonClicked()
{
string username = usernameInput.text;
string password = passwordInput.text;
if (userManager.Register(username, password))
{
Debug.Log("注册成功");
}
else
{
Debug.Log("注册失败");
}
}
}
6. 实现用户登录功能
用户登录需要从数据库中查询用户名和密码,并进行验证。
6.1 编写登录代码
public class UserManager
{
public bool Login(string username, string password)
{
using (OracleConnection conn = dbManager.GetConnection())
{
string query = "SELECT password FROM users WHERE username = :username";
OracleCommand cmd = new OracleCommand(query, conn);
cmd.Parameters.Add(new OracleParameter("username", username));
OracleDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
string storedPassword = reader.GetString(0);
if (VerifyPassword(password, storedPassword))
{
return true; // 登录成功
}
}
return false; // 登录失败
}
}
private bool VerifyPassword(string enteredPassword, string storedPassword)
{
// 验证密码逻辑
return enteredPassword == storedPassword;
}
}
6.2 登录界面
在 Unity 中创建一个简单的登录界面,用户可以输入用户名和密码,并点击登录按钮:
public class LoginUI : MonoBehaviour
{
public InputField usernameInput;
public InputField passwordInput;
public UserManager userManager;
public void OnLoginButtonClicked()
{
string username = usernameInput.text;
string password = passwordInput.text;
if (userManager.Login(username, password))
{
Debug.Log("登录成功");
}
else
{
Debug.Log("登录失败");
}
}
}
7. 测试与验证
在 Unity 中测试整个注册和登录流程。确保在注册时,用户数据能够正确存储到 Oracle 数据库中,并且在登录时能够正确验证用户名和密码。
8. 总结
通过本教程,你已经成功在 Unity 中实现了用户注册和登录功能,并使用 Oracle 数据库来存储用户数据。这个流程包括创建数据库表、连接 Oracle 数据库、以及通过简单的 UI 实现用户管理功能。
711

被折叠的 条评论
为什么被折叠?



