Artificial Intelligence with Unity: Introducing Intelligent Behaviour to Game Characters

Artificial Intelligence with Unity

Hello everyone, today I wanted to research something on Unity and I came across artificial intelligence almost everywhere. Because artificial intelligence (AI) in the game development world is like a magical world! AI gives realistic behaviours to game characters, making the game world feel more dynamic and intelligent. Think about it, in a game you are playing, if enemies make strategic moves or NPCs exhibit environmentally sensitive behaviours, how much it strengthens the atmosphere of the game, right?

In this article, we will talk about how you can give intelligent behaviours to game characters using Unity. In other words, making your enemy characters feel like real opponents instead of just bricks!

1. Let’s Meet Artificial Intelligence

Firstly, what is artificial intelligence? Actually, what we call game AI is to ensure that the characters act according to certain rules and algorithms. The aim is to create an opponent or friend that is more dynamic and reacts according to the situation, rather than a character that only exhibits scripted behaviour.

The first step in developing artificial intelligence in Unity is to learn pathfinding and movement systems. Here we come across NavMesh.

2. NavMesh: Let’s Draw Paths for Our Characters!

One of the most common ways to determine how characters move through the environment in Unity is to use NavMesh (Navigation Mesh). NavMesh defines paths and areas where characters can move. Once you have created this, you have solved the question of how your character will reach a certain point. Let’s look at this in a little more detail:

What is NavMesh?

NavMesh is a virtual network that defines navigable areas in the game world. This network determines the paths and obstacles along which characters can move. For example, it includes floors, walls, and other obstacles where characters can walk. NavMesh is like a map that allows characters to move in a natural and logical way.

How to Create NavMesh?

To create a NavMesh, you must follow these steps:

  1. In the Unity Editor, open the Navigation window by clicking AI and then Navigation from the Window menu.
  2. To specify which areas of the floor and other surfaces in your game to create NavMesh on, mark these areas as ‘Navigation Static’. This ensures that these surfaces are taken into account when creating the NavMesh.
  3. In the Navigation window, go to the Bake tab and create the NavMesh by clicking the Bake button. Unity analyses the navigable areas in the scene and converts them into NavMesh.

NavMesh Agent Component

To make your characters move on the NavMesh, you need to add the NavMesh Agent component to each character. This component controls the character’s movement on the NavMesh.

Add the NavMesh Agent component to your character and set the component’s properties (speed, rotation speed, acceleration, etc.). These settings determine how your character moves on the NavMesh.

Movement and Goal Setting

To make your character reach a specific point, you can set destination points using the NavMesh Agent component:

  • Setting a Destination by Code: You can use the NavMesh Agent component to make the character move to a target point. For example, to make an enemy character follow the player, you can set the player’s position as the destination.
using UnityEngine;
using UnityEngine.AI;

public class EnemyAI : MonoBehaviour
{
public Transform player; // Player Object
private NavMeshAgent agent;
void Start()
{
agent = GetComponent<NavMeshAgent>();
}
void Update()
{
if (player != null)
{
agent.SetDestination(player.position); // Direct the enemy to the player's position
}
}
}
  • Reaching Destinations: When your character moves on NavMesh, the NavMesh Agent component automatically calculates the character’s path and ensures that he reaches the destination by the shortest route.

Barriers and Dynamic Changes

In some cases, there may be dynamic changes in the scene (for example, moving obstacles). In such cases, NavMesh needs to react to these changes. You can use the NavMesh Obstacle component to do this. This component specifies how obstacles in the scene affect NavMesh. It allows obstacles to have an effect on the NavMesh and allows characters to overcome or go around them when necessary.

3. Time for Decision Making: Behaviour Trees

You’ve got your characters moving, great! Now it’s time for them to make decisions. You can use behaviour trees or finite state machines (FSM) to determine how your game characters react to certain situations.

Behaviour trees are an effective way to model decision-making processes. For example, when an enemy character sees your player, will it decide to attack or run away? You can model such decisions as branching trees. You can also find great add-ons in the Unity Asset Store that facilitate this functionality.

The FSM provides a structure that represents a character’s states. Your character’s state can change from ‘patrolling’ to ‘attacking’ if they recognise danger. This structure allows for more organised and manageable character behaviour.

4. Friend or Enemy? Let’s Categorise Our Characters

There are different types of AI in each game: Enemies, friends and independent NPCs. You will need to develop different behaviours for each of them. For example, your enemy AI will attack the player, while your friendly AI character will perhaps try to help them. Developing different strategies for each AI type makes your job easier and your characters more interesting.

5. Smarter AI with Machine Learning: Unity ML-Agents

If you want to go even deeper into AI, you can train your characters using machine learning (ML) with Unity ML-Agents. Unity offers tools that facilitate AI training in your games with ML-Agents. With ML-Agents, your characters can have the ability to learn in-game. Rather than pre-coding your characters’ behaviour, this allows them to make decisions on their own in certain situations.

For example, your enemies can learn the player’s strategies over time and develop more complex attack strategies. This can make the game experience much more dynamic and challenging.

6. Inspirations from the Real World!

