- 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
推薦閱讀
- 同步:秩序如何從混沌中涌現(xiàn)
- 信息系統(tǒng)與數(shù)據(jù)科學(xué)
- Mastering Ninject for Dependency Injection
- InfluxDB原理與實戰(zhàn)
- MySQL基礎(chǔ)教程
- 業(yè)務(wù)數(shù)據(jù)分析:五招破解業(yè)務(wù)難題
- 醫(yī)療大數(shù)據(jù)挖掘與可視化
- 軟件成本度量國家標(biāo)準(zhǔn)實施指南:理論、方法與實踐
- Scratch 3.0 藝術(shù)進階
- 數(shù)據(jù)挖掘原理與SPSS Clementine應(yīng)用寶典
- Spark大數(shù)據(jù)分析實戰(zhàn)
- Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn)(第3版)
- SQL Server深入詳解
- 中文版Access 2007實例與操作
- SIEMENS數(shù)控技術(shù)應(yīng)用工程師:SINUMERIK 840D-810D數(shù)控系統(tǒng)功能應(yīng)用與維修調(diào)整教程