- Home /
How to get objects with the same script to act independently?
Currently, I have 2 objects that are supposed to act independently of each other. Both are just supposed to move around randomly, and stop and turn every so often. I am using the same script to control both objects, but this results in them always moving together in the same direction. I am using a private random to determine the direction of rotation, but it generates the same number in both scripts. How do I get them to turn independently, that is, have the two randoms generate different numbers?
Code if it helps:
private Rigidbody selfRB;
private Animator selfAnim;
public playerStats player;
private float timePassed = 0.0f;
private float repeatTime = 4f;
private System.Random rng = new System.Random();
private int rotation;
private bool moved = false;
// Start is called before the first frame update
void Start()
{
selfRB = GetComponent<Rigidbody>();
selfAnim = GetComponent<Animator>();
rotation = rng.Next(0, 360);
print("RNG: " + rotation);
}
// Update is called once per frame
void Update()
{
timePassed += Time.deltaTime; //ADDS TIME THAT HAS PASSED TO TOTAL TIME
if (timePassed >= repeatTime) //RESETS TIME IF IT GOES OVER THE LIMIT
{
rotation = rng.Next(0, 360);
timePassed = 0.0f;
}
print("OBJECT: " + gameObject.name);
if (timePassed <= 2) //MOVING PERIOD
{
transform.eulerAngles = new Vector3(transform.eulerAngles.x, rotation + 0f, transform.rotation.z);
selfRB.velocity = transform.forward * 7.5f;
moved = true;
selfAnim.SetBool("moving", true);
}
else if (moved) //WAIT PERIOD
{
selfRB.velocity = new Vector3(0, 0, 0);
moved = false;
selfAnim.SetBool("moving", false);
}
Answer by Freesmith · Jun 21, 2019 at 01:45 AM
try this:
// add this to header instead of private System.Random rng = new System.Random();
private float rng;
// add this in some method where you what to create random number
rng = Random.Range(0f, 360f);
or you could try this script, create a few game objects attach this script to them and after presing play observe a rng field in the inspector of each one using System.Collections; using System.Collections.Generic; using UnityEngine;
public class randomfloat : MonoBehaviour
{
[SerializeField]private float rng;
// Start is called before the first frame update
void Start()
{
rng = Random.Range(0f, 360f);
}
// Update is called once per frame
void Update()
{
}
}
Answer by haoqi21 · Jun 21, 2019 at 01:45 AM
okay boiz, apparently im just dummy retarded and need to use UnityEngine.Random instead of System.Random
Your answer
Follow this Question
Related Questions
HOW TO MAKE A NPC GO FORWAR 0 Answers
How to disable A, S, and D keys for third person player movement 1 Answer
How can i smooth out the rotation? 1 Answer
Implementing Counter-Movement 0 Answers
Touch buttons for step movememt 3 Answers