There are many games that develop AI using Unity. For example, Alien: Isolation, for example, managed to give the player a constant sense of danger by using artificial intelligence in an impressive way. The strategic movement of your enemies on the playing field and their challenge to the player will take your game to the next level.

In conclusion, developing AI with Unity seems to be the key to providing your players with a more realistic and richer experience, given recent developments. From simple NavMesh implementations to complex AI behaviour trees and even machine learning, there is a wide range of AI development methods available, and this is truly a vast subject. If you want the characters in your games to be ‘smarter’, you should start learning the tricks of AI development.

Happy coding to everyone.

Selin.

 

Unity ile Yapay Zeka: Oyun Karakterlerine Akıllı Davranışlar Kazandırma

 

Unity ile Yapay Zeka

Herkese merhaba, bugün Unity üzerine birşeyler araştırmak istedim ve karşıma neredeyse her yerde yapay zeka çıktı. Çünkü oyun geliştirme dünyasında yapay zeka (AI), büyülü bir dünya gibi! AI, oyun karakterlerine gerçekçi davranışlar kazandırarak, oyun dünyasının daha dinamik ve akıllı hissettirilmesini sağlıyor. Bir düşünün, oynadığınız bir oyunda düşmanların stratejik hamleler yapması ya da NPC’lerin çevreye duyarlı davranışlar sergilemesi, oyunun atmosferini ne kadar güçlendirir, değil mi?

Bu yazıda Unity kullanarak oyun karakterlerine nasıl akıllı davranışlar kazandırabileceğinizden bahsedeceğiz. Yani, düşman karakterlerinizin birer tuğladan ibaret olmaktan çıkıp gerçek birer rakip gibi hissettirilmesini sağlamak!

1. Yapay Zeka ile Tanışalım

Öncelikle, yapay zeka nedir? Aslında oyun AI’sı dediğimiz şey, karakterlerin belirli kurallara ve algoritmalara göre hareket etmelerini sağlamak. Amaç, oyuncunun karşısında sadece scripted davranışlar sergileyen bir karakter yerine, daha dinamik ve duruma göre tepki veren bir rakip veya dost oluşturmak.

Unity’de yapay zeka geliştirmenin ilk adımı, yol bulma ve hareket sistemlerini öğrenmek. Burada karşımıza NavMesh çıkıyor.

2. NavMesh: Karakterlerimize Yollar Çizelim!

Unity’de karakterlerin çevrede nasıl hareket edeceğini belirlemenin en yaygın yollarından biri NavMesh (Navigasyon Ağı) kullanmaktır. NavMesh, karakterlerin hareket edebileceği yolları ve alanları tanımlar. Bunu oluşturduktan sonra, karakterinizin belirli bir noktaya nasıl ulaşacağı sorusunu çözmüş oluyorsunuz. Şimdi buna biraz daha detaylı bakalım:

NavMesh Nedir?

NavMesh, oyun dünyasındaki gezilebilir alanları tanımlayan sanal bir ağdır. Bu ağ, karakterlerin hareket edebileceği yolları ve engelleri belirler. Örneğin, karakterlerin yürüyebileceği zeminleri, duvarları ve diğer engelleri içerir. NavMesh, karakterlerin doğal ve mantıklı bir şekilde hareket etmelerini sağlayan bir harita gibidir.

NavMesh Nasıl Oluşturulur?

NavMesh oluşturmak için şu adımları izlemelisiniz:

  1. Unity Editor’da, Window menüsünden AI ve ardından Navigation seçeneğine tıklayarak Navigasyon penceresini açın.
  2. Oyununuzdaki zemin ve diğer yüzeyler üzerinde NavMesh’in hangi alanlarda oluşturulacağını belirlemek için bu alanları “Navigation Static” olarak işaretleyin. Bu, bu yüzeylerin NavMesh oluşturulurken dikkate alınmasını sağlar.
  3. Navigasyon penceresinde, Bake sekmesine gidin ve Bake butonuna tıklayarak NavMesh'i oluşturun. Unity, sahnedeki gezilebilir alanları analiz eder ve bunları NavMesh'e dönüştürür.

NavMesh Agent Bileşeni

Karakterlerinizin NavMesh üzerinde hareket etmesini sağlamak için her bir karaktere NavMesh Agent bileşenini eklemeniz gerekir. Bu bileşen, karakterin NavMesh üzerindeki hareketini kontrol eder.

  1. NavMesh Agent bileşenini karakterinize ekleyin ve bileşenin özelliklerini (hız, dönüş hızı, ivme, vs.) ayarlayın. Bu ayarlar, karakterinizin NavMesh üzerinde nasıl hareket edeceğini belirler.

Hareket Etme ve Hedef Belirleme

Karakterinizin belirli bir noktaya ulaşmasını sağlamak için, NavMesh Agent bileşenini kullanarak hedef noktalar belirleyebilirsiniz:

  • Kod ile Hedef Belirleme: NavMesh Agent bileşenini kullanarak karakterin hedef bir noktaya gitmesini sağlayabilirsiniz. Örneğin, bir düşman karakterinin oyuncuyu takip etmesini sağlamak için hedef olarak oyuncunun pozisyonunu ayarlayabilirsiniz.
