- Unity 5.x Game AI Programming Cookbook
- Jorge Palacios
- 272字
- 2021-07-09 19:37:48
Wandering around
This technique works like a charm for random crowd simulations, animals, and almost any kind of NPC that requires random movement when idle.
Getting ready
We need to add another function to our AgentBehaviour
class called OriToVec
that converts an orientation value to a vector.
public Vector3 GetOriAsVec (float orientation) { Vector3 vector = Vector3.zero; vector.x = Mathf.Sin(orientation * Mathf.Deg2Rad) * 1.0f; vector.z = Mathf.Cos(orientation * Mathf.Deg2Rad) * 1.0f; return vector.normalized; }
How to do it...
We could see it as a big three-step process in which we manipulate the internal target position in a parameterized random way, face that position, and move accordingly:
- Create the
Wander
class deriving fromFace
:using UnityEngine; using System.Collections; public class Wander : Face { public float offset; public float radius; public float rate; }
- Define the
Awake
function in order to set up the internal target:public override void Awake() { target = new GameObject(); target.transform.position = transform.position; base.Awake(); }
- Define the
GetSteering
function:public override Steering GetSteering() { Steering steering = new Steering(); float wanderOrientation = Random.Range(-1.0f, 1.0f) * rate; float targetOrientation = wanderOrientation + agent.orientation; Vector3 orientationVec = OriToVec(agent.orientation); Vector3 targetPosition = (offset * orientationVec) + transform.position; targetPosition = targetPosition + (OriToVec(targetOrientation) * radius); targetAux.transform.position = targetPosition; steering = base.GetSteering(); steering.linear = targetAux.transform.position - transform.position; steering.linear.Normalize(); steering.linear *= agent.maxAccel; return steering; }
How it works...
The behavior takes into consideration two radii in order to get a random position to go to next, looks towards that random point, and converts the computed orientation into a direction vector in order to advance.
A visual description of the parameters for creating the Wander behavior
推薦閱讀
- Hands-On Data Structures and Algorithms with Rust
- Access 2016數據庫教程(微課版·第2版)
- PySpark大數據分析與應用
- SQL查詢:從入門到實踐(第4版)
- 數據庫系統原理及應用教程(第4版)
- Creating Dynamic UIs with Android Fragments(Second Edition)
- Python醫學數據分析入門
- 跟老男孩學Linux運維:MySQL入門與提高實踐
- 高維數據分析預處理技術
- Python數據分析與挖掘實戰(第3版)
- 企業級容器云架構開發指南
- 區塊鏈+:落地場景與應用實戰
- 大數據分析:R基礎及應用
- 數據庫基礎與應用
- SQL進階教程(第2版)