Apshai Arts 是加密的作者
unity加密使用CodeGuard
====
CTE(CustomTerrainEditor)
和原来自带的类似。进行了一定的优化还有可以再fbx上种树
===
itween对物体的移动颜色改变实现渐变功能
===
ngui也拥有对物体移动和颜色渐变功能。但是曲线选择没itween多。但是在uipanel下实现颜色渐变比itween好
====
字体
asset_font.fnt和asset_font.txt
待研究
====
update.txt
包含了资源的md5,只加载符合的md5文件。防止别人乱改
====
unPackageVersion.txt
包含了打包的时间。用来跟服务端的时间对比。判断是否需要更新
比如服务端版本是10号。这里本地就必须大于10号。这样当本地比服务端大就不更新。否则会死循环一直更新
====
loadmanager里面有的
加载完有unload(false)有的没有。那是因为有的没有打成assetbundle,所以直接跑了www.text等等不需要unload
而有的是因为在加载完生成完gameobject后就在界面unload(false)了。所以也不需要提前unload
===
而loadparam里面
先removeResource再unload(false)和 直接unload(true)
可能是为了防止那些在界面的remove的人出错。因为直接unload(true)那么生成的gameobject会丢失material
===
www可以加载很多东西
例如网站返回json www.text
例如贴图 www.texture
还有unity 特有的组件可以打包成 as 然后www.as 来加载
对于非常特别的。例如mpt 就可以用二进制来加载获得byte数组。然后通过readData(br, LENGTH_SHORT);来一个一个读出来数字
例如activity.data 通过二进制来加载=====读出为byte数据。然后通过unGzip读出string。然后通过MiniJSON.Json.Deserialize
转为字典格式
====
mapdata
www解释mpt获得字节数组然后读入 里面的大小。格子数量。然后遍历格子读取数据。自己保留一份。另外一份给nav寻路用
fightplay
攻击流程。客户请求服务端。服务端控制客户播放。播放到某个回调。生成特效,和怪物受伤
animalplayer
fightplay---player.attack---listener.onattack---player.onattack---effect---fightplay.playAttacked
移动写在animalplayer上面。然后服务端发送路径控制玩家和怪物移动
而rolePlaye则根据自己点击计算移动路径。自己移动和发送给服务端
移动重写了。因为有些死亡不能移动等需要特殊处理
//无解暂时看不懂
//飘字//跟随相机 还有TransformDirection InverseTransformDirection InverseTransformDirection
//名字的旋转跟随相机
unity加密使用CodeGuard
====
CTE(CustomTerrainEditor)
和原来自带的类似。进行了一定的优化还有可以再fbx上种树
===
itween对物体的移动颜色改变实现渐变功能
===
ngui也拥有对物体移动和颜色渐变功能。但是曲线选择没itween多。但是在uipanel下实现颜色渐变比itween好
====
字体
asset_font.fnt和asset_font.txt
待研究
====
update.txt
包含了资源的md5,只加载符合的md5文件。防止别人乱改
====
unPackageVersion.txt
包含了打包的时间。用来跟服务端的时间对比。判断是否需要更新
比如服务端版本是10号。这里本地就必须大于10号。这样当本地比服务端大就不更新。否则会死循环一直更新
====
loadmanager里面有的
加载完有unload(false)有的没有。那是因为有的没有打成assetbundle,所以直接跑了www.text等等不需要unload
而有的是因为在加载完生成完gameobject后就在界面unload(false)了。所以也不需要提前unload
===
而loadparam里面
先removeResource再unload(false)和 直接unload(true)
可能是为了防止那些在界面的remove的人出错。因为直接unload(true)那么生成的gameobject会丢失material
===
www可以加载很多东西
例如网站返回json www.text
例如贴图 www.texture
还有unity 特有的组件可以打包成 as 然后www.as 来加载
对于非常特别的。例如mpt 就可以用二进制来加载获得byte数组。然后通过readData(br, LENGTH_SHORT);来一个一个读出来数字
例如activity.data 通过二进制来加载=====读出为byte数据。然后通过unGzip读出string。然后通过MiniJSON.Json.Deserialize
转为字典格式
public string unGZip(byte[] info)
{
string result = null;
using (MemoryStream resultMs = new MemoryStream())
{
using (MemoryStream ms = new MemoryStream(info))
{
using(Stream inputStream = new GZipInputStream(ms))
{
int size = 2048;//指定压缩块的大小,一般为2048的倍数
byte[] writeData = new byte[size];//指定缓冲区的大小
while (true)
{
size = inputStream.Read(writeData, 0, size);//读入一个压缩块
if (size > 0)
{
resultMs.Write(writeData, 0, size);//写入解压文件代表的文件流
//fs.Write(writeData, 0, size);
}
else
{
break;//若读到压缩文件尾,则结束
}
}
inputStream.Close();
result = new UTF8Encoding(true).GetString(resultMs.ToArray());
}
}
}
return result;
}
private int readData(byte[] byteArr, int length, bool isPre=true)
{
int tempValue = 0;
tReadByte = new byte[length];
if (isPre)
{
Array.Copy(byteArr, position, tReadByte, POSITION_START, length);
position += length;
}
else {
Array.Copy(byteArr, position2, tReadByte, POSITION_START, length);
position2 += length;
}
if (BitConverter.IsLittleEndian)
{
Array.Reverse(tReadByte);
}
switch (length)
{
case LENGTH_INT:
tempValue = BitConverter.ToInt32(tReadByte, POSITION_START);
break;
case LENGTH_SHORT:
tempValue = (int)BitConverter.ToInt16(tReadByte, POSITION_START);
break;
case LENGTH_BYTE: //无符号整型,取值范围:0-255
tempValue = (int)tReadByte[0];
break;
}
return tempValue;
}
====
mapdata
www解释mpt获得字节数组然后读入 里面的大小。格子数量。然后遍历格子读取数据。自己保留一份。另外一份给nav寻路用
fightplay
攻击流程。客户请求服务端。服务端控制客户播放。播放到某个回调。生成特效,和怪物受伤
animalplayer
fightplay---player.attack---listener.onattack---player.onattack---effect---fightplay.playAttacked
移动写在animalplayer上面。然后服务端发送路径控制玩家和怪物移动
而rolePlaye则根据自己点击计算移动路径。自己移动和发送给服务端
移动重写了。因为有些死亡不能移动等需要特殊处理
//无解暂时看不懂
//飘字//跟随相机 还有TransformDirection InverseTransformDirection InverseTransformDirection
//名字的旋转跟随相机