3d项目学习

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
转为字典格式

        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

//名字的旋转跟随相机

猜你喜欢

转载自blog.csdn.net/a133900029/article/details/80184423