示例#1
0
 public void RemoveChild(BehaviourNode child)
 {
     if (child != null)
     {
         m_children.Remove(child);
     }
 }
示例#2
0
 public void AddChild(BehaviourNode child)
 {
     if (child != null)
     {
         m_children.Add(child);
     }
 }
示例#3
0
 public void InsertChild(int index, BehaviourNode child)
 {
     if (child != null)
     {
         m_children.Insert(index, child);
     }
 }
示例#4
0
        public static string SerializeNode(BehaviourNode behaviourNode)
        {
            try
            {
                if (behaviourNode == null)
                {
                    return(null);
                }

                StringBuilder      builder  = new StringBuilder();
                JsonWriterSettings settings = new JsonWriterSettings();
                settings.TypeHintName            = TYPE_HINT_NAME;
                settings.TypeHintsOnlyWhenNeeded = true;
                settings.MaxDepth = MAX_TREE_DEPTH;

                using (JsonWriter writer = new JsonWriter(builder, settings))
                {
                    writer.Write(new object[] { behaviourNode });
                }

                return(builder.ToString());
            }
            catch (Exception ex)
            {
                Debug.LogException(ex);
                return(null);
            }
        }
示例#5
0
 protected override void OnEnter(AIAgent agent)
 {
     if (m_children.Count > 0)
     {
         m_chosenChild = m_children[UnityEngine.Random.Range(0, m_children.Count)];
     }
     else
     {
         m_chosenChild = null;
     }
 }
示例#6
0
        public static BehaviourNode CreateNode(Type nodeType)
        {
            BehaviourNode node = null;

            if (nodeType != null && nodeType.IsSubclassOf(typeof(BehaviourNode)) && !nodeType.IsAbstract)
            {
                node = Activator.CreateInstance(nodeType) as BehaviourNode;
                if (node != null)
                {
                    FieldInfo uniqueIDField = typeof(BehaviourNode).GetField("m_uniqueID", BindingFlags.Instance | BindingFlags.NonPublic);
                    string    uniqueID      = GenerateUniqueStringID();

                    uniqueIDField.SetValue(node, uniqueID);
                }
            }

            return(node);
        }
示例#7
0
        private BehaviourNode ChooseRandomChild()
        {
            BehaviourNode child = null;

            float rand = UnityEngine.Random.value;

            for (int i = 0; i < m_children.Count; i++)
            {
                if (rand < m_weights[i])
                {
                    child = m_children[i];
                    break;
                }

                rand -= m_weights[i];
            }

            return(child);
        }
示例#8
0
 public void SetChild(BehaviourNode node)
 {
     m_child = node;
 }