UI和3D物体遮挡
UI和3D物体重叠的场景
此时点击UI,我们需要实现不同的情况:
UI响应,3D物体不响应
UI和3D物体同时响应
UI对鼠标左键右键有不同响应,3D物体也对左键右键有不同的响应,但是打开UI时关闭3D物体对鼠标的响应
打开Unity,新建默认3D工程,在工程内新建Scripts文件夹,在Scripts文件夹文件夹内部新建UIAnd3D文件夹,下面的脚本都在这个文件夹内。
把SampleScene改名为“UIAnd3D”,作为第一个演示场景。
UI和3D物体同时响应我们给3D物体挂载Click3D脚本:
12345678910111213141516171819202122232425262728using UnityEngine;public class Click3D : MonoBehaviour{ private int mColorIdx; private MeshRenderer mRenderer; private void Start() { mColorIdx = 0; mRenderer = ...
服务器端准备
AlipayEasySDK概述 - 支付宝文档中心 (alipay.com)
服务端使用AlipayEasySDK
打开SimpleServer项目,并在SimpleServer项目内添加新的Nuget包,即AlipayEasySDK(作者antopen)
后台申请
支付宝开放平台支付宝开放平台 (alipay.com)
在支付宝开放平台首页,点击“网页/移动应用开发”,下面是App接入的开发文档:
产品介绍 - 支付宝文档中心 (alipay.com)
流程:(公司)平台入驻——创建应用(创建后审核、添加能力(支付能力)还要审核)——配置应用环境(接口加签方式非常重要,
授权回调地址可以不用填)——绑定应用。
证书加签:
设置密钥加签方式 - 支付宝文档中心 (alipay.com),一般使用公钥模式来加签,不推荐公钥证书模式
证书加签会要求下载一个密钥生成工具,生成应用私钥和应用公钥。
支付流程
上图红色的部分就是我们开发时需要重点实现的部分。
游戏服务器(商户后台系统)向微信后台发送订单时需要加密,微信后台返回预付单信息是加密的
上图第14步之后:“将支付状态通过商户App已实现的回调接口执行回调”,表示的是支付后微信界面的“返回商户”调用的方法。
从微信返回商户(游戏客户端后),客户端还要再次向服务器“查询实际支付结果”。
玩家存档数据库
在正式的商业游戏中,一个玩家的存档涉及很多个数据库,这里的存档使用单库,一般独立游戏使用。
存档实体类在MySqlData文件夹内新建GlobalSave文件
12345678910111213using SqlSugar;namespace MySql.MySQLData{ [SugarTable("globalsave")] public class GlobalSave { [SugarColumn(IsPrimaryKey = true,IsIdentity = true)] public int Id { get; set; } public int UserId { get;set; } public string? Data { get; set; } }}
打开Navicat,添加globalsave表
列名
类型
长度
小数点
不是null
主键
其他
Id ...
Redis和MySql
Redis需要配合其他数据库,这里使用MySql
初始化安装Nuget包使用Redis,需要安装StackExchange.Redis包,在Nuget包管理器中搜索这个包并安装在MySql项目里。下面是官方文档
StackExchange.Redis | General purpose redis client
在MySql项目中添加RedisMgr
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748using StackExchange.Redis;namespace MySql{ public class RedisMgr : SingletonPattern<RedisMgr> { public ConnectionMultiplexer? m_Redis;//Redis实例 public IDatabase? m_RedisDB;//Redis数据库 public eve ...
介绍
Redis简介Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。可以设置每隔几分钟持久化一次或者直接调用持久化命令。Redis是一个中间数据库,持久化时要写在MongoDB或者MySql里。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
Redis优势性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原 ...
行为协议示例
添加玩家行为协议,演示MongoDB的基本使用。
MsgPlayerAction协议在SimpleServer工程内的Proto文件夹中添加UserMsg文件,同样地,在客户端的Scripts——Net——Proto文件夹内也添加这个文件
123456789101112131415161718using ProtoBuf;using SimpleServer.Business;[ProtoContract()]public class MsgPlayerAction : MsgBase{ public MsgPlayerAction() { ProtoType = ProtocolEnum.MsgPlayerAction; } [ProtoMember(1)] public override ProtocolEnum ProtoType { get; set; } [ProtoMember(2)] public string? Key { get; set; } ...
获取数量
使用MongoDB查询条目数量也是很常见的操作。这里提供一下对应的方法。
根据条件获取总数使用collection!.CountDocuments(filter)来获取当前条件下的总数
1234567891011121314151617181920/// <summary>/// 根据条件获取总数/// </summary>/// <typeparam name="T">实体类</typeparam>/// <param name="collName">表名</param>/// <param name="filter">查询条件</param>/// <returns>数量</returns>public long Count<T>(string collName, FilterDefinition<T> filter) where T : class, new(){ ...
MongoDB操作-查
同步查询一条数据查询数据时,可以按照整行进行查询,也可以只查询某行的一个或几个字段(属性).
当我们查询整行时,直接使用FilterDefinition设置好ObjectId条件即可查询整行。
当我们查询一个或几个字段(属性)时,需要设置filter的同时,添加ProjectionDefinition,指定好需要查询的字段(属性)
1234567891011121314151617181920212223242526272829303132333435/// <summary>/// 同步查询数据/// </summary>/// <typeparam name="T">实体类</typeparam>/// <param name="collName">表名</param>/// <param name="objectId">当前行的id</param>/// <param name="fields"> ...