public override void execute() { LIST(out List <DTreeNode> availableChildList); LIST(out List <float> oddsList); // 按子节点顺序查看子节点是否满足条件 int count = mChildList.Count; for (int i = 0; i < count; ++i) { DTreeNode node = mChildList[i]; // 找出可以执行的节点 if (node.isActive() && node.condition()) { availableChildList.Add(node); oddsList.Add(node.getRandomWeight()); } } // 按照权重随机选择其中一个节点 int index = randomHit(oddsList); if (inRange(index, 0, availableChildList.Count - 1, true)) { availableChildList[index].execute(); } UN_LIST(availableChildList); UN_LIST(oddsList); }