- Home /
AI movement in D
I am trying to make an AI who picks up blocks and brings them to appropriate container. For some reason my AI stops at random times sometimes he picks like 4 or 5 blocks and brings them to the container sometimes he managed to get 16 blocks in container. Can somebody check my script because i dont know why my AI just stops random at the times and doesnt want to pick up blocks. I tried to put Debug log in my if statemates to see if it goes in and it does. My AI goes in the if statemant but he still doesnt move.
[Header("AI Stats")] public float speed = 4.0f; public float diststop = 1f;
bool bluePickedUp;
bool redPickedUp;
int blueBlockNumber=0;
int redBlockNumber=0;
[Header("Posude")]
public Transform bluePosuda;
public Transform redPosuda;
[Header("Blocks")]
public Transform blueBlock;
public Transform redBlock;
[Header("Text")]
public Text blueBlockNumberText;
public Text redBlockNumberText;
private Rigidbody2D rb;
[Header(" ")]
public Transform hand;
private Vector2 Position
{
get
{
return transform.position;
}
set
{
transform.position = value;
}
}
private void Start()
{
rb = GetComponent<Rigidbody2D>();
blueBlockNumberText.text = "Number of blue blocks in container is: " + blueBlockNumber;
redBlockNumberText.text = "Number of red blocks in container is: " + redBlockNumber;
}
private void FixedUpdate()
{
if (bluePickedUp == false && redPickedUp == false)
{
if (redBlockNumber >= blueBlockNumber)
{
Target(blueBlock);
Debug.Log("Blue block);
}
if(redBlockNumber < blueBlockNumber)
{
Target(redBlock);
Debug.Log("Red block");
}
}
if (bluePickedUp == true) {
Target(bluePosuda);
Debug.Log("Blue container");
}
if(redPickedUp == true)
{
Target(redPosuda);
Debug.Log("red containter);
}
}
void Target(Transform target)
{
float dist = Vector2.Distance(Position, target.position);
float step = speed * Time.deltaTime;
if (dist >= diststop)
{
Position = Vector2.MoveTowards(Position, target.position, step);
rb.MovePosition(Position);
}
}
private void OnTriggerEnter2D(Collider2D target)
{
if (target.CompareTag("Blue") && redBlockNumber >= blueBlockNumber && bluePickedUp == false && redPickedUp == false)
{
bluePickedUp = true;
target.transform.position = hand.position;
target.transform.parent = GameObject.Find("Hand").transform;
}
if (target.CompareTag("Red") && redBlockNumber < blueBlockNumber && bluePickedUp == false && redPickedUp == false)
{
redPickedUp = true;
target.transform.position = hand.position;
target.transform.parent = GameObject.Find("Hand").transform;
}
if (target.CompareTag("BluePosuda"))
{
bluePickedUp = false;
blueBlockNumber++;
blueBlockNumberText.text = "Broj plavih blokova u posudama je: " + blueBlockNumber;
transform.eulerAngles = new Vector2(0, 180);
}
if (target.CompareTag("RedPosuda"))
{
redPickedUp = false;
redBlockNumber++;
redBlockNumberText.text = "Broj crvenih blokova u posudama je " + redBlockNumber;
transform.eulerAngles = new Vector2(0, 0);
}
}
}
Your answer
Follow this Question
Related Questions
AI phyics movement doesnt work 1 Answer
How to boxcast where a dynamic rigidbody2D's box collider will be in the next frame? 1 Answer
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
AI Movement with Rigidbody Physics? 0 Answers