private void InitItemList() { GameObject itemObj; foreach (var id in itemIdList) { var itemInfo = CsvMgr.GetData <ItemData>(id); itemObj = ResourceMgr.InstantiateGameObject(UiName.Image_ItemBk, this.itemList); Assert.IsTrue(itemObj); var avator = itemObj.transform.Find("Image_ItemAvator"); if (avator == null) { throw new Exception("avator is null"); } var image = avator.GetComponent <Image>(); if (image == null) { throw new Exception("Image is null"); } image.sprite = ResourceMgr.GetAsset <Sprite>(itemInfo.spriteName); itemObj.transform.Find("Tmp_Price").GetComponent <TextMeshProUGUI>().text = itemInfo.price.ToString(); this.items.Add(itemObj); } }
protected override void UseItemData() { icon.sprite = ResourceMgr.GetAsset <Sprite>( ItemData.spriteName ); dragger = transform.GetOrAddComponent <Dragger>(); selfRect = transform.GetComponent <RectTransform>(); }
private void OnEnable() { upgrader.SetActive(NetInfo.isGuest); unickEditor.text = NetInfo.unick; this.uface = NetInfo.uface; this.usex = NetInfo.usex; print("this.usex: " + this.usex); avatorImag.sprite = ResourceMgr.GetAsset <Sprite>("Avator_" + this.uface); womanToggle.isOn = this.usex == 1; }
partial void OnLoad() { //do any thing you want map = GetComponent <RectTransform>("MapBg/Map"); mapController = map.GetComponent <MapController>(); mapRawImage = map.GetComponent <RawImage>(); mapRawImage.texture = ResourceMgr.GetAsset <Texture2D>( $"Map_{SceneManager.GetActiveScene().name}"); mapController.SetSize(); }
public void Refresh(string itemId, int count = 1, Action <string> ondelete = null) { this.onDelete = ondelete; itemData = CsvMgr.GetData <ItemData>(itemId); icon.sprite = ResourceMgr.GetAsset <Sprite>( itemData.spriteName ); countText.text = count.ToString(); }
private void OnPlayerEnterRoom(PlayerEnterRoom msg) { var obj = ResourceMgr.InstantiateGameObject(UiName.PlayerInfo, scrollRect.content); var icon = obj.transform.Find("Icon").GetComponent <Image>(); var nickText = obj.transform.Find("NickText").GetComponent <Text>(); var levelText = obj.transform.Find("LevelText").GetComponent <Text>(); icon.sprite = ResourceMgr.GetAsset <Sprite>("Avator_" + msg.uface); nickText.text = msg.unick; levelText.text = "Lv " + msg.usex; this.scrollRect.content.sizeDelta = new Vector2(0, this.scrollRect.content.childCount * 91); }
/// <summary> /// 播放指定名字的背景音乐 /// </summary> /// <param CharacterName="name"></param> public void PlayBgm(string audioName, string bundleKey = null) { if (!enableBgmAudio) { return; } var clip = ResourceMgr.GetAsset <AudioClip>(audioName, bundleKey ?? OriginBundleKey.Audio); if (clip == null) { Debug.Log("音效获取失败:" + name); return; } BgmAudioSource.clip = clip; BgmAudioSource.loop = true; BgmAudioSource.volume = 1; BgmAudioSource.Play(); }
/// <summary> /// 播放指定名字音效 /// </summary> /// <param CharacterName="name"></param> public void PlayEffect(string audioName, string bundleKey = null) { if (!enableEffectAudio) { return; } var clip = ResourceMgr.GetAsset <AudioClip>(audioName, bundleKey ?? OriginBundleKey.Audio); if (clip == null) { Debug.Log("音效获取失败:" + name); return; } var audioSource = GetAudioSource(); audioSource.clip = clip; audioSource.loop = false; audioSource.Play(); }
/// <summary> /// 在指定位置播放音效 /// </summary> /// <param CharacterName="audioName"></param> /// <param CharacterName="position"></param> public void PlayEffect(string audioPath, Vector3 position, string bundleKey = null) { AudioSource.PlayClipAtPoint(ResourceMgr.GetAsset <AudioClip>(audioPath, bundleKey ?? OriginBundleKey.Audio), position); }
private void OnSyncAuthInfo() { unick.text = NetInfo.unick; uface.sprite = ResourceMgr.GetAsset <Sprite>("Avator_" + NetInfo.uface); }
public void OnIconChanged(int index) { this.uface = index; avatorImag.sprite = ResourceMgr.GetAsset <Sprite>("Avator_" + this.uface); OnClickMask(); }
private void DropItems(string itemId) { var dropData = CsvMgr.GetData <DropData>(itemId); Assert.IsNotNull(dropData); //赚钱和经验 CEventCenter.BroadMessage(Message.M_PlayerExpChange, dropData.reiki * GameSettings.Instance.reikiScale); CEventCenter.BroadMessage(Message.M_MoneyChange, dropData.money * GameSettings.Instance.moneyScale); // Debug.Log($"掉落经验:【{dropData.reiki}】*[{GameSettings.Instance.reikiScale}]"); //掉落物品 ItemData itemData = null; #region 获取itemData var allRate = dropData.drag_1 + dropData.drag_2 + dropData.stone_1 + dropData.stone_2; var rates = new[] { dropData.drag_1 / allRate, (dropData.drag_1 + dropData.drag_2) / allRate, (dropData.drag_1 + dropData.drag_2 + dropData.stone_1) / allRate, (dropData.drag_1 + dropData.drag_2 + dropData.stone_1 + dropData.stone_2) / allRate, }; var randomRate = Random.Range(0, 1f); if (randomRate > rates[3]) { throw new Exception("异常概率:" + randomRate); } else if (randomRate > rates[2]) { itemData = CsvMgr.GetRandomData <GemData>(FileName.GemData_2); } else if (randomRate > rates[1]) { itemData = CsvMgr.GetRandomData <GemData>(FileName.GemData_1); } else if (randomRate > rates[0]) { itemData = CsvMgr.GetRandomData <DragData>(FileName.DragData_2); } else { itemData = CsvMgr.GetRandomData <DragData>(FileName.DragData_1); } Assert.IsNotNull(itemData); #endregion #region 实力化Item var obj = ResourceMgr.InstantiateGameObject(PrefabName.DropItem, this.position); Assert.IsTrue(obj); obj.GetComponent <SpriteRenderer>().sprite = ResourceMgr.GetAsset <Sprite>(itemData.spriteName); #endregion #region 给Item添加捡起得逻辑 var mover = obj.GetComponent <IMover2D>(); Assert.IsNotNull(mover); mover.eventOnTriggerEnter += col => { if (col.gameObject.GetPersonInfo() is IHighFiveCharacter) { // Debug.Log($"GetItem:{itemData.ID}"); CEventCenter.BroadMessage(Message.M_AddItem, itemData.ID, 1); GameObject.Destroy(obj); } }; #endregion }
static void ReadConfigData(Type type, string filePath = null) { var fileLoadPath = filePath; if (string.IsNullOrEmpty(fileLoadPath) || fileLoadPath == type.Name) { fileLoadPath = type.Name; } string getString = ResourceMgr.GetAsset <TextAsset>(fileLoadPath, OriginBundleKey.File).text; var csr = new CsvReaderByString(getString); var dataRow = new Dictionary <string, CsvMgr> (); FieldInfo[] fieldInfos = new FieldInfo[csr.ColCount]; for (int colNum = 1; colNum < csr.ColCount + 1; colNum++) { fieldInfos [colNum - 1] = type.GetField(csr [1, colNum]); } //每行都是一条数据,所以循环行数次 for (int i = 3; i < csr.RowCount + 1; i++) { var dataObj = Activator.CreateInstance(type); //逐个判断当前行每一列域类型加入字典 for (int j = 0; j < fieldInfos.Length; j++) { string fieldValue = csr [i, j + 1]; //试探可能的类型,将数据填充到数据项dataItem中 object dataItem = new object(); switch (fieldInfos [j].FieldType.ToString()) { case "System.Single": dataItem = float.Parse(fieldValue); break; case "System.Int32": dataItem = int.Parse(fieldValue); break; case "System.Int64": dataItem = long.Parse(fieldValue); break; case "System.String": dataItem = fieldValue; break; default: Debug.LogWarning("error data type"); break; } fieldInfos [j].SetValue(dataObj, dataItem); //如果是第一列,这一列被视为主键 if (j == 0) { dataRow.Add(dataItem.ToString(), (CsvMgr)dataObj); } } } dataDic.Add(fileLoadPath, dataRow); //可以作为参数 }
/// <summary> /// 读取数据结构信息 /// </summary> private static void LoadRootConfigData() { //避免重复初始化 if (_dataConfigInfos != null) { return; } _dataConfigInfos = new Dictionary <string, DataConfigInfo>(); var getString = ResourceMgr.GetAsset <TextAsset>("DataConfig", OriginBundleKey.File).text; var csr = new CsvReaderByString(getString); for (var i = 1; i < csr.RowCount + 1; i += 2) { var config = new DataConfigInfo(); for (var j = 1; j < csr.ColCount + 1; j++) { var name = csr[i + 0, j]; var type = csr[i + 1, j]; switch (type) { case "className": config.className = name; break; case "parentClassName": if (!string.IsNullOrEmpty(name)) { config.parentName = name; _dataConfigInfos[config.parentName] .childrenNames.Add(config.className); } break; case "fileKeys": foreach (var fileKey in name.Split('_')) { config.fileKeys.Add(fileKey.Trim()); } break; default: if (string.IsNullOrEmpty(name)) { break; } config.fieldInfos.Add( name, new FieldInfo { fieldName = name, fieldType = type }); break; } } if (string.IsNullOrEmpty(config.className)) { throw new Exception("ClassName is null ???"); } if (config.fileKeys.Count == 0) { config.fileKeys.Add(config.className); } _dataConfigInfos.Add(config.className, config); } }
/// <summary> /// 加载数据,fileKey不合法的时候默认取type.Name /// </summary> /// <param name="type"></param> /// <param name="filePath"></param> private static void LoadConfigData(Type type, string fileName) { Assert.IsNotNull(type); Assert.IsNotNull(_dataConfigInfos); Assert.IsFalse(string.IsNullOrEmpty(fileName)); CsvReaderByString csr = null; #region 加载csr并初始化fileKey //fileKey不合法的时候默认取type.Name var asset = ResourceMgr.GetAsset <TextAsset>(fileName, OriginBundleKey.File); if (asset == null) { throw new Exception($"加载数据文件失败,typeKey:{type.Name},fileName:{fileName}"); } csr = new CsvReaderByString(asset.text); #endregion System.Reflection.FieldInfo[] fieldInfos = null; #region 根据type初始化fieldInfos fieldInfos = new System.Reflection.FieldInfo[csr.ColCount]; for (var colNum = 1; colNum < csr.ColCount + 1; colNum++) { var info = type.GetField(csr [1, colNum]); if (info == null) { throw new Exception($"GetField failed:如果使用了多态,请尽量使用具体类型代替\ntype:{type.Name}\nfileKey:{fileName}\nfieldName:{csr[1,colNum]}"); } fieldInfos[colNum - 1] = info; } #endregion var dataRow = new Dictionary <string, CsvMgr> (); //每行都是一条数据,所以循环行数次 for (var i = 2; i < csr.RowCount + 1; i++) { var dataObj = Activator.CreateInstance(type); //逐个判断当前行每一列域类型加入字典 for (var j = 0; j < fieldInfos.Length; j++) { var fieldValue = csr [i, j + 1]; //试探可能的类型,将数据填充到数据项dataItem中 var dataItem = new object(); try { switch (fieldInfos [j].FieldType.ToString()) { case "System.Single": dataItem = string.IsNullOrEmpty(fieldValue) ? default(float) : float.Parse(fieldValue); break; case "System.Int32": dataItem = string.IsNullOrEmpty(fieldValue) ? default(int) : int.Parse(fieldValue); break; case "System.Int64": dataItem = string.IsNullOrEmpty(fieldValue) ? default(long) : long.Parse(fieldValue); break; case "System.String": dataItem = string.IsNullOrEmpty(fieldValue) ? default(string) : fieldValue; break; default: throw new Exception($"意料之外的字段类型:{fieldInfos [j].FieldType}\ntype:{type.Name}\nfileKey:{fileName}"); } } catch (FormatException e) { throw new Exception($"{e.Message}\ninputString:{fieldValue}\ntype:{type.Name}\nfileKey:{fileName}\npos:[{i},{j}]"); } fieldInfos [j].SetValue(dataObj, dataItem); //如果是第一列,这一列被视为主键 if (j == 0) { // Debug.Log(dataObj); dataRow.Add(dataItem.ToString(), (CsvMgr)dataObj); } } // Debug.Log($"$insert data {dataObj}"); } if (dataRow.Count == 0) { Debug.LogWarning($"itemDataRow is empty: TypeName{type.Name}, fileName:{fileName}"); } //debug // foreach (var kv in dataRow) // { // Debug.Log($"success get data: {kv.Value}"); // } SafeInsertDataDic( type.Name, dataRow, fileName); }
private void DropItems(string itemId) { var dropData = CsvMgr.GetData <DropData>(itemId); Assert.IsNotNull(dropData); //赚钱和经验 CEventCenter.BroadMessage(Message.M_PlayerExpChange, dropData.money * 5); CEventCenter.BroadMessage(Message.M_MoneyChange, dropData.money * 3); //掉落物品 ItemData itemData = null; #region 获取itemData var allRate = dropData.drag_1 + dropData.drag_2 + dropData.stone_1 + dropData.stone_2; var rates = new[] { dropData.drag_1 / allRate, (dropData.drag_1 + dropData.drag_2) / allRate, (dropData.drag_1 + dropData.drag_2 + dropData.stone_1) / allRate, (dropData.drag_1 + dropData.drag_2 + dropData.stone_1 + dropData.stone_2) / allRate, }; var randomRate = Random.Range(0, 1f); if (randomRate > rates[3]) { throw new Exception("异常概率:" + randomRate); } else if (randomRate > rates[2]) { itemData = CsvMgr.GetRandomData <GemData>(FileName.GemData_2); } else if (randomRate > rates[1]) { itemData = CsvMgr.GetRandomData <GemData>(FileName.GemData_1); } else if (randomRate > rates[0]) { itemData = CsvMgr.GetRandomData <DragData>(FileName.DragData_2); } else { itemData = CsvMgr.GetRandomData <DragData>(FileName.DragData_1); } #endregion Assert.IsNotNull(itemData); var obj = ResourceMgr.InstantiateGameObject(PrefabName.DropItem, this.position); Assert.IsTrue(obj); obj.GetComponent <SpriteRenderer>().sprite = ResourceMgr.GetAsset <Sprite>(itemData.spriteName); var ti = obj.GetOrAddComponent <TriggerInputer>(); ti.onCollisionEnterEvent2D += col => { if (col.gameObject.GetPersonInfo() is IHighFiveCharacter) { CEventCenter.BroadMessage(Message.M_AddItem, itemData.ID, 1); GameObject.Destroy(ti.gameObject); } }; }