public void SetPickupItem(string des) { model = des; List <WeaponDatas.WeaponDatas> allWeapons = new List <WeaponDatas.WeaponDatas>(); List <WeaponDatas.WeaponDatas> weapons = Main.Ins.DataMgr.GetDatasArray <WeaponDatas.WeaponDatas>(); //WeaponDatas.WeaponDatas[] weapons2 = PluginWeaponMng.Instance.GetAllItem(); for (int i = 0; i < weapons.Count; i++) { allWeapons.Add(weapons[i]); } //for (int i = 0; i < weapons2.Length; i++) //{ // allWeapons.Add(weapons2[i]); //} for (int i = 0; i < allWeapons.Count; i++) { if (allWeapons[i].WeaponL == model || allWeapons[i].WeaponR == model) { isWeapon = true; break; } } WsGlobal.ShowMeteorObject(model, transform); startTick = delay; }
IEnumerator PatrolRotateToTarget(Vector3 vec) { WsGlobal.AddDebugLine(vec, vec - Vector3.up * 10, Color.red, "PatrolPoint", 20.0f); Vector3 diff = (vec - owner.mPos); diff.y = 0; float dot = Vector3.Dot(new Vector3(-owner.transform.forward.x, 0, -owner.transform.forward.z).normalized, diff.normalized); float dot2 = Vector3.Dot(new Vector3(-owner.transform.right.x, 0, -owner.transform.right.z).normalized, diff.normalized); float angle = Mathf.Abs(Mathf.Acos(dot) * Mathf.Rad2Deg); bool rightRotate = dot2 < 0; float offset = 0.0f; float offsetmax = GetAngleBetween(vec); float timeTotal = offsetmax / 75.0f; float timeTick = 0.0f; while (true) { timeTick += Time.deltaTime; float yOffset = Mathf.Lerp(0, offsetmax, timeTick / timeTotal); owner.SetOrientation((rightRotate ? -1 : 1) * (yOffset - offset)); offset = yOffset; if (timeTick > timeTotal) { owner.FaceToTarget(vec); if (owner.posMng.mActiveAction.Idx == CommonAction.WalkRight || owner.posMng.mActiveAction.Idx == CommonAction.WalkLeft) { owner.posMng.ChangeAction(0, 0.1f); } break; } yield return(0); } PatrolRotateToTargetCoroutine = null; SubStatus = EAISubStatus.PatrolSubGotoTarget; }
public void OnAttack(System.Func <int, int, int, int> act, System.Action <int, int> idle) { OnAttackCallBack = act; OnIdle = idle; GameBattleEx.Instance.RemoveCollision(this); RefreshCollision(); GameBattleEx.Instance.RegisterCollision(this); Index = int.Parse(name.Substring(name.Length - 2)); WsGlobal.SetObjectLayer(gameObject, LayerMask.NameToLayer("Trigger")); }
//计算重力作用下的运动方向以及位移 //public CharacterController charController; //Rigidbody rig; public void Init(int modelIdx) { tag = "meteorUnit"; UnitId = modelIdx; charLoader = GetComponent <CharacterLoaderDebug>(); if (charLoader == null) { charLoader = gameObject.AddComponent <CharacterLoaderDebug>(); } posMng = GetComponent <PoseStatusDebug>(); if (posMng == null) { posMng = gameObject.AddComponent <PoseStatusDebug>(); } charLoader.LoadCharactor(UnitId); posMng.Init(); WeaponR = Global.ldaControlX("d_wpnR", charLoader.rootBone.gameObject).transform; WeaponL = Global.ldaControlX("d_wpnL", charLoader.rootBone.gameObject).transform; ROOTNull = Global.ldaControlX("b", gameObject).transform; RootdBase = charLoader.rootBone; CameraTarget = RootdBase; weaponLoader = gameObject.GetComponent <WeaponLoaderEx>(); if (weaponLoader == null) { weaponLoader = gameObject.AddComponent <WeaponLoaderEx>(); } weaponLoader.Init(); posMng.ChangeAction(); WsGlobal.SetObjectLayer(gameObject, gameObject.layer); //charController = gameObject.AddComponent<CharacterController>(); //charController.center = new Vector3(0, 18.0f, 0); //charController.height = 36.0f; //charController.radius = 8.0f; //charController.stepOffset = 8.0f; //mPosition = transform.position; //for (int i = 0; i < 32; i++) //{ // if (LayerMask.LayerToName(i) == "LocalPlayer") // continue; // if (LayerMask.LayerToName(i) == "Monster") // continue; // if (LayerMask.LayerToName(i) == "Trigger") // continue; // if (!Physics.GetIgnoreLayerCollision(gameObject.layer, i)) // mCacheLayerMask |= (1 << i); //} }
protected new void Awake() { base.Awake(); Main.Ins.GMBLoader.Load(model); int index = model.name.IndexOf("."); WsGlobal.ShowMeteorObject(model.name.Substring(0, index), transform); if (fmcPlayer != null) { fmcPlayer.Init(ani); //fmcPlayer.ChangePose(0, 0); if (InitializePose) { fmcPlayer.ChangePose(StartPose, LoopPose ? 1 : 0); } } }
public void LoadCharactor(int id) { owner = GetComponent <MeteorUnit>(); posMng = owner.posMng; CharacterIdx = id; Skin = new GameObject(); Skin.transform.SetParent(transform); Skin.transform.localRotation = Quaternion.identity; Skin.transform.localScale = Vector3.one; Skin.transform.localPosition = Vector3.zero; SkcFile skc = SkcLoader.Instance.Load(id); BncFile bnc = BncLoader.Instance.Load(id); Skin.name = skc.Skin; rend = Skin.AddComponent <SkinnedMeshRenderer>(); rend.localBounds = skc.mesh.bounds; rend.materials = skc.Material(id, owner.Camp); rend.sharedMesh = skc.mesh; rend.sharedMesh.RecalculateBounds(); bo = new List <Transform>(); dummy = new List <Transform>(); List <Matrix4x4> bindPos = new List <Matrix4x4>(); if (owner.Attr.IsPlayer) { Skin.layer = LayerMask.NameToLayer("LocalPlayer"); } else { Skin.layer = LayerMask.NameToLayer("Monster"); } bnc.GenerateBone(transform, ref bo, ref dummy, ref bindPos, ref rootBone); WsGlobal.SetObjectLayer(gameObject, Skin.layer); rend.bones = bo.ToArray(); rend.sharedMesh.bindposes = bindPos.ToArray(); rend.rootBone = rootBone; RootPos = rootBone.localPosition; RootQuat = rootBone.localRotation; AmbLoader.Ins.LoadCharacterAmb(id); //GenerateBounds(skc.mesh, bo); LoadBoxDef(id); }
public void EquipWeapon(int unitid, bool ui = true) { InventoryItem i = ui ? weaponModel : Weapon; if (i == null) { i = ui ? weaponModel = Main.Ins.GameStateMgr.MakeEquip(unitid):Main.Ins.GameStateMgr.MakeEquip(unitid); //WeaponBase weaponProperty = U3D.GetWeaponProperty(i.Info().UnitId); EquipWeapon(i, true); } else { UnEquipWeapon(); i = ui ? weaponModel = Main.Ins.GameStateMgr.MakeEquip(unitid):Main.Ins.GameStateMgr.MakeEquip(unitid); //WeaponBase weaponProperty = U3D.GetWeaponProperty(i.Info().UnitId); EquipWeapon(i, true); } if (ui) { if (i.Info().SubType == (int)(EquipWeaponType.Lance)) { transform.localPosition = new Vector3(0, 9, 130); } else { transform.localPosition = new Vector3(0, 9, 110); } } if (RParent != null) { WsGlobal.SetObjectLayer(RParent.gameObject, LayerMask.NameToLayer("RenderModel")); } if (LParent != null) { WsGlobal.SetObjectLayer(LParent.gameObject, LayerMask.NameToLayer("RenderModel")); } }
public void SetPickupItem(string des) { model = des; WsGlobal.ShowMeteorObject(model, transform); }
public void LoadSceneObjsFromDes(string des) { //mapObjectList.Clear(); DesLoader.Instance.Refresh(); DesFile desDat = DesLoader.Instance.Load(des); int j = 0; for (int i = desDat.ObjectCount; i < desDat.SceneItems.Count; i++) { //不加载爆出物品。待打碎物品后,随机爆出物品 //不加载属性灯. //不加载固有物件. if (desDat.SceneItems[i].name.StartsWith("D_user") || desDat.SceneItems[i].name.StartsWith("D_team") || desDat.SceneItems[i].name.StartsWith("D_User")) { j++; continue; } //环境特效.一直存在的特效. string effect; if (desDat.SceneItems[i].ContainsKey("effect", out effect)) { j++; continue; } if (desDat.SceneItems[i].name.StartsWith("D_wp") || desDat.SceneItems[i].name.StartsWith("D_it") || desDat.SceneItems[i].name.StartsWith("D_It")) { j++; continue; } string type; bool active = false; if (desDat.SceneItems[i].ContainsKey("ticket", out type)) { //剧情模式出现 string[] subtype = type.Split(new char[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries); for (int t = 0; t < subtype.Length; t++) { if (int.Parse(subtype[t]) == 6) { active = true; break; } } } else { active = true; } if (!active) { j++; continue; } GameObject obj = new GameObject(); obj.name = desDat.SceneItems[i].name; string @model = ""; if (desDat.SceneItems[i].ContainsKey("model", out model)) { if (!string.IsNullOrEmpty(model)) { WsGlobal.ShowMeteorObject(model, obj.transform); } } string Iden; if (desDat.SceneItems[i].ContainsKey("name", out Iden)) { //隐藏属性 //names.Add(Iden);//类似teamB12 蝴蝶阵营 12出生点 machine->固定不旋转 } if (desDat.SceneItems[i].ContainsKey("billboard", out Iden)) { //billBoard = (Iden == "1"); } obj.transform.position = desDat.SceneItems[i].pos; obj.transform.rotation = desDat.SceneItems[i].quat; obj.transform.SetParent(transform); j++; } }
//适用于非武器类型的任意模型的显示,包括地图都可以用此方法读,且支持IFL材质,创建虚拟体,只匹配序号,不匹配名称 public static void ShowMeteorObject(string file, Transform parent, bool gen = false) { if (file.EndsWith(".des")) { file = file.Substring(0, file.Length - 4); } DesFile fIns = Main.Ins.DesLoader.Load(file); GMBFile gmb = Main.Ins.GMBLoader.Load(file); GMCFile fModel = Main.Ins.GMCLoader.Load(file); //保存材质球 if (Application.isEditor) { if (!System.IO.Directory.Exists("Assets/Materials/Weapons/resources/")) { System.IO.Directory.CreateDirectory("Assets/Materials/Weapons/resources/"); } } //看des文件是否为空 //优先GMB if (gmb != null) { //还未处理IFL序列图动态加载。 Material[] mat = new Material[gmb.TexturesCount]; for (int i = 0; i < mat.Length; i++) { mat[i] = null; } Dictionary <int, string> iflMat = new Dictionary <int, string>();//IFL材质特殊处理,IFL材质均为mobile/particle/additive for (int x = 0; x < gmb.TexturesCount; x++) { string tex = gmb.TexturesNames[x]; if (tex.ToLower().EndsWith(".ifl")) { if (!iflMat.ContainsKey(x)) { iflMat.Add(x, tex); } continue; } string iden = string.Format("{0}_{1:D2}", file, x); mat[x] = Resources.Load <Material>(iden); if (mat[x] == null) { mat[x] = new Material(ShaderMng.Find("AlphaTexture")); int del = tex.LastIndexOf('.'); if (del != -1) { tex = tex.Substring(0, del); } Texture texture = Resources.Load <Texture>(tex); if (texture == null) { Debug.LogError("texture miss on load gmb:" + file + " texture name:" + tex); } mat[x].SetTexture("_MainTex", texture); mat[x].name = iden; if (gen) { //UnityEditor.AssetDatabase.CreateAsset(mat[x], "Assets/Materials/Weapons/resources/" + mat[x].name + ".mat"); //UnityEditor.AssetDatabase.Refresh(); } } } for (int i = 0; i < fIns.SceneItems.Count; i++) { GameObject objMesh = new GameObject(); bool addIflComponent = false; int iflParam = -1; int iflMatIndex = 0; objMesh.name = fIns.SceneItems[i].name; objMesh.transform.localRotation = Quaternion.identity; objMesh.transform.localPosition = Vector3.zero; objMesh.transform.localScale = Vector3.one; objMesh.layer = parent.gameObject.layer; //bool realObject = false;//是不是正常物体,虚拟体无需设置材质球之类 if (i < gmb.SceneObjectsCount) { //for (int j = 0; j < gmb.SceneObjectsCount; j++) //{ // if (gmb.mesh[j].name == objMesh.name) // { //realObject = true; Mesh w = new Mesh(); //前者子网格编号,后者 索引缓冲区 Dictionary <int, List <int> > tr = new Dictionary <int, List <int> >(); List <Vector3> ve = new List <Vector3>(); List <Vector2> uv = new List <Vector2>(); List <Vector3> nor = new List <Vector3>(); List <Color> col = new List <Color>(); for (int k = 0; k < gmb.mesh[i].faces.Count; k++) { int key = gmb.mesh[i].faces[k].material; if (tr.ContainsKey(key)) { tr[key].Add(gmb.mesh[i].faces[k].triangle[0]); tr[key].Add(gmb.mesh[i].faces[k].triangle[1]); tr[key].Add(gmb.mesh[i].faces[k].triangle[2]); } else { tr.Add(key, new List <int>()); tr[key].Add(gmb.mesh[i].faces[k].triangle[0]); tr[key].Add(gmb.mesh[i].faces[k].triangle[1]); tr[key].Add(gmb.mesh[i].faces[k].triangle[2]); } } for (int k = 0; k < gmb.mesh[i].vertices.Count; k++) { //ve.Add(gmb.mesh[i].vertices[k].pos); Vector3 vec = gmb.mesh[i].vertices[k].pos - (Vector3)fIns.SceneItems[i].pos; vec = Quaternion.Inverse(fIns.SceneItems[i].quat) * vec; //ve.Add(fModel.mesh[i].vertices[k].pos); ve.Add(vec); uv.Add(gmb.mesh[i].vertices[k].uv); col.Add(gmb.mesh[i].vertices[k].color); nor.Add(gmb.mesh[i].vertices[k].normal); } w.SetVertices(ve); w.uv = uv.ToArray(); w.subMeshCount = tr.Count; int ss = 0; List <Material> targetMat = new List <Material>(); foreach (var each in tr) { w.SetIndices(each.Value.ToArray(), MeshTopology.Triangles, ss++); if (each.Key >= 0 && each.Key < gmb.shader.Length) { int materialIndex = gmb.shader[each.Key].TextureArg0; if (materialIndex >= 0 && materialIndex < mat.Length) { if (mat[materialIndex] == null) { targetMat.Add(new Material(Shader.Find("Unlit/Transparent"))); addIflComponent = true; iflParam = materialIndex; iflMatIndex = targetMat.Count - 1; } else { targetMat.Add(mat[materialIndex]); } } else { Material defaults = Resources.Load <Material>(string.Format("{0}_{1:D2}", file, materialIndex)); if (defaults == null) { defaults = new Material(Shader.Find("Unlit/Texture")); } defaults.name = string.Format("{0}_{1:D2}", file, materialIndex); if (gen) { //UnityEditor.AssetDatabase.CreateAsset(defaults, "Assets/Materials/Weapons/resources/" + defaults.name + ".mat"); //UnityEditor.AssetDatabase.Refresh(); } targetMat.Add(defaults); } } } MeshRenderer mr = objMesh.AddComponent <MeshRenderer>(); MeshFilter mf = objMesh.AddComponent <MeshFilter>(); mf.mesh = w; mf.mesh.colors = col.ToArray(); mf.mesh.normals = nor.ToArray(); mf.mesh.RecalculateBounds(); mf.mesh.RecalculateNormals(); mr.materials = targetMat.ToArray(); string vis = ""; if (fIns.SceneItems[i].ContainsKey("visible", out vis)) { if (vis == "0") { mr.enabled = false; //BoxCollider co = mr.gameObject.AddComponent<BoxCollider>(); } } string block = ""; if (fIns.SceneItems[i].ContainsKey("blockplayer", out block)) { if (block == "no") { MeshCollider co = mr.gameObject.GetComponent <MeshCollider>(); if (co == null) { co = mr.gameObject.AddComponent <MeshCollider>(); } if (co != null) { co.enabled = false; co.convex = false; co.isTrigger = false; } } } else { Collider coexist = mr.gameObject.GetComponent <Collider>(); if (coexist == null) { MeshCollider co = mr.gameObject.AddComponent <MeshCollider>(); co.isTrigger = false; } } } //} objMesh.transform.SetParent(parent); if (addIflComponent && iflMat.ContainsKey(iflParam)) { IFLLoader iflL = objMesh.AddComponent <IFLLoader>(); iflL.fileNameReadOnly = iflMat[iflParam]; iflL.IFLFile = Resources.Load <TextAsset>(iflMat[iflParam]); iflL.matIndex = iflMatIndex; iflL.useSharedMaterial = false; iflL.LoadIFL(); } //如果是板凳桌子,加上双面网格,避免一些BUG if (parent.name.ToLower().Contains("chair") || parent.name.ToLower().Contains("desk")) { objMesh.AddComponent <DoubleSideMeshCollider>(); } objMesh.transform.localRotation = fIns.SceneItems[i].quat; objMesh.transform.localScale = Vector3.one; objMesh.transform.localPosition = fIns.SceneItems[i].pos; } } else if (fModel != null) { //Debug.LogError("error !!!!!!!!!!!!!!!!!!!!!!!!! not support gmc file any more"); Material[] mat = new Material[fModel.TexturesCount]; for (int i = 0; i < mat.Length; i++) { mat[i] = null; } Dictionary <int, string> iflMat = new Dictionary <int, string>();//IFL材质特殊处理,IFL材质均为mobile/particle/additive for (int x = 0; x < fModel.TexturesCount; x++) { string tex = fModel.TexturesNames[x]; if (tex.ToLower().EndsWith(".ifl")) { if (!iflMat.ContainsKey(x)) { iflMat.Add(x, tex); } continue; } mat[x] = Resources.Load <Material>(string.Format("{0}_{1:D2}", file, x)); if (mat[x] == null) { mat[x] = new Material(ShaderMng.Find("AlphaTexture")); int del = tex.LastIndexOf('.'); if (del != -1) { tex = tex.Substring(0, del); } Texture texture = Resources.Load <Texture>(tex); if (texture == null) { Debug.LogError("texture miss on load gmc:" + file + " texture name:" + tex); } mat[x].SetTexture("_MainTex", texture); mat[x].name = string.Format("{0}_{1:D2}", file, x); if (gen) { //UnityEditor.AssetDatabase.CreateAsset(mat[x], "Assets/Materials/Weapons/resources/" + mat[x].name + ".mat"); //UnityEditor.AssetDatabase.Refresh(); } } //mat[x] = Resources.Load<Material>(string.Format("{0}_{1:D2}", file, x)); //if (mat[x] == null) //{ // mat[x] = new Material(ShaderUtil.Find("UnlitAlphaTexture")); // string tex = fModel.TexturesNames[x]; // int del = tex.LastIndexOf('.'); // if (del != -1) // tex = tex.Substring(0, del); // Texture texture = Resources.Load<Texture>(tex); // if (texture == null) // Debug.LogError("texture miss on load gmc:" + file + " texture name:" + tex); // mat[x].SetTexture("_MainTex", texture); // mat[x].name = string.Format("{0}_{1:D2}", file, x); // //AssetDatabase.CreateAsset(mat[x], "Assets/Materials/" + file + "/resources/" + mat[x].name + ".mat"); // //AssetDatabase.Refresh(); //} } for (int i = 0; i < fIns.SceneItems.Count; i++) { GameObject objMesh = new GameObject(); bool addIflComponent = false; int iflParam = -1; int iflMatIndex = 0; objMesh.name = fIns.SceneItems[i].name; objMesh.transform.localRotation = Quaternion.identity; objMesh.transform.localPosition = Vector3.zero; objMesh.transform.localScale = Vector3.one; objMesh.layer = parent.gameObject.layer; //bool realObject = false;//是不是正常物体,虚拟体无需设置材质球之类 if (i < fModel.SceneObjectsCount) { //for (int j = 0; j < fModel.SceneObjectsCount; j++) //{ //if (fModel.mesh[j].name == objMesh.name) { //realObject = true; Mesh w = new Mesh(); //前者子网格编号,后者 索引缓冲区 Dictionary <int, List <int> > tr = new Dictionary <int, List <int> >(); List <Vector3> ve = new List <Vector3>(); List <Vector2> uv = new List <Vector2>(); List <Vector3> nor = new List <Vector3>(); List <Color> col = new List <Color>(); for (int k = 0; k < fModel.mesh[i].faces.Count; k++) { int key = fModel.mesh[i].faces[k].material; if (tr.ContainsKey(key)) { tr[key].Add(fModel.mesh[i].faces[k].triangle[0]); tr[key].Add(fModel.mesh[i].faces[k].triangle[1]); tr[key].Add(fModel.mesh[i].faces[k].triangle[2]); } else { tr.Add(key, new List <int>()); tr[key].Add(fModel.mesh[i].faces[k].triangle[0]); tr[key].Add(fModel.mesh[i].faces[k].triangle[1]); tr[key].Add(fModel.mesh[i].faces[k].triangle[2]); } } for (int k = 0; k < fModel.mesh[i].vertices.Count; k++) { Vector3 vec = fModel.mesh[i].vertices[k].pos - (Vector3)fIns.SceneItems[i].pos; vec = Quaternion.Inverse(fIns.SceneItems[i].quat) * vec; //ve.Add(fModel.mesh[i].vertices[k].pos); ve.Add(vec); uv.Add(fModel.mesh[i].vertices[k].uv); col.Add(fModel.mesh[i].vertices[k].color); nor.Add(fModel.mesh[i].vertices[k].normal); } w.SetVertices(ve); w.uv = uv.ToArray(); w.subMeshCount = tr.Count; int ss = 0; List <Material> targetMat = new List <Material>(); foreach (var each in tr) { w.SetIndices(each.Value.ToArray(), MeshTopology.Triangles, ss++); if (each.Key >= 0 && each.Key < fModel.shader.Length) { int materialIndex = fModel.shader[each.Key].TextureArg0; if (materialIndex >= 0 && materialIndex < mat.Length) { if (mat[materialIndex] == null) { targetMat.Add(new Material(Shader.Find("Unlit/Transparent"))); addIflComponent = true; iflParam = materialIndex; iflMatIndex = targetMat.Count - 1; } else { targetMat.Add(mat[materialIndex]); } } else { //即使没有贴图,也存在材质 Material defaults = Resources.Load <Material>(string.Format("{0}_{1:D2}", file, materialIndex)); if (defaults == null) { defaults = new Material(Shader.Find("Unlit/Texture")); } defaults.name = string.Format("{0}_{1:D2}", file, materialIndex); if (gen) { //UnityEditor.AssetDatabase.CreateAsset(defaults, "Assets/Materials/Weapons/resources/" + defaults.name + ".mat"); //UnityEditor.AssetDatabase.Refresh(); } targetMat.Add(defaults); } } } MeshRenderer mr = objMesh.AddComponent <MeshRenderer>(); MeshFilter mf = objMesh.AddComponent <MeshFilter>(); mf.mesh = w; mf.mesh.colors = col.ToArray(); mf.mesh.normals = nor.ToArray(); mf.mesh.RecalculateBounds(); mf.mesh.RecalculateNormals(); mr.materials = targetMat.ToArray(); string vis = ""; if (fIns.SceneItems[i].ContainsKey("visible", out vis)) { if (vis == "0") { mr.enabled = false; //BoxCollider co = mr.gameObject.AddComponent<BoxCollider>(); } } string block = ""; if (fIns.SceneItems[i].ContainsKey("blockplayer", out block)) { if (block == "no") { Collider co = mr.gameObject.GetComponent <MeshCollider>(); if (co == null) { co = mr.gameObject.AddComponent <MeshCollider>(); } if (co != null) { MeshCollider mec = co as MeshCollider; if (mec != null) { mec.enabled = false; mec.convex = false;//unity bug mec.isTrigger = false; } } } } else { Collider coexist = mr.gameObject.GetComponent <Collider>(); if (coexist == null) { MeshCollider co = mr.gameObject.AddComponent <MeshCollider>(); co.isTrigger = false; } } } } objMesh.transform.SetParent(parent); if (addIflComponent && iflMat.ContainsKey(iflParam)) { IFLLoader iflL = objMesh.AddComponent <IFLLoader>(); iflL.fileNameReadOnly = iflMat[iflParam]; iflL.IFLFile = Resources.Load <TextAsset>(iflMat[iflParam]); iflL.matIndex = iflMatIndex; iflL.useSharedMaterial = false; iflL.LoadIFL(); } //如果是板凳桌子,加上双面网格,避免一些BUG if (parent.name.ToLower().Contains("chair") || parent.name.ToLower().Contains("desk")) { objMesh.AddComponent <DoubleSideMeshCollider>(); } objMesh.transform.localRotation = fIns.SceneItems[i].quat; objMesh.transform.localScale = Vector3.one; objMesh.transform.localPosition = fIns.SceneItems[i].pos; } } else { //一个预设 GameObject prefab = Resources.Load(file) as GameObject; if (prefab != null) { GameObject obj = GameObject.Instantiate(prefab, parent); obj.transform.localScale = Vector3.one; obj.transform.localPosition = Vector3.zero; obj.transform.rotation = Quaternion.identity; BoxCollider co = obj.GetComponentInChildren <BoxCollider>(); co.isTrigger = true; int k = obj.transform.childCount; while (obj.transform.childCount != 0) { Transform tri = obj.transform.GetChild(0); tri.SetParent(parent); } GameObject.Destroy(obj); WsGlobal.SetObjectLayer(parent.gameObject, parent.gameObject.layer); } } }
void EquipChanged(InventoryItem it) { weaponLoader.EquipWeapon(it); WsGlobal.SetObjectLayer(gameObject, gameObject.layer); }
void OnLoadLevel() { WsGlobal.ShowLevelSelect(); OnClickClose(); }
//把背包里的物品,装备到身上. public void EquipWeapon() { UnEquipWeapon(); Init(); DesLoader.Instance.Refresh(); GMCLoader.Instance.Refresh(); GMBLoader.Instance.Refresh(); if (!string.IsNullOrEmpty(StrWeaponL)) { GameObject weaponPrefab = Resources.Load <GameObject>(StrWeaponL); //如果新武器系统包含了这件武器。 if (weaponPrefab == null) { if (L != null) { DestroyImmediate(L); } L = new GameObject().transform; L.SetParent(LP); L.gameObject.layer = LP.gameObject.layer; L.localRotation = Quaternion.identity; L.localPosition = Vector3.zero; L.localScale = Vector3.one; L.name = StrWeaponR; WsGlobal.ShowMeteorObject(StrWeaponL, L.transform, GenerateMaterial); WsGlobal.SetObjectLayer(L.gameObject, L.gameObject.layer); } else { if (L != null) { DestroyImmediate(L); } GameObject objWeapon = GameObject.Instantiate(weaponPrefab); L = objWeapon.transform; L.SetParent(LP); L.gameObject.layer = LP.gameObject.layer; L.localPosition = Vector3.zero; //这种导入来的模型,需要Y轴旋转180,与原系统的物件坐标系存在一些问题 L.localRotation = new Quaternion(0, 1, 0, 0); L.name = StrWeaponL; L.localScale = Vector3.one; WsGlobal.SetObjectLayer(L.gameObject, L.gameObject.layer); } } if (!string.IsNullOrEmpty(StrWeaponR)) { GameObject weaponPrefab = Resources.Load <GameObject>(StrWeaponR); if (weaponPrefab == null) { if (R != null) { DestroyImmediate(R); } R = new GameObject().transform; R.SetParent(RP); R.gameObject.layer = RP.gameObject.layer; R.localRotation = Quaternion.identity; R.localPosition = Vector3.zero; R.localScale = Vector3.one; R.name = StrWeaponR; WsGlobal.ShowMeteorObject(StrWeaponR, R.transform, GenerateMaterial); WsGlobal.SetObjectLayer(R.gameObject, R.gameObject.layer); } else { //预设要绕Y旋转180 if (R != null) { DestroyImmediate(R); } GameObject objWeapon = GameObject.Instantiate(weaponPrefab); R = objWeapon.transform; R.SetParent(RP); R.gameObject.layer = RP.gameObject.layer; R.localPosition = Vector3.zero; R.localRotation = new Quaternion(0, 1, 0, 0); R.name = StrWeaponR; R.localScale = Vector3.one; WsGlobal.SetObjectLayer(R.gameObject, R.gameObject.layer); } } }
//原粒子系统是右手坐标系的,转移到左手坐标系后非常多问题,特别是父子关系以及,跟随和子物体旋转叠加 public void Init(SfxEffect effect, SFXEffectPlay parent, int index, float timePlayed = 0.0f) { playedTime = timePlayed; PlayDone = false; transform.rotation = Quaternion.identity; effectIndex = index; parentSfx = parent;//当找不到跟随者的时候,向父询问其他特效是否包含此名称. name = effect.EffectName; EffectType = effect.EffectType; //一个是跟随移动,一个是跟随旋转 mOwner = parent.GetComponent <MeteorUnit>(); source = effect; if (effect.EffectType == "PARTICLE") { particle = Instantiate(Resources.Load <GameObject>("SFXParticles"), Vector3.zero, Quaternion.identity, transform).GetComponent <ParticleSystem>(); } if (string.IsNullOrEmpty(effect.Bone0)) { PositionFollow = mOwner == null ? parentSfx.transform : mOwner.transform; } else if (effect.Bone0 == "ROOT") { PositionFollow = mOwner == null ? parent.transform : mOwner.ROOTNull; } else if (effect.Bone0 == "Character")//根骨骼上一级,角色,就是不随着b骨骼走,但是随着d_base走 { PositionFollow = mOwner == null ? parent.transform: mOwner.RootdBase; } else { PositionFollow = FindFollowed(effect.Bone0); } if (string.IsNullOrEmpty(effect.Bone1)) { RotateFollow = mOwner == null ? parent.transform : mOwner.transform; } else if (effect.Bone1 == "ROOT") { RotateFollow = mOwner == null ? parent.transform : mOwner.ROOTNull; } else if (effect.Bone1 == "Character") { RotateFollow = mOwner == null ? parent.transform : mOwner.RootdBase; } else { RotateFollow = FindFollowed(effect.Bone1); } if (PositionFollow != null) { transform.position = PositionFollow.transform.position; } mRender = gameObject.GetComponent <MeshRenderer>(); mFilter = gameObject.GetComponent <MeshFilter>(); int meshIndex = -1; if (effect.EffectType == "DONUT") { //Debug.LogError("find Donut Effect"); } //部分模型是要绕X旋转270的,这样他的缩放,和移动,都只能靠自己 if (effect.EffectType == "PLANE") { meshIndex = 0; } else if (effect.EffectType == "BOX") { meshIndex = 1; } else if (effect.EffectType == "DONUT") { transform.localScale = effect.frames[0].scale; meshIndex = 2; } else if (effect.EffectType == "MODEL")//自行加载模型 { transform.localScale = effect.frames[0].scale; transform.rotation = RotateFollow.rotation * effect.frames[0].quat; transform.position = PositionFollow.position + effect.frames[0].pos; if (!string.IsNullOrEmpty(effect.Tails[0])) { string[] des = effect.Tails[0].Split(new char[] { '\\' }, System.StringSplitOptions.RemoveEmptyEntries); if (des.Length != 0) { WsGlobal.ShowMeteorObject(des[des.Length - 1], transform); } } //这个时候,不要用自带的meshfilter了,让他自己处理显示问题,只要告诉他在哪个地方显示 meshIndex = 100; } else if (effect.EffectType == "SPHERE") { meshIndex = 3; } else if (effect.EffectType == "PARTICLE") { if (!string.IsNullOrEmpty(effect.Tails[0])) { PositionFollow = FindFollowed(effect.Tails[0]); } if (!string.IsNullOrEmpty(effect.Tails[1])) { RotateFollow = FindFollowed(effect.Tails[1]); } if (PositionFollow != null) { transform.position = PositionFollow.transform.position; } meshIndex = 101; } else if (effect.EffectType == "CYLINDER") { //InitializeQuat = new Quaternion(0.7170f, 0, 0, -0.7170f); //InitializeQuat = Quaternion.identity; meshIndex = 4; } else if (effect.EffectType == "BILLBOARD") { LookAtC = true; meshIndex = 5; } else if (effect.EffectType == "DRAG") { meshIndex = 6; } //决定模型 if (meshIndex != -1 && meshIndex < mesh.Length) { if (meshIndex == 4) { mFilter.mesh = SfxMeshGenerator.Instance.CreateCylinder(source.origAtt.y, source.origAtt.x, source.origScale.x); } else if (meshIndex == 3) { mFilter.mesh = SfxMeshGenerator.Instance.CreateSphere(source.SphereScale); } else if (meshIndex == 0) { mFilter.mesh = SfxMeshGenerator.Instance.CreatePlane(source.origScale.x, source.origScale.y); } else { mFilter.mesh = mesh[meshIndex]; } } if (effect.Texture.ToLower().EndsWith(".bmp") || effect.Texture.ToLower().EndsWith(".jpg") || effect.Texture.ToLower().EndsWith(".tga")) { texture = effect.Texture.Substring(0, effect.Texture.Length - 4); tex = Resources.Load <Texture>(texture); } else if (effect.Texture.ToLower().EndsWith(".ifl")) { iflTexture = gameObject.AddComponent <IFLLoader>(); iflTexture.IFLFile = Resources.Load <TextAsset>(effect.Texture); if (effect.EffectType == "PARTICLE") { iflTexture.SetTargetMeshRenderer(particle.GetComponent <ParticleSystemRenderer>()); } iflTexture.LoadIFL();//传递false表示由特效控制每一帧的切换时间. tex = iflTexture.GetTexture(0); } //else // print("effect contains other prefix:" + effect.Texture == null ? " texture is null" : effect.Texture); if (tex != null) { if (effect.EffectType == "PARTICLE") { ParticleSystemRenderer render = particle.GetComponent <ParticleSystemRenderer>(); if (effect.BlendType == 0) { render.material.shader = Shader.Find("Unlit/Texture");//普通不透明无光照 } else if (effect.BlendType == 1) { render.material.shader = Shader.Find("UnlitAdditive");//滤色 加亮 不透明 } else if (effect.BlendType == 2) { render.material.shader = Shader.Find("UnlitAdditive");//反色+透明度 } else if (effect.BlendType == 3) { render.material.shader = Shader.Find("Mobile/Particles/Alpha Blended");//不滤色,支持透明 } else if (effect.BlendType == 4) { render.material.shader = Shader.Find("Custom/MeteorBlend4");//滤色,透明 } else { render.material.shader = Shader.Find("Unlit/Texture");//普通不透明无光照 } render.material.SetTexture("_MainTex", tex); render.material.SetColor("_Color", effect.frames[0].colorRGB); render.material.SetColor("_TintColor", effect.frames[0].colorRGB); render.material.SetFloat("_Intensity", effect.frames[0].TailFlags[9]); //particle.Emit(1); } else { if (effect.BlendType == 0) { mRender.material.shader = Shader.Find("Unlit/Texture");//普通不透明无光照 } else if (effect.BlendType == 1) { mRender.material.shader = Shader.Find("UnlitAdditive");//滤色 加亮 不透明 } else if (effect.BlendType == 2) { mRender.material.shader = Shader.Find("UnlitAdditive");//反色+透明度 } else if (effect.BlendType == 3) { mRender.material.shader = Shader.Find("Mobile/Particles/Alpha Blended");//不滤色,支持透明 } else if (effect.BlendType == 4) { mRender.material.shader = Shader.Find("Custom/MeteorBlend4");//滤色,透明 } else { mRender.material.shader = Shader.Find("Unlit/Texture");//普通不透明无光照 } if (effect.BlendType == 2) { mRender.material.SetColor("_InvColor", effect.frames[0].colorRGB); } else { mRender.material.SetColor("_Color", effect.frames[0].colorRGB); mRender.material.SetColor("_TintColor", effect.frames[0].colorRGB); } mRender.material.SetFloat("_Intensity", effect.frames[0].TailFlags[9]); mRender.material.SetTexture("_MainTex", tex); if (effect.uSpeed != 0.0f || effect.vSpeed != 0.0f) { tex.wrapMode = TextureWrapMode.Repeat; } else { tex.wrapMode = TextureWrapMode.Clamp; } mRender.material.SetFloat("_u", effect.uSpeed); mRender.material.SetFloat("_v", effect.vSpeed); } } if (effect.Hidden == 1) { if (particle != null) { ParticleSystemRenderer render = particle.GetComponent <ParticleSystemRenderer>(); if (render != null) { render.enabled = false; } } mRender.enabled = false; } if (effect.EffectName.StartsWith("Attack")) { if (effect.EffectType == "SPHERE") { damageBox = gameObject.AddComponent <SphereCollider>(); } else { damageBox = gameObject.AddComponent <BoxCollider>(); } damageBox.enabled = false; } playCoroutine = StartCoroutine(PlayEffectFrame()); }
public void Init(int modelIdx, int layer, bool updateModel = false) { tag = "meteorUnit"; UnitId = modelIdx; IgnoreGravity = true; if (updateModel) { //把伤害盒子去掉,把受击盒子去掉 hitList.Clear(); if (charLoader != null) { GameObject.Destroy(charLoader.rootBone.parent.gameObject); GameObject.Destroy(charLoader.Skin.gameObject); charLoader = null; } } if (Attr == null && Main.Ins.MeteorManager != null && Main.Ins.LocalPlayer != null) { Attr = Main.Ins.LocalPlayer.Attr; } if (charLoader == null) { charLoader = new CharacterLoader(); } if (posMng == null) { posMng = new PoseStatus(); } if (updateModel) { transform.position = Vector3.zero; transform.rotation = Quaternion.identity; } charLoader.LoadCharactor(UnitId, transform); posMng.Init(this); WeaponR = NodeHelper.Find("d_wpnR", charLoader.rootBone.gameObject).transform; WeaponL = NodeHelper.Find("d_wpnL", charLoader.rootBone.gameObject).transform; ROOTNull = NodeHelper.Find("b", gameObject).transform; RootdBase = charLoader.rootBone; CameraTarget = RootdBase; weaponLoader = gameObject.GetComponent <WeaponLoader>(); if (updateModel) { Destroy(weaponLoader); weaponLoader = null; } if (weaponLoader == null) { weaponLoader = gameObject.AddComponent <WeaponLoader>(); } weaponLoader.Init(this); charController = gameObject.GetComponent <CharacterController>(); if (charController == null) { charController = gameObject.AddComponent <CharacterController>(); } charController.center = new Vector3(0, 16, 0); charController.height = 32; charController.radius = 9.0f;//不这么大碰不到寻路点. charController.stepOffset = 7.6f; posMng.ChangeAction(); WsGlobal.SetObjectLayer(gameObject, layer); InventoryItem itWeapon = Main.Ins.GameStateMgr.MakeEquip(1); weaponLoader.EquipWeapon(itWeapon); this.name = Main.Ins.CombatData.GetCharacterName(UnitId); }
public void Load(string file) { string s = file; if (!string.IsNullOrEmpty(file)) { //查看此物体属于什么,A:武器 B:道具 C:镖物 if (ItemInfo == null) { for (int i = 0; i < MenuResLoader.Instance.Info.Count; i++) { if (MenuResLoader.Instance.Info[i].model != "0" && 0 == string.Compare(MenuResLoader.Instance.Info[i].model, s, true)) { ApplyPrev(MenuResLoader.Instance.Info[i]); break; } string rh = s.ToUpper(); string rh2 = MenuResLoader.Instance.Info[i].model.ToUpper(); if (rh2.StartsWith(rh)) { s = MenuResLoader.Instance.Info[i].model; ApplyPrev(MenuResLoader.Instance.Info[i]); break; } } //不是一个Meteor.res里的物件 if (ItemInfo == null) { List <ItemBase> its = GameData.itemMng.GetFullRow(); for (int i = 0; i < its.Count; i++) { if (its[i].MainType == 1) { WeaponBase weapon = WeaponMng.Instance.GetItem(its[i].UnitId); if (weapon.WeaponR == s) { ItemInfoEx = its[i]; break; } } } } } //证明此物品不是可拾取物品 gameObject.layer = (ItemInfo != null || ItemInfoEx != null) ? LayerMask.NameToLayer("Trigger") : LayerMask.NameToLayer("Scene"); root.gameObject.layer = gameObject.layer; //箱子椅子桌子酒坛都不允许为场景物品. WsGlobal.ShowMeteorObject(s, root); DesFile fIns = DesLoader.Instance.Load(s); //把子物件的属性刷到一起. for (int i = 0; i < fIns.SceneItems.Count; i++) { LoadCustom(fIns.SceneItems[i].name, fIns.SceneItems[i].custom); } player = GetComponent <FMCPlayer>(); if (player == null) { player = gameObject.AddComponent <FMCPlayer>(); } player.Init(s); if (player.frames == null) { Destroy(player); player = null; } } }
//public void SaveParticle(string file) //{ // if (source != null && source.particle != null) // { // System.IO.FileStream fs = System.IO.File.OpenWrite(file); // System.IO.BinaryWriter w = new System.IO.BinaryWriter(fs); // w.Write(source.particle); // w.Flush(); // w.Close(); // fs.Close(); // } //} //原粒子系统是右手坐标系的,转移到左手坐标系后非常多问题,特别是父子关系以及,跟随和子物体旋转叠加 public void Init(SfxEffect effect, SFXEffectPlay parent, int index, float timePlayed = 0.0f, bool preLoad = false) { playedTime = timePlayed; PlayDone = false; transform.rotation = Quaternion.identity; effectIndex = index; parentSfx = parent;//当找不到跟随者的时候,向父询问其他特效是否包含此名称. name = effect.EffectName; EffectType = effect.EffectType; //一个是跟随移动,一个是跟随旋转 mOwner = parent.GetComponent <MeteorUnit>(); source = effect; if (effect.EffectType.Equals("PARTICLE")) { particle = Instantiate(Resources.Load <GameObject>("SFXParticles"), Vector3.zero, Quaternion.identity, transform).GetComponent <ParticleSystem>(); ParticleSystem.MainModule mainModule = particle.main; ParticleSystem.EmissionModule emissionModule = particle.emission; ParticleSystem.ShapeModule shapeModule = particle.shape; emissionModule.rateOverTime = new ParticleSystem.MinMaxCurve(effect.MaxParticles, effect.MaxParticles); mainModule.startLifetime = effect.StartLifetime; mainModule.maxParticles = effect.MaxParticles; mainModule.startSize3D = false; mainModule.startSize = new ParticleSystem.MinMaxCurve(effect.startSizeMin, effect.startSizeMax); mainModule.startSpeed = new ParticleSystem.MinMaxCurve(effect.startSpeedMin, effect.startSpeedMax); mainModule.loop = true; mainModule.duration = 1.0f; //124字节的,烟雾特效,旋转角度 0-360,shape使用box, render使用billboard if (effect.version == 1) { mainModule.startRotation = new ParticleSystem.MinMaxCurve(0, 360); shapeModule.shapeType = ParticleSystemShapeType.Box; shapeModule.box = new Vector3(effect.startSizeMin, 0, effect.startSizeMax); ParticleSystemRenderer r = particle.GetComponent <ParticleSystemRenderer>(); r.renderMode = ParticleSystemRenderMode.Billboard; r.minParticleSize = 0.1f; r.maxParticleSize = 0.1f; } } if (string.IsNullOrEmpty(effect.Bone0)) { PositionFollow = mOwner == null ? parentSfx.transform : mOwner.transform; } else if (effect.Bone0.Equals("ROOT")) { PositionFollow = mOwner == null ? parent.transform : mOwner.ROOTNull; } else if (effect.Bone0.Equals("Character"))//根骨骼上一级,角色,就是不随着b骨骼走,但是随着d_base走 { PositionFollow = mOwner == null ? parent.transform: mOwner.RootdBase; } else { PositionFollow = FindFollowed(effect.Bone0); } if (string.IsNullOrEmpty(effect.Bone1)) { RotateFollow = mOwner == null ? parent.transform : mOwner.transform; } else if (effect.Bone1.Equals("ROOT")) { RotateFollow = mOwner == null ? parent.transform : mOwner.ROOTNull; } else if (effect.Bone1.Equals("Character")) { RotateFollow = mOwner == null ? parent.transform : mOwner.RootdBase; } else { RotateFollow = FindFollowed(effect.Bone1); } if (PositionFollow != null) { transform.position = PositionFollow.transform.position; } mRender = gameObject.GetComponent <MeshRenderer>(); mFilter = gameObject.GetComponent <MeshFilter>(); int meshIndex = -1; if (effect.EffectType.Equals("DONUT")) { //Debug.LogError("find Donut Effect"); } //部分模型是要绕X旋转270的,这样他的缩放,和移动,都只能靠自己 if (effect.EffectType.Equals("PLANE")) { meshIndex = 0; } else if (effect.EffectType.Equals("BOX")) { meshIndex = 1; } else if (effect.EffectType.Equals("DONUT")) { transform.localScale = effect.frames[0].scale; meshIndex = 2; } else if (effect.EffectType.Equals("MODEL"))//自行加载模型 { transform.localScale = effect.frames[0].scale; transform.rotation = RotateFollow.rotation * effect.frames[0].quat; transform.position = PositionFollow.position + effect.frames[0].pos; if (!string.IsNullOrEmpty(effect.Tails[0])) { string[] des = effect.Tails[0].Split(new char[] { '\\' }, System.StringSplitOptions.RemoveEmptyEntries); if (des.Length != 0) { WsGlobal.ShowMeteorObject(des[des.Length - 1], transform); } } //这个时候,不要用自带的meshfilter了,让他自己处理显示问题,只要告诉他在哪个地方显示 meshIndex = 100; } else if (effect.EffectType.Equals("SPHERE")) { meshIndex = 3; } else if (effect.EffectType.Equals("PARTICLE")) { if (!string.IsNullOrEmpty(effect.Tails[0])) { PositionFollow = FindFollowed(effect.Tails[0]); } if (!string.IsNullOrEmpty(effect.Tails[1])) { RotateFollow = FindFollowed(effect.Tails[1]); } if (PositionFollow != null) { transform.position = PositionFollow.transform.position; } meshIndex = 101; } else if (effect.EffectType.Equals("CYLINDER")) { meshIndex = 4; } else if (effect.EffectType.Equals("BILLBOARD")) { LookAtC = true; meshIndex = 5; } else if (effect.EffectType.Equals("DRAG")) { meshIndex = 6; } //决定模型 if (meshIndex != -1 && meshIndex < GamePool.Instance.MeshMng.Meshes.Length) { if (meshIndex == 4) { mFilter.mesh = Main.Ins.SfxMeshGenerator.CreateCylinder(source.origAtt.y, source.origAtt.x, source.origScale.x); } else if (meshIndex == 3) { mFilter.mesh = Main.Ins.SfxMeshGenerator.CreateSphere(source.SphereRadius); } else if (meshIndex == 0) { mFilter.mesh = Main.Ins.SfxMeshGenerator.CreatePlane(source.origScale.x, source.origScale.y); } else { mFilter.mesh = GamePool.Instance.MeshMng.Meshes[meshIndex]; } } if (effect.Texture.ToLower().EndsWith(".bmp") || effect.Texture.ToLower().EndsWith(".jpg") || effect.Texture.ToLower().EndsWith(".tga")) { texture = effect.Texture.Substring(0, effect.Texture.Length - 4); tex = Resources.Load <Texture>(texture); } else if (effect.Texture.ToLower().EndsWith(".ifl")) { iflTexture = gameObject.AddComponent <IFLLoader>(); iflTexture.IFLFile = Resources.Load <TextAsset>(effect.Texture); if (effect.EffectType.Equals("PARTICLE")) { iflTexture.SetTargetMeshRenderer(particle.GetComponent <ParticleSystemRenderer>()); } iflTexture.LoadIFL();//传递false表示由特效控制每一帧的切换时间. tex = iflTexture.GetTexture(0); } //else // print("effect contains other prefix:" + effect.Texture == null ? " texture is null" : effect.Texture); if (tex != null) { if (effect.EffectType.Equals("PARTICLE")) { ParticleSystemRenderer render = particle.GetComponent <ParticleSystemRenderer>(); if (effect.BlendType == 0) { render.material.shader = Shader.Find("Unlit/Texture");//普通不透明无光照 } else if (effect.BlendType == 1) { render.material.shader = Shader.Find("UnlitAdditive");//滤色 加亮 不透明 } else if (effect.BlendType == 2) { render.material.shader = Shader.Find("UnlitAdditive");//反色+透明度 } else if (effect.BlendType == 3) { render.material.shader = Shader.Find("Mobile/Particles/Alpha Blended");//不滤色,支持透明 } else if (effect.BlendType == 4) { render.material.shader = Shader.Find("Custom/MeteorBlend4");//滤色,透明 } else { render.material.shader = Shader.Find("Unlit/Texture");//普通不透明无光照 } if (texture.Equals("AItem09")) { render.enabled = false; particle.Stop(); /* 应该是有一个地裂的粒子特效,但是这个特效参数没分析出来. * tex = Resources.Load<Texture>("AItemParticle"); * render.material.SetTexture("_MainTex", tex); */ } else { render.material.SetTexture("_MainTex", tex); } render.material.SetColor("_Color", effect.frames[0].colorRGB); render.material.SetColor("_TintColor", effect.frames[0].colorRGB); render.material.SetFloat("_Intensity", effect.frames[0].TailFlags[9]); if (Main.Ins.GameStateMgr.gameStatus != null && !Main.Ins.GameStateMgr.gameStatus.DisableParticle) { particle.Play(); } } else { if (effect.BlendType == 0) { mRender.material.shader = Shader.Find("Unlit/Texture");//普通不透明无光照 } else if (effect.BlendType == 1) { mRender.material.shader = Shader.Find("UnlitAdditive");//滤色 加亮 不透明 } else if (effect.BlendType == 2) { mRender.material.shader = Shader.Find("UnlitAdditive");//反色+透明度 } else if (effect.BlendType == 3) { mRender.material.shader = Shader.Find("Mobile/Particles/Alpha Blended");//不滤色,支持透明 } else if (effect.BlendType == 4) { mRender.material.shader = Shader.Find("Custom/MeteorBlend4");//滤色,透明 } else { mRender.material.shader = Shader.Find("Unlit/Texture");//普通不透明无光照 } if (effect.BlendType == 2) { mRender.material.SetColor("_InvColor", effect.frames[0].colorRGB); } else { mRender.material.SetColor("_Color", effect.frames[0].colorRGB); mRender.material.SetColor("_TintColor", effect.frames[0].colorRGB); } mRender.material.SetFloat("_Intensity", effect.frames[0].TailFlags[9]); mRender.material.SetTexture("_MainTex", tex); if (effect.uSpeed != 0.0f || effect.vSpeed != 0.0f) { tex.wrapMode = TextureWrapMode.Repeat; } else { tex.wrapMode = TextureWrapMode.Clamp; } mRender.material.SetFloat("_u", effect.uSpeed); mRender.material.SetFloat("_v", effect.vSpeed); } } else { mRender.enabled = false; } //drag不知道有什么作用,可能只是定位用的挂载点 if (effect.Hidden == 1 || meshIndex == 6) { if (particle != null) { ParticleSystemRenderer render = particle.GetComponent <ParticleSystemRenderer>(); if (render != null) { render.enabled = false; } } mRender.enabled = false; } if (effect.EffectName.StartsWith("Attack")) { if (effect.EffectType.ToUpper() == "BOX") { BoxCollider bo = gameObject.AddComponent <BoxCollider>(); bo.center = Vector3.zero; bo.size = Vector3.one; damageBox = bo; } else { //SphereCollider sph = gameObject.AddComponent<SphereCollider>(); //damageBox = sph; //sph.radius = 1.0f; //sph.center = Vector3.zero; MeshCollider co = gameObject.AddComponent <MeshCollider>(); co.convex = true; co.isTrigger = true; damageBox = co; } damageBox.enabled = false; } if (preLoad) { PlayDone = true; if (parentSfx != null) { parentSfx.OnPlayDone(this); } else { Destroy(gameObject); } return; } }
public void Load(string file) { string s = file; if (!string.IsNullOrEmpty(file)) { //查看此物体属于什么,A:武器 B:道具 C:镖物 if (ItemInfo == null) { for (int i = 0; i < Main.Ins.MenuResLoader.Info.Count; i++) { if (Main.Ins.MenuResLoader.Info[i].model != "0" && 0 == string.Compare(Main.Ins.MenuResLoader.Info[i].model, s, true)) { ApplyPrev(Main.Ins.MenuResLoader.Info[i]); break; } string rh = s.ToUpper(); string rh2 = Main.Ins.MenuResLoader.Info[i].model.ToUpper(); if (rh2.StartsWith(rh)) { s = Main.Ins.MenuResLoader.Info[i].model; ApplyPrev(Main.Ins.MenuResLoader.Info[i]); break; } } //不是一个Meteor.res里的物件 if (ItemInfo == null) { List <ItemDatas.ItemDatas> its = Main.Ins.DataMgr.GetDatasArray <ItemDatas.ItemDatas>(); for (int i = 0; i < its.Count; i++) { if (its[i].MainType == 1) { WeaponDatas.WeaponDatas weapon = U3D.GetWeaponProperty(its[i].UnitId); if (weapon.WeaponR == s) { ItemInfoEx = its[i]; break; } } } } } //证明此物品不是可拾取物品 gameObject.layer = (ItemInfo != null || ItemInfoEx != null) ? LayerMask.NameToLayer("Trigger") : LayerMask.NameToLayer("Scene"); root.gameObject.layer = gameObject.layer; //箱子椅子桌子酒坛都不允许为场景物品. WsGlobal.ShowMeteorObject(s, root); DesFile fIns = Main.Ins.DesLoader.Load(s); //把子物件的属性刷到一起. for (int i = 0; i < fIns.SceneItems.Count; i++) { LoadCustom(fIns.SceneItems[i].name, fIns.SceneItems[i].custom); } //雪人不能合并材质,不然没法动画 if (Main.Ins.CombatData.GLevelItem.Scene != "Meteor_21") { if (name.StartsWith("D_Item") || name.StartsWith("D_RJug") || name.StartsWith("D_itRJug") || name.StartsWith("D_BBox") || name.StartsWith("D_BBBox") || name.StartsWith("D_Box")) { if (root != null) { CombineChildren combine = root.gameObject.AddComponent <CombineChildren>(); combine.generateTriangleStrips = false; } else { CombineChildren combine = gameObject.AddComponent <CombineChildren>(); combine.generateTriangleStrips = false; } } } FMCFile f = Main.Ins.FMCLoader.Load(s); if (f != null) { player = GetComponent <FMCPlayer>(); if (player == null) { player = gameObject.AddComponent <FMCPlayer>(); } player.Init(s, f); } else { player = GetComponent <FMCPlayer>(); if (player != null) { DestroyObject(player); player = null; } } } }