这里应该是有问题的
这里应该是有问题的
//t:prefab or t:Prefab 表示type:Prefab----- (t:TextAsset 表示文本类型),返回GUID
string[] allStr = AssetDatabase.FindAssets("t:prefab", abConfig.m_AllPrefabPath.ToArray());
foreach (var str in allStr)
{
Debug.Log(AssetDatabase.GUIDToAssetPath(str)); //通过GUID找到资源的全路径(带后缀)
}
GameObject obj = Instantiate(assetBundle.LoadAsset<GameObject>("Attack.prefab"));
GameObject obj2 = Instantiate(assetBundle.LoadAsset<GameObject>("Attack"));
后缀可加可不加,主要prefab中p小写
string[] resDependence = AssetDatabase.GetAssetBundleDependencies(abBase.ABName, true);
static void CreateConfig(Dictionary<string, string> validPathABNameDict)
{
AssetBundleConfig config = new AssetBundleConfig();
config.ABList = new List<ABBase>();
foreach (string path in validPathABNameDict.Keys)
{
ABBase abBase = new ABBase();
abBase.Path = path;
abBase.Crc = Crc32.GetCRC32(path);
abBase.ABName = validPathABNameDict[path];
abBase.AssetName = path.Remove(0, path.LastIndexOf("/") + 1);
abBase.ABDependence = new List<string>();
string[] resDependence = AssetDatabase.GetAssetBundleDependencies(abBase.ABName, true);
foreach (string de in resDependence)
{
//Debug.LogFormat($"AB包:{abBase.ABName} ------ 依赖{de}");
abBase.ABDependence.Add(de);
}
config.ABList.Add(abBase);
}
//写入XML
.
.
.
//写入二进制
.
.
.
续完了
资源加载方式:
①直接拖到组件上
②Resources.Load()
③AssesBundle
④AssetDataBase.LoadAt
NavMeshAgent: 导航组件,控制移动
AudioSource: 控制声音。
自己写出来了,性能感人。洪泛算一个周期要好几秒,沃日。原来是debug搞得鬼。
这样用switch不好,当地图需要增加或减少元素时,你会改到哭的。
这里我选择用一个数组保存下来trap的位置。
这样写销毁方法不太好,应该当所有子物体都播放完粒子特效时,销毁整个物体。
讲的太啰嗦了
雷已经标记出来了,谁他妈会去踩。所以方块标记上雷时,不作处理。
这里最好不要强转,用round比较好
4个字节,即255X255X255X255=42 2825 0625,最多能存42亿种方法,太浪费了,2个字节255X255=6 5025 ,足够。
1、客户端不正常关闭可以通过try catch 解决
2、客户端正常close关闭后,服务器端一直接收到空数据。
sql 恶意注入问题
Extension文件夹:存放所有的扩展类
//这样在字典中取值比较麻烦
string myValue;
dic.TryGetValue(key,out myValue);
=========为内置的字典类扩展方法===========
using System.Collections;
using System.Collections.Generic;
public static class DictionaryExtension{
// 尝试根据key得到value,得到了返回value,没有得到直接返回null
public static Tvalue TryGet<Tkey,Tvalue>(this Dictionary<Tkey,Tvalue> dict,Tkey key){
Tvalue mvalue;
dict.TryGetValue(key,out mvalue);
return mvalue;
}
}
// 使用扩展方法
string result = myDic.TryGet("keyStr");
using system;
public enum MyEnum
{
TypeOne,
TypeTwo,
TypeThree,
TypeFour
}
[Serializable]
public class MyJsonData : ISerializationCallbackReceiver
{
[NonSerialized]
public MyEnum myEnum;
public string typeString;
/// <summary>
/// 反序列化之后调用此方法
/// 反序列化:文本信息 -> 对象
/// </summary>
public void OnAfterDeserialize()
{
myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), typeString);
}
/// <summary>
/// 序列化之前调用此方法
/// 序列化:对象 -> 文本信息
/// </summary>
public void OnBeforeSerialize()
{
}
}
MyJsonData jsonData = JsonUtility.FromJson<MyJsonData>("{\"typeString\":\"TypeThree\"}");
print(jsonData.myEnum.ToString());
移动节点至头部,不需要在最后判断Tail是否为空.
if (pNode == Tail) Tail = pNode.prev;这一句已经判断过了.