Tutorial Unity3D Third-person shooter (TPS) with Emerald AI 3.0 Game Design Document (GDD)

Create a new 3D project in Unity3D (not HDRP because it’s not supported by Emerald AI 3).

How to have Assets :

  1. To have Assets : https://assetstore.unity.com/
  2. Where is the « package manager » in unity ?
  3. 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.

https://assetstore.unity.com/packages/3d/characters/humanoids/sci-fi/female-soldier-01-anaconda-248569

  • And a Third Person Shooter (a camera, a weapon(s) and ammos):

https://assetstore.unity.com/packages/tools/game-toolkits/invector-third-person-controller-shooter-template-84583

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)

  1. go to Window > Emerald AI > Setup Manager within Unity.
  2. In setup settings  > AI object : Woman_01_Without_Helmet_01 (Emerald Companion)
  3. And click the “save “ button at the end.
Companion ExampleAn 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 ?

  1. in EmeraldAIPlayerDamage script, import script replacement DamageInvectorPlayer
  2. 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).