示例#1
0
    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);
    }
示例#2
0
    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;
    }