private GameObject InitStopPoint(Transform parent, WreckageInfo info) { GameObject stopPointGo = new GameObject("__StopPoint__"); stopPointGo.transform.SetParent(parent.transform); stopPointGo.transform.localPosition = info.StopPoint; stopPointGo.transform.localEulerAngles = info.StopPointFace; return(stopPointGo); }
private void InitWreckage(Transform parent, WreckageInfo info) { string modelPath = info.ModelName; GameObject prefab = AssetBundleLoader.Instance.GetAsset(AssetType.Model, modelPath) as GameObject; GameObject root = new GameObject(); root.name = string.Format("wreckage_({0})_{1}", root.GetInstanceID(), info.Type); root.transform.SetParent(parent); root.transform.localPosition = info.Position; root.transform.localEulerAngles = info.Face; GameObject instance = Utility.CommonInstantiate(prefab, root.transform); if (instance == null) { Debug.LogError("InitWreckage(), failed!"); return; } Collider srcCollider = instance.GetComponent <Collider>(); AttachCollider(root, srcCollider); Destroy(srcCollider); //不能着陆的区域碰撞检测 Transform blockedTransRoot = instance.transform.FindChild(BLOCKED_ROOT_NAME); if (blockedTransRoot) { for (int i = 0; i < blockedTransRoot.childCount; i++) { Transform trans = blockedTransRoot.GetChild(i); trans.gameObject.AddComponent <WreckageBlock>(); } } else { Debugger.LogErrorFormat("不能着陆的区域碰撞检测的根节点未找到, {0}", name); } BaseWreckage wreckage = AddScriptByWreckageType(info.Type, root); wreckage.StopPoint = InitStopPoint(root.transform, info); if (info.Nodetype == WreckageInfo.NodeType.Birth) { BirthWreckage = wreckage; } else if (info.Nodetype == WreckageInfo.NodeType.Escape) { wreckage.IsEscape = true; LevelGenerator.Instance.EscapeWreckageList.Add(wreckage); Debugger.Log("Is escape: " + root.name); } else { } List <Vector3> sourceGenPos = GetSourcePointList(info.SourcePointList, info.SourceInfoList.Length); Debugger.Assert(sourceGenPos.Count == info.SourceInfoList.Length, "资源点位置数量与资源点数量不一致!"); List <BaseSource> sourcePosList = new List <BaseSource>(); for (int i = 0; i < info.SourceInfoList.Length; i++) { BaseSource source = InitSourcePoints(root.transform, info.SourceInfoList[i], sourceGenPos[i]); sourcePosList.Add(source); } wreckage.SourcePointList = sourcePosList; }