Book Image

Unity 2018 By Example - Second Edition

Book Image

Unity 2018 By Example - Second Edition

Overview of this book

Unity is the most exciting and popular engine used for developing games. With its 2018 release, Unity has become the primary source of both game development and virtual reality content. In Unity 2018 By Example, you’ll learn how to use Unity in order to make amazing games from popular genres - from action shooters to mind-bending puzzle games to adventure and Virtual Reality (VR) games. Even if you have no previous experience of using Unity, this book will help you understand the toolsets it provides in depth. In addition to this, you'll understand how to create time-critical collection games, twin-stick space shooters, platformers, and action-fest games with intelligent enemies. Finally, you'll get to grips with creating VR games with the new toolsets introduced by Unity to help you develop amazing VR experiences. To make things easier, you will be provided with step-by-step tutorials for making five great games in Unity 2018, along with a detailed explanation of all the fundamental concepts. By the end of this book, you’ll have established a strong foundation in making games with Unity 2018.
Table of Contents (16 chapters)
Unity 2018 By Example - Second Edition
Contributors
Preface
Other Books You May Enjoy
Index

Creating Intelligent Enemies – FSMs


In this section, we'll define the code to work with the enemy prefab; specifically, the FSM defining its core behavior. The enemy, once spawned in the level, will enter chase mode, causing it to follow the player, wherever they may be. On reaching the player, the enemy will attack and cause damage.

The enemy AI is encoded in the BotAI.cs script file. See the following code sample:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class BotAI : MonoBehaviour
{
public enum AISTATE { CHASE = 0, ATTACK = 1 };
public AISTATE CurrentState
{
get { return _CurrentState; }
set 
{
StopAllCoroutines();
_CurrentState = value;

switch(_CurrentState)
{
case AISTATE.CHASE:
StartCoroutine(StateChase());
break;

case AISTATE.ATTACK:
StartCoroutine(StateAttack());
break;
}
}
}

[SerializeField]
private AISTATE _CurrentState = AISTATE.CHASE;
private NavMeshAgent ThisAgent = null;
private Transform ThisPlayer = null...