using UnityEngine;
using UnityEngine.AI;

public class EnemyAI : MonoBehaviour
{
public Transform player; // Oyuncu nesnesi
private NavMeshAgent agent;

void Start()
{
agent = GetComponent<NavMeshAgent>();
}

void Update()
{
if (player != null)
{
agent.SetDestination(player.position); // Düşmanı oyuncunun konumuna yönlendir
}
}
}
  • Hedeflere Ulaşma: Karakteriniz NavMesh üzerinde hareket ederken, NavMesh Agent bileşeni karakterin yolunu otomatik olarak hesaplar ve hedefe en kısa yoldan ulaşmasını sağlar.

Engeller ve Dinamik Değişiklikler

Bazı durumlarda, sahnede dinamik değişiklikler olabilir (örneğin, hareket eden engeller). Bu gibi durumlarda, NavMesh’in bu değişikliklere tepki vermesi gerekir. Bunu sağlamak için NavMesh Obstacle bileşenini kullanabilirsiniz. Bu bileşen, sahnedeki engellerin NavMesh'i nasıl etkilediğini belirtir. Engellerin NavMesh üzerinde etkili olmasını sağlar ve gerektiğinde karakterlerin bu engelleri aşmalarını veya çevresinden dolaşmalarını sağlar.

3. Karar Verme Zamanı: Davranış Ağaçları

Karakterlerinizin hareket edebilmesini sağladınız, harika! Peki, şimdi sıra onların karar vermesinde. Oyun karakterlerinizin belirli durumlar karşısında nasıl tepki vereceğini belirlemek için davranış ağaçları (behavior trees) veya finite state machine (FSM) kullanabilirsiniz.

Davranış ağaçları, karar verme süreçlerini modellemenin etkili yollarından biridir. Örneğin, bir düşman karakteriniz oyuncuyu gördüğünde saldırmaya mı karar verecek yoksa kaçacak mı? Bu gibi kararları dallara ayrılmış ağaçlar şeklinde modelleyebilirsiniz. Ayrıca Unity Asset Store’da, bu işlevselliği kolaylaştıran harika eklentiler de bulabilirsiniz.

FSM ise bir karakterin durumlarını temsil eden bir yapı sunar. Karakterinizin durumu “devriye geziyor” iken, bir tehlike fark ederse durumu “saldırıyor” olarak değişebilir. Bu yapı, karakterin daha organize ve yönetilebilir bir davranış sergilemesine olanak tanır.

4. Dost mu, Düşman mı? Karakterlerimizi Kategorize Edelim

Her oyunda farklı AI türleri vardır: Düşmanlar, dostlar ve bağımsız NPC’ler. Her biri için farklı davranışlar geliştirmeniz gerekecek. Örneğin, düşman AI’nız oyuncuya saldırırken, dost AI karakteriniz belki de ona yardım etmeye çalışacak. Her bir AI türü için farklı stratejiler geliştirmek işinizi kolaylaştırır ve karakterlerinizi daha ilginç hale getirir.

5. Makine Öğrenimi ile Daha Akıllı AI: Unity ML-Agents

Eğer yapay zekaya daha da derinlemesine girmek istiyorsanız, Unity ML-Agents ile makine öğrenimi (ML) kullanarak karakterlerinizi eğitebilirsiniz. Unity, ML-Agents ile oyunlarınızda AI eğitimini kolaylaştıran araçlar sunuyor. ML-Agents sayesinde karakterleriniz, oyun içinde öğrenme yeteneğine sahip olabilir. Bu, karakterlerinizin davranışlarını önceden kodlamaktan ziyade, onların belirli durumlarda kendi başlarına karar verebilmesini sağlar.

Örneğin, düşmanlarınız zamanla oyuncunun stratejilerini öğrenip daha karmaşık saldırı stratejileri geliştirebilir. Bu, oyun deneyimini çok daha dinamik ve zorlayıcı hale getirebilir.

6. Gerçek Dünyadan İlham Verenler!

Unity kullanarak AI geliştiren birçok oyun mevcut. Örneğin, Alien: Isolation, yapay zekayı etkileyici bir şekilde kullanarak oyuncuya sürekli bir tehlike hissi yaşatmayı başardı. Düşmanlarınızın oyun alanında stratejik hareket etmeleri ve oyuncuya meydan okumaları, oyununuzu bir üst seviyeye taşıyacaktır.

Sonuç olarak, Unity ile yapay zeka geliştirmek, son dönem gelişmeleri de düşünürsek oyuncularınıza daha gerçekçi ve zengin bir deneyim sunmanın anahtarı gibi duruyor. Basit NavMesh uygulamalarından karmaşık AI davranış ağaçlarına ve hatta makine öğrenimine kadar uzanan geniş bir yelpazede AI geliştirme yöntemleri mevcut ve burası gerçekten derya deniz bir konu. Siz de eğer oyunlarınızda karakterlerin daha “akıllı” olmasını istiyorsanız, yapay zeka geliştirmenin püf noktalarını öğrenmeye başlamalısınız.

Herkese iyi kodlamalar.

Selin.