private void Start() { target = ( VariableGameObject )ScriptableObject.CreateInstance("VariableGameObject"); target.Value = GameObject.FindGameObjectWithTag("Player"); // Follow Player Node_IsEnemyActive node_IsEnemyActive = new Node_IsEnemyActive(50, enemyLayermask, transform); Invertor node_IsEnemyActiveInvertor = new Invertor(node_IsEnemyActive); Node_Chase node_Chase = new Node_Chase(2, 100, target, agent, false); Sequence sequence_FollowPlayer = new Sequence(new List <BTBaseNode> { node_IsEnemyActiveInvertor, node_Chase }, "Ninja Sequence: Follow Player"); // Throw smoke at Guard Node_MoveToTransform node_MoveToTransform = new Node_MoveToTransform(GameObject.FindGameObjectWithTag("Cover").transform, agent, 1f); Node_ThrowSmoke node_ThrowSmoke = new Node_ThrowSmoke(enemyLayermask, 5f, transform, 10f); Sequence sequence_ThrowSmoke = new Sequence(new List <BTBaseNode> { node_IsEnemyActive, node_MoveToTransform, node_ThrowSmoke }, "Throw Smoke"); tree = new Selector(new List <BTBaseNode> { sequence_ThrowSmoke, sequence_FollowPlayer }); if (Application.isEditor) { gameObject.AddComponent <ShowNodeTreeStatus>().AddConstructor(transform, tree); } }
private void Start() { target = ( VariableGameObject )ScriptableObject.CreateInstance("VariableGameObject"); weaponAvailable = ( VariableBool )ScriptableObject.CreateInstance("VariableBool"); weaponAvailable.Value = false; // Patrol Behaviour Node_Patrol node_Patrol = new Node_Patrol(waypointsManager, agent); Node_TargetVisible node_TargetVisible = new Node_TargetVisible(agent.transform, target, fov); Invertor node_TargetVisibleInvertor = new Invertor(node_TargetVisible); Node_TargetAvailable node_TargetAvailable = new Node_TargetAvailable(target, active); Invertor node_TargetAvailableInvertor = new Invertor(node_TargetAvailable); Sequence sequence_Patrol = new Sequence(new List <BTBaseNode> { node_TargetAvailableInvertor, node_Patrol, node_TargetVisibleInvertor }, "Guard Sequence: Patrol"); // Chase & Attack Behaviour Node_Bool node_WeaponAvailable = new Node_Bool(weaponAvailable); Node_MoveToTransform node_MoveToTransform = new Node_MoveToTransform(GameObject.FindGameObjectWithTag("Weapon").transform, agent, 2f); // Again... Not optimal, but it works! Node_AcquireWeapon node_AcquireWeapon = new Node_AcquireWeapon(GameObject.FindGameObjectWithTag("Weapon").transform, agent, 2f, weaponAvailable); Node_Chase node_Chase = new Node_Chase(1, 15f, target, agent, true); Node_Attack node_Attack = new Node_Attack(attackRange.Value, agent, target); Sequence sequence_AcquireWeapon = new Sequence(new List <BTBaseNode> { node_MoveToTransform, node_AcquireWeapon }, "Guard Sequence: Acquire Weapon"); Selector selector_HasWeapon = new Selector(new List <BTBaseNode> { node_WeaponAvailable, sequence_AcquireWeapon }); Sequence sequence_Chase = new Sequence(new List <BTBaseNode> { node_TargetAvailable, selector_HasWeapon, node_Chase, node_Attack }, "Guard Sequence: Chasing"); tree = new Selector(new List <BTBaseNode> { sequence_Patrol, sequence_Chase }); if (Application.isEditor) { gameObject.AddComponent <ShowNodeTreeStatus>().AddConstructor(transform, tree); } }