73. 2023-08-13周总结

  1. sdk框架
  2. git clone Out of memory, malloc failed (tried to allocate 2147483648 bytes)
  3. 新手引导讨论
  4. 弧线问题

1. SDK框架

计划在框架集成一套SDK框架,具体使用就是如果项目想接某个SDK,那直接在Package Manager里面引入这个包(比如Babu.Client.SDK.Facebook),引入之后配置项目的参数就可以用Facebook的指定功能了,整个过程不会对业务代码有侵入。

设计核心就是用代理模式+工厂模式来封装SDK实现,定义了常用的需要SDK功能的管理类以及对应的SDK实现接口,比如充值我们会有一个PurchaseServiceManager,以及一个IPurchaseService,IPurchaseServiceFactory。

PurchaseServiceManager代理了IPurchaseService的接口,上层只通过PurchaseServiceManager操作所有的充值接口,不用关心里面具体是哪个IPurchaseService实现。

为了在编辑器下使用PurchaseServiceManager,还需要一套编辑器下的IPurchaseService实现,只是简单模拟下充值过程。

其他SDK如果想替换PurchaseServiceManager,为了避免对业务逻辑的侵入,可以使用Unity的属性[RuntimeInitializeOnLoadMethod]来自动注入到PurchaseServiceManager中。

其他细节:

  1. 为了避免SDK之间需要修改android或者ios配置工程产生冲突,可以使用unity-jar-resolver来避免
  2. 有些情况可能接了Facebook但是不想用它的账号,可以通过配置开关在RuntimeInitializeOnLoadMethod中不去注入到AccountServiceManager中即可
  3. 如果海外GP和AppStore的充值,推荐使用Unity的In App Purchasing来做,避免很多繁琐问题,唯一的不好就是引入这个之后还得关联Unity Service项目

2. git clone Out of memory, malloc failed (tried to allocate 2147483648 bytes)

原因是因为http/postBuffer开太大了,调用git config --global http.postBuffer 100m后解决

3. 新手引导讨论

之前同事做了一版新手引导,效率慢而且很容易出问题,所以组织一次新手引导怎么设计问题,这个后续等验证过了再单独发

4. UIParticle曲线运动问题

在使用UIParticle attractor component做曲线运动的时候遇到个问题,如果在屏幕边缘飞的话会几率朝屏幕外拉曲线,导致飞出屏幕外。

所以想改他的实现增加一个屏幕边缘判断,如果接近边缘,就朝屏幕里面拉曲线。

看了下代码主要使用Vector3.Slerp实现的,这个东西不太好理解,也是看了下其他资料和打印实际的坐标之后才有一些认识。

这里有三个点一个是源点(0,0),另外两个就是起始点start_pos和目标点target_pos,曲线运动的中心在(0, 0),如果你起始点在target_pos - (0, 0) 方向右边,则生成的曲线就会往右拐

因为特效做的时候是范围生成,所以会出现一下往左拐,一下往右拐的情况。

修复方式就是在代码里判断如果在屏幕边缘,强行将particle的位置设置到target_pos - (0, 0)的右边。在UIParticleAttractor的Attract中增加相关代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if (adjustPosition == false)
{
Vector2 viewPos = uiCamera.WorldToViewportPoint(StartObj.transform.position);
//Debug.Log($"viewPos: {viewPos}");
if (viewPos.y > 0.8)
{
Debug.Log($"adjust position: {p.position}, {dstPos}");
if (p.position.x < dstPos.x)
{
var dir = (new Vector3(dstPos.y, -dstPos.x)).normalized;
p.position = dir * 0.5f;
}
else
{
var dir = (new Vector3(-dstPos.y, dstPos.x)).normalized;
p.position = dir * 0.5f;
}
//Debug.Log($"adjust position: {p.position}, {dstPos}, {p.position}");
}
adjustPosition = true;
}