public override void CreateGameObject(System.Action <MPObject> loadFinish) { XYCoroutineEngine.Execute(LoadRoleObject(string.Format(MapPlacementController.mapRoleObjectResLoadPathStrFormat, apprId), loadFinish)); return; //this.mapGO = ModuleFactory.CreateBaseRole( sn.ToString(), this.roleCfg.roleBone ); if (this.reference.Apprid <= 0) { base.CreateGameObject(loadFinish); return; } BaseObject bco = new BaseObject(ResourceManager.GetRoleConfig(this.reference.Apprid)); //bco.UpdateEquip(); this.mapGO = bco; if (this.mapGO.name != "BaseObject_NoRoleConfig") { this.mapGO.name = sn.ToString(); } GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube); cube.transform.parent = this.mapGO.transform; cube.transform.localPosition = Vector3.zero; cube.transform.localEulerAngles = Vector3.zero; cube.transform.localScale = new Vector3(1, 2, 1); BoxCollider bc = this.mapGO.AddComponent(typeof(BoxCollider)) as BoxCollider; bc.size = new Vector3(1, 2, 1); bc.center = new Vector3(0, 1, 0); XYClientCommon.ChangeLayer(this.mapGO, XYDefines.Layer.Player, true); //return this.mapGO; }
void NormalDraw() { BeforeUseGL(); if (MapPlacementController.instance.curSelectObj != null) { Vector3 orgPos = MapPlacementController.instance.curSelectObj.position; GL.Color(Color.cyan); GL.Begin(GL.QUADS); for (int k = 0; k < 4; k++) { GL.Vertex(orgPos + dirForQuadsDraw_[k] * -0.2f); } GL.End(); } if (this.curSelectRole != null && curSelectRole.routePointCount > 0) { DrawRolePath(this.curSelectRole); } else if (this.curSelectItem != null && curSelectItem.radius > 0) { BeforeUseGL(); GL.Color(Color.yellow); GL.Begin(GL.LINES); GL.Vertex(curSelectItem.position); lastDrawAngle_ = Quaternion.Euler(0.0f, 180.0f * Time.deltaTime, 0.0f) * lastDrawAngle_; Vector3 destPos = XYClientCommon.AdjustToGround(curSelectItem.position + lastDrawAngle_ * curSelectItem.radius); GL.Vertex(destPos); GL.End(); } }
protected override void OnFixPosition(float fixX, float fixZ) { base.OnFixPosition(fixX, fixZ); foreach (RoutePoint rp in this.routeList_) { Vector3 newPos = rp.position; newPos.x += fixX; newPos.z += fixZ; XYClientCommon.AdjustToGround(ref newPos, false); rp.position = newPos; } }
private void CheackInvalidPos() { foreach (KeyValuePair <int, MPObject> pair in mapObjs_) { Vector3 postion = pair.Value.position; RaycastHit hit; if (!XYClientCommon.RaycastDown(postion, false, out hit)) { Debug.Log("物体坐标非法 sn:" + pair.Key); } } }
private void LoadRoutes(XmlElement vNode) {//读取路径数据 XmlNodeList xnList = vNode.SelectNodes("Route"); for (int i = 0; i < xnList.Count; i++) { float stopTime = float.Parse(xnList[i].Attributes["stoptime"].Value); RoutePoint rp = new RoutePoint( XYClientCommon.AdjustToGround(GameUtility.StrToVector3(xnList[i].Attributes["position"].Value), false), stopTime); this.routeList_.Add(rp); } }
private static void ReplaceShader(Object obj) { if (obj is GameObject) { //加载GAMEOBJECT时 XYClientCommon.ForEachChildren( obj as GameObject , OnEachGameObject , true ); } else if (obj is Material) { //加载MATERIAL时 ReplaceMaterialShader(obj as Material); } }
private void RemoveInvalidGo() { List <int> keys = new List <int>(); foreach (KeyValuePair <int, MPObject> pair in mapObjs_) { Vector3 postion = pair.Value.position; RaycastHit hit; if (!XYClientCommon.RaycastDown(postion, false, out hit)) { keys.Add(pair.Key); } } foreach (int key in keys) { GameObject removeGo = mapObjs_[key].mapGO; mapObjs_.Remove(key); GameObject.DestroyImmediate(removeGo); } }
public IEnumerator LoadRoleObject(string path, System.Action <MPObject> loadFinish) { TLEditorWww roleWww = TLEditorWww.Create(path); while (!roleWww.Finished) { yield return(null); } GameObject role = null; role = roleWww.GetAsset() as GameObject; ReplaceShader(role, string.Empty); if (role == null) { Debug.LogError("Error, Load role Failed: " + path); roleWww.Unload(); } else { Role roleConfig = role.GetComponent <Role>(); if (roleConfig == null) { Debug.Log("Error,can't find role component"); } GameObject roleGo = ModelLoader.CreateRole(roleConfig).gameObject; roleGo.gameObject.GetComponent <ActionPerformer>().enabled = false; roleGo.gameObject.GetComponent <RoleObject>().enabled = false; roleWww.Unload(); this.mapGO = roleGo; this.mapGO.name = sn.ToString(); BoxCollider bc = this.mapGO.AddComponent <BoxCollider>(); bc.size = new Vector3(1, 2, 1); bc.center = new Vector3(0, 1, 0); XYClientCommon.ChangeLayer(this.mapGO, XYDefines.Layer.Player, true); loadFinish(this); } }
public void LoadOver() //加载结束,调用LOADOVER函数进行组装 { IsLoadOver = true; if (!BaseObject_ || BaseObject_.Disposed || !GameObject || !GameObject.GetComponent <Renderer>()) { Destroy(); return; } if (IsDelete) { return; } GameObject.transform.parent = BaseObject_.RoleObject.transform; GameObject.transform.localPosition = Vector3.zero; GameObject.transform.localEulerAngles = Vector3.zero; GameObject.transform.localScale = Vector3.one; Renderer render = GameObject.GetComponent <Renderer>(); //if (render is SkinnedMeshRenderer && Mesh2Bone) //{ // string[] bonesPath = Mesh2Bone.BonePath; // var bones = new Transform[bonesPath.Length]; // for (int i = 0; i < bonesPath.Length; i++) // { // if (string.IsNullOrEmpty(bonesPath[i])) // continue; // bones[i] = BaseObject_.FindBonesWithName(bonesPath[i]); // if (!bones[i]) // Debug.Log(string.Format("Fine bone's transform failed: {0},{1}", BaseObject_.Name, bonesPath[i])); // } // SkinnedMeshRenderer skr = render as SkinnedMeshRenderer; // skr.bones = bones; // skr.rootBone = BaseObject_.FindBonesWithName(BaseObject_.BaseRoleConfig.RootBone); //} render.receiveShadows = false; render.castShadows = true; render.enabled = false; GameObject.SetActive(false); //特效 if (EffectObjects_ != null) { for (int i = 0; i < ModelCfg.Effects.Length; i++) { if (EffectObjects_[i] == null) { continue; } BaseObject_.EffectList.Add(EffectObjects_[i]); XYClientCommon.EnableRender(EffectObjects_[i], false, true); XYClientCommon.ChangeLayer(EffectObjects_[i], XYDefines.Layer.Effect, true); if (ModelCfg.Effects[i].BindBone == string.Empty) //因为没绑定到模型下,所以特效要乘以角色缩放 { EffectObjects_[i].transform.parent = GameObject.transform; float scale = ModelCfg.Effects[i].Scale.x; if (BaseObject_ != null && BaseObject_.BaseRoleConfig != null) { EffectObjects_[i].transform.localScale = Vector3.one * scale; } EffectObjects_[i].transform.localPosition = ModelCfg.Effects[i].Position; EffectObjects_[i].transform.localEulerAngles = ModelCfg.Effects[i].Rotation; } else if (!string.IsNullOrEmpty(ModelCfg.Effects[i].BindBone)) { Transform tf = BaseObject_.FindBonesWithName(ModelCfg.Effects[i].BindBone); if (tf) { EffectObjects_[i].transform.parent = tf; float scale = ModelCfg.Effects[i].Scale.x; EffectObjects_[i].transform.localScale = Vector3.one * scale; EffectObjects_[i].transform.localPosition = ModelCfg.Effects[i].Position; EffectObjects_[i].transform.localEulerAngles = ModelCfg.Effects[i].Position; } else { Object.Destroy(EffectObjects_[i]); Debug.Log(ModelCfg.Effects[i].BindBone + "Not Find!"); } } else { Object.Destroy(EffectObjects_[i]); } } } //资源处理完毕,调用BaseObject里的资源完成加载接口 }