Create a new 3D project in Unity3D (not HDRP because it’s not supported by Emerald AI 3).
How to have Assets :
- To have Assets : https://assetstore.unity.com/
- Where is the « package manager » in unity ?
- Unity’s main menu and go to Window > Package Manager.
How to Import:
Warning: you must choose to use Emerald AI 3 to create a AI for this tutorial (it doesn’t work for another). Whereas, you are free to choose the player you wish and the TPS you want.
I have purchased Emerald AI 3.0, the female soldier 01 anaconda, and Invector Third Person Controller (TPS) – Shooter Template.
Next step is to buy AI and do the integration :
https://assetstore.unity.com/packages/tools/ai/emerald-ai-3-0-203904 (contain environment also)
- You need also a player.
- And a Third Person Shooter (a camera, a weapon(s) and ammos):
How to Create your project:
In Project > Assets >Emerald AI > Demo > Demo Scenes > Melee Combat Example
To copy-paste inside “my project” and renamed “my Melee Combat Example”. (dissociated from other assets folders to prevent an update to erase your files)
Since you copy-paste it, you don’t need to create an AI. It’s already done.
(How to Create an AI through the Setup Manager (Emerald AI wiki): https://github.com/Black-Horizon-Studios/Emerald-AI/wiki/Creating-an-AI-through-the-Setup-Manager )
Delete camera already existing because, you will create a new one by using Invector.
How to Configure (Player + Camera):
- Invector (menu) > Import project settings
- Invector > Shooter > Create Shooter Controller
- Character creation window > fbx model > select
- Choose the prefab/ asset (woman_01_with_helmet) with helmet
- Inside vshooterController_woman_01_with_helmet , move 3D model where you want and copy paste the coordinate inside vshooterController_woman_01_with_helmet (Position: X = 0.9 ; Y = 3.5 ; Z = 0.6) (Rotation Y = 180) from closed space to open space.
- After reset position 3D model
- play
- You don’t need the old camera(“Main Camera (Fly) ») , you can remove it. If error, you have a backup inside the (Emerald AI > Demo > Demo Scenes > Melee Combat Example)
Optional: ( How to Create a Companion AI with the Emerald AI Setup Manager)
- go to Window > Emerald AI > Setup Manager within Unity.
- In setup settings > AI object : Woman_01_Without_Helmet_01 (Emerald Companion)
- And click the “save “ button at the end.
Companion Example | An example of a Companion AI that follows the player around. It will attack any opposing AI that tries to attack the player. |
Tutorial How to perform Invector integration: https://github.com/Black-Horizon-Studios/Emerald-AI/wiki/Invector-Integration-Tutorial
How to Set up the AI Layer and Tags :
- For the enemy: In inspector, the tag must be “enemy” and layer “enemy”.
- The hero: he should be a “Player” layer and a tag “player”. (vShooterController_Woman_01_With_Helmet_04)
- In “detection and tags” > in tag faction options > in tag options > emerald unity tag: “Enemy” and “detection layers” select “player” and “enemy”. -> Now the grenadier can detect and try to attack the player.
How to do add weapons and Ammo?
In Invector > Shooter > DemoScene
In hierarchy: Hive > Shooter_Hive > ShooterFeatures > Inventory_Collectables
– Ammo > vAmmoAssaultRifle_Inventory
– Weapons > vCollectibleAssaultRifle
Copy-paste on your project and change Transform to fit around your main player . (-1,0,0) and (0,0,-1)
The weapon should be a layer: “Triggers”.
How to activate the collision detection ?
I follow the source Tutorial : https://github.com/Black-Horizon-Studios/Emerald-AI/wiki/Invector-Integration-Tutorial
How to Set up the Shooter Manager (Important)
In Invector player (vShooterController_Woman_01_With_Helmet_01) “Shooter manager” panel > in damage layers > select enemy.
How to configure vMeleeManager Code Snippet ?
In Assets/Invector-3rdPersonController/Melee Combat/script/melee weapon/vMeleeManager.cs.
Find the vMeleeManager script within your projects and open it. This code should be added right below the line onDamageHit.Invoke(hitInfo);
//Emerald AI Damageif (hitInfo.targetCollider.gameObject.GetComponent<EmeraldAI.EmeraldAISystem>()){ hitInfo.targetCollider.gameObject.GetComponent<EmeraldAI.EmeraldAISystem>().Damage((int)hitInfo.attackObject.damage.damageValue, EmeraldAI.EmeraldAISystem.TargetType.Player, transform, 400);}
How to configure vProjectileControl Code Snippet ?
In asset > invector > script > weapon > vProjectileControl.cs
Find the vProjectileControl script within your projects and open it. This code should be added right below the first instance of onCastCollider.Invoke(hitInfo); and damage.damageValue = maxDamage;
//Emerald AI Damageif (hitInfo.collider.gameObject.GetComponent<EmeraldAI.EmeraldAISystem>() != null){ hitInfo.collider.gameObject.GetComponent<EmeraldAI.EmeraldAISystem>().Damage((int)damage.damageValue, EmeraldAI.EmeraldAISystem.TargetType.Player);}
How to configure vExplosive Code Snippet ?
In vExplosive script , after colliders[i].gameObject.ApplyDamage(_damage, null); //Emerald AI Damageif (colliders[i].gameObject.GetComponent<EmeraldAI.EmeraldAISystem>() != null){ colliders[i].gameObject.GetComponent<EmeraldAI.EmeraldAISystem>().Damage((int)damage.damageValue, EmeraldAI.EmeraldAISystem.TargetType.Player);}
How to configure EmeraldAIPlayerDamage Code Snippet ?
- in EmeraldAIPlayerDamage script, import script replacement DamageInvectorPlayer
- uncomment function DamageInvectorPlayer(int DamageAmount, Transform Target) ;
void DamageInvectorPlayer (int DamageAmount, Transform Target) { if (GetComponent<Invector.vCharacterController.vCharacter>()) { //Applies damage to Invector and allows its melee weapons to block incoming Emerald AI damage. if (GetComponent<Invector.vCharacterController.vMeleeCombatInput>().meleeManager != null) { var PlayerInput = GetComponent<Invector.vCharacterController.vMeleeCombatInput>(); var MeleeManager = GetComponent<Invector.vCharacterController.vMeleeCombatInput>().meleeManager; if (PlayerInput.isBlocking) { var _Damage = new Invector.vDamage(DamageAmount); var DamageReduction = MeleeManager != null ? MeleeManager.GetDefenseRate() : 0; if (DamageReduction > 0) _Damage.ReduceDamage(DamageReduction); MeleeManager.OnDefense(); _Damage.reaction_id = MeleeManager.GetDefenseRecoilID(); _Damage.sender = Target; _Damage.hitPosition = Target.position; GetComponent<Invector.vCharacterController.vCharacter>().TakeDamage(_Damage); } else { var _Damage = new Invector.vDamage(DamageAmount); _Damage.sender = Target; _Damage.hitPosition = Target.position; GetComponent<Invector.vCharacterController.vCharacter>().TakeDamage(_Damage); } } //If no Melee Manager is found, cause unreduced damage. else { var _Damage = new Invector.vDamage(DamageAmount); _Damage.sender = Target; _Damage.hitPosition = Target.position; GetComponent<Invector.vCharacterController.vCharacter>().TakeDamage(_Damage); } } }
How to display name and Ennemy Health status bar ?
In AI Settings > Stat AI Name : AI Grenadier
In UI settings > UI Layer : Player
In UI settings > display name
In UI settings > enable health bar
How to add Bullet Collision Detection?
How to Damage on enemy (Grenadier):
Search for vDefaultBullet prefab
Go to Vprojectilecontrol
Go to Damage Options
Set damage value to any Number(like 10) (Previously it was 0).