业务需求:
我现在需要在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 表空间 表 实例-CSDN博客
创建表空间并设置大小:
CREATE TABLESPACE unity_dataDATAFILE '/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 UnityDEFAULT TABLESPACE unity_dataTEMPORARY 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
BEGINIF :NEW.UserID IS NULL THENSELECT Unity.UserInfo_Seq.NEXTVAL INTO :NEW.UserID FROM DUAL;END IF;
END;
/
6.插入数据
INSERT ALLINTO 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 实现用户管理功能。