- Home /
Best way to only run only one part of a script at a time?
Hey everyone might be a weird question, but this has been confusing me. I have this enemy that is supposed to hop once, then shoot three projectiles at the player, then hop once, and shoot three times, and continue this pattern. I have the shooting working (which is the portion of code that is commented out, yet the shooting is infinite and not just three shots as of now) and I have the hopping part of the code working as well. I'm just not sure how to get only one portion of the code working at a single time. I'm still new to this, so sorry if this has a simple solution. Any help is appreciated, thanks. Also, the onGround check doesn't affect the hopping or shooting, I just have it ready for when I add an animation later on.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BunnyController : Enemy {
//Animator animator;
Rigidbody2D rigidBunny;
public float distBetween;
public float deathDistance;
public float jumpX = 2f;
public float jumpY = 5f;
public bool isHopping = true;
public bool isShooting = false;
public GameObject carrotPrefab;
public float startTimeBetweenCarrots;
private float timeBetweenCarrots;
private bool onGround;
private Transform player; // holds the player
[SerializeField] // makes available in Inspector
Transform groundCheck;
[SerializeField]
Transform groundCheckR;
[SerializeField]
Transform groundCheckL;
void Start ()
{
//animator = GetComponent<Animator>();
rigidBunny = GetComponent<Rigidbody2D>();
player = GameObject.FindGameObjectWithTag("Player").GetComponent<Transform>(); // get player position
timeBetweenCarrots = startTimeBetweenCarrots;
}
void FixedUpdate()
{
if ((Physics2D.Linecast(transform.position, groundCheck.position, 1 << LayerMask.NameToLayer("Ground"))) ||
(Physics2D.Linecast(transform.position, groundCheckR.position, 1 << LayerMask.NameToLayer("Ground"))) ||
(Physics2D.Linecast(transform.position, groundCheckL.position, 1 << LayerMask.NameToLayer("Ground"))))
{
onGround = true;
}
if (onGround && isHopping)
{
Hop();
}
//if (timeBetweenCarrots <= 0)
//{
// Instantiate(carrotPrefab, transform.position, Quaternion.identity);
// timeBetweenCarrots = startTimeBetweenCarrots;
//}
//else
//{
// timeBetweenCarrots -= Time.deltaTime;
//}
}
void Hop()
{
rigidBunny.AddForce(new Vector2(-jumpX, jumpY), ForceMode2D.Impulse);
}
}
Your answer
Follow this Question
Related Questions
Synchronize two animator states to have the same normalized time - Mecanim 0 Answers
SetActive() not working 0 Answers
How do I code a shield for a spaceshooter? 0 Answers
Using Enum With Different Scrits 2 Answers