private void Start() { //TODO: Create your Behaviour tree here target = (VariableTransform)ScriptableObject.CreateInstance("VariableTransform"); //(VariableType<Transform>)ScriptableObject.CreateInstance(VariableType<Transform>); target.Value = GameObject.FindWithTag("Player").transform; NodeEnemyIsAggro nodeEnemyIsAggro = new NodeEnemyIsAggro(10, enemyLayerMask, transform); //Invertor invertorNodeEnemyIsAggro = new Invertor(nodeEnemyIsAggro); NodeChase nodeChase = new NodeChase(2, 5, target, agent, 5f, false); Sequence sequenceFollow = new Sequence(nodeChase); NodeGoToTransform nodeGoToTransform = new NodeGoToTransform(0.5f, GameObject.FindWithTag("HidingSpot").transform, agent); NodeTrowSmokeAtEnemy nodeTrowSmokeAtEnemy = new NodeTrowSmokeAtEnemy(1f, enemyLayerMask, 10, transform); //Invertor invertorNodeTrowSmokeAtEnemy = new Invertor(nodeTrowSmokeAtEnemy); Sequence sequenceSmoking = new Sequence(nodeEnemyIsAggro, nodeGoToTransform, nodeTrowSmokeAtEnemy); tree = new Selector(new List <Node> { sequenceSmoking, sequenceFollow }); // Show NodeState in editor if (Application.isEditor) { gameObject.AddComponent <ShowNodeTreeStatus>().AddConstructor(transform, tree); } }
private void Start() { target = (VariableTransform)ScriptableObject.CreateInstance("VariableTransform"); hasWeapon = (VariableBool)ScriptableObject.CreateInstance("VariableBool"); hasWeapon.Value = false; //Create your Behaviour Tree here! #region patrolling // Create target that can be changed by other nodes NodePatrol nodePatrol = new NodePatrol(0.5f, patrolPoints, agent); NodeSeeTarget nodeSeeTarget = new NodeSeeTarget(GetComponent <FieldOfView>(), agent, transform, target); Invertor invertorSeeTarget = new Invertor(nodeSeeTarget); NodeHasTarget nodeHasTarget = new NodeHasTarget(target); Invertor invertorNodeHasTarget = new Invertor(nodeHasTarget); // Patrol group Sequence sequencePatrolling = new Sequence(invertorNodeHasTarget, nodePatrol, invertorSeeTarget); #endregion #region chasing NodeCheckBool nodeHasWeapon = new NodeCheckBool(hasWeapon); NodeGoToTransform nodeGoToTransform = new NodeGoToTransform(1f, GameObject.FindWithTag("Weapon").transform, agent); NodeGetWeapon nodeGetWeapon = new NodeGetWeapon(1f, GameObject.FindWithTag("Weapon").transform, agent, hasWeapon); NodeChase nodeChase = new NodeChase(1f, 5, target, agent, 5f, true); NodeAttack nodeAttack = new NodeAttack(1f, agent, target); Sequence sequenceC1 = new Sequence(nodeGoToTransform, nodeGetWeapon); Selector selectorC1 = new Selector(new List <Node>() { nodeHasWeapon, sequenceC1 }); // param Sequence sequenceChasing = new Sequence(nodeHasTarget, selectorC1, nodeChase, nodeAttack); #endregion tree = new Selector(new List <Node> { sequenceChasing, sequencePatrolling }); // Show NodeState in editor if (Application.isEditor) { gameObject.AddComponent <ShowNodeTreeStatus>().AddConstructor(transform, tree); } }