コード例 #1
0
ファイル: XMLRW.cs プロジェクト: Andy-Sun/Unity3d-Sequential
    public static List<OperItem> ReadXML(string fileName, Transform rootTrans)
    {
        /// <summary>
        /// 操作列表
        /// </summary>
        List<OperItem> oper = new List<OperItem>();

        XmlDocument doc = new XmlDocument();
        TextAsset textAsset = (TextAsset)Resources.Load(fileName, typeof(TextAsset));
        doc.LoadXml(textAsset.text);

        // doc.Load(Application.dataPath + "\\" + fileName);

        XmlNode root = doc.SelectSingleNode("root");
        XmlNodeList list = root.ChildNodes;
        foreach (XmlNode item in list)
        {
            OperItem o = new OperItem();
            XmlElement element = (XmlElement)item;
            o.name = element.GetAttribute("Name");
            o.transName = element.GetAttribute("transName");
            //获取要操作的物体对象
            o.tag = element.GetAttribute("tag");
            foreach (Transform trans in rootTrans.GetComponentsInChildren<Transform>())
            {
                if (o.transName == trans.name)
                {
                    o.trans = trans;
                    o.originPos = trans.position;
                    o.originRot = trans.localEulerAngles;
                    break;
                }
            }

            //根据操作类型填充对象值
            o.type = (EOperType)Enum.Parse(typeof(EOperType), element.GetAttribute("type"));
            switch (o.type)
            {
                case EOperType.SetTransform:
                    foreach (Transform trans in rootTrans.GetComponentsInChildren<Transform>())
                    {
                        if (element.GetAttribute("targetName") == trans.name)
                        {
                            o.transTarget = trans;
                            break;
                        }
                    }
                    o.speed = float.Parse(element.GetAttribute("speed"));
                    o.precision = float.Parse(element.GetAttribute("precision"));
                    break;
                case EOperType.SetParent:
                    foreach (Transform trans in rootTrans.GetComponentsInChildren<Transform>())
                    {
                        if (element.GetAttribute("parent") == trans.name)
                        {
                            o.parent = trans;
                            break;
                        }
                    }
                    break;
                case EOperType.SetActive:
                    o.isActive = !string.IsNullOrEmpty(element.GetAttribute("active"));
                    break;
                case EOperType.WaitTime:
                    o.time = float.Parse(element.GetAttribute("time"));
                    break;
            }
            o.msg = element.GetAttribute("msg");
            o.errorMsg = element.GetAttribute("errorMsg");
            o.groupID = element.GetAttribute("group");
            if (!String.IsNullOrEmpty(o.groupID))
            {
                o.group = true;
            }
            else
                o.group = false;
            o.isFinishPause = !string.IsNullOrEmpty(element.GetAttribute("pause"));
            oper.Add(o);
        }
        return oper;
    }
コード例 #2
0
    /// <summary>
    /// 执行下一步操作
    /// </summary>
    void NextStep()
    {
        SetOrderContent();
        if (currentItem != null && currentItem.isFinishPause)
        {
            b_pause = true;
        }
        if (++id < list.Count)
        {
            if (list[id].group)
            {
                string groupid = list[id].groupID;
                for (; id < list.Count; ++id)
                {
                    if (list[id].groupID == groupid)
                    {
                        groupList.Add(list[id]);
                    }
                    else
                    {
                        --id;
                        return;
                    }
                }
            }
            Debug.Log("当前运动对象编号: " + list.Count + "--" + id + "--" + list[id].msg);

            currentItem = list[id];
        }
    }
コード例 #3
0
 /// <summary>
 /// 组合执行
 /// </summary>
 void Group()
 {
     for (int i = 0; i < groupList.Count; i++)
     {
         OperItem item = groupList[i];
         currentItem = item;
         Debug.Log("组合运动物体名称:" + item.transName);
         switch (item.type)
         {
             case EOperType.SetParent:
                 item.trans.SetParent(item.parent);
                 groupList.Remove(item);
                 break;
             case EOperType.SetActive:
                 item.trans.gameObject.SetActive(item.isActive);
                 groupList.Remove(item);
                 break;
             case EOperType.SetTransform:
                 if (Vector3.Distance(item.trans.position, item.transTarget.position) > item.precision)
                 {
                     item.trans.position = Vector3.Lerp(item.trans.position, item.transTarget.position, item.speed);
                     item.trans.localEulerAngles = Vector3.Lerp(item.trans.localEulerAngles, item.transTarget.localEulerAngles, item.speed);
                 }
                 else
                     groupList.Remove(item);
                 break;
         }
     }
     if (groupList.Count == 0)
     {
         NextStep();
     }
 }
コード例 #4
0
 public OperItem(OperItem item)
 {
     this.name = item.name;
     this.trans = item.trans;
     this.transName = item.transName;
     this.tag = item.tag;
     this.type = item.type;
     this.transTarget = item.transTarget;
     this.speed = item.speed;
     this.precision = item.precision;
     this.parent = item.parent;
     this.isActive = item.isActive;
     this.msg = item.msg;
     this.errorMsg = item.errorMsg;
     this.group = item.group;
     this.groupID = item.groupID;
     this.isFinishPause = item.isFinishPause;
 }