using UnityEngine; using System.Collections; using UnityEngine.UI; //------------------------------------------------------------------------ //Perlin Noise Agents v1.0 - Perlin Noise Class //--Class Controls the movements of the agents--Class lives in the SoloAgent Prefab which is used to instantiate--All behavioral changes must reference or update values from this class //Mode Lab - Written by Luis Quinones //------------------------------------------------------------------------ public class PerlinNoiseMovement : MonoBehaviour { public float minSpeed = 0.1f; public float noiseScale = 75.0f; public float noiseStrength = 8.5f; public bool proceed = true; private int offsetStep = 10000; public bool dimension; void Start(){ } void Update() { movement(); } void movement() { if (proceed) { Transform currentPos = GetComponent<Transform>(); if(dimension){ //2D NOISE float noiseVal = Mathf.PerlinNoise(currentPos.position.x / noiseScale, currentPos.position.z / noiseScale) * noiseStrength; //Get 2D Noise Value float angle = noiseVal; Vector3 newDirection = new Vector3(Mathf.Cos(angle), 0, Mathf.Sin(angle)); //Create Vector for new Direction Vector3 speed = new Vector3(Random.Range(-minSpeed, minSpeed), 0, Random.Range(-minSpeed, minSpeed)); //Vector for speed newDirection += speed; transform.Translate(newDirection); //Translate the position to the newPosition using the new vector }else if(dimension == false){ float noiseVal = Mathf.PerlinNoise(currentPos.position.x / noiseScale, currentPos.position.z / noiseScale) * noiseStrength; float noiseValY = Mathf.PerlinNoise(currentPos.position.x / noiseScale + offsetStep, currentPos.position.y / noiseScale) * noiseStrength; float angle = noiseVal; float angleY = noiseValY; Vector3 newVec = new Vector3(0,0,0); newVec.x += Mathf.Cos (angleY) * Mathf.Cos (angle); newVec.y += Mathf.Cos (angleY) * Mathf.Sin (angle); newVec.z += Mathf.Sin (angleY); Vector3 newDirection = new Vector3(Mathf.Cos (angleY) * Mathf.Cos (angle), Mathf.Cos (angleY) * Mathf.Sin (angle), Mathf.Sin(angleY)); Vector3 speed = new Vector3(Random.Range(-minSpeed, minSpeed), Random.Range(-minSpeed, minSpeed), Random.Range(-minSpeed, minSpeed)); newDirection += speed; transform.Translate(newDirection); } } } } Update