- Home /
GameObject1's Bool is FALSE when GameObject2 is Active?
Hi everyone, Here's my scenario: I want my Player(GameObject1) to stop being able to move when another GameObject2 is Active. I'm using the Fungus extension to operate some dialogue boxes in a 2D Pokemon-style game. All of my player movements are couched within a "canMove" bool. How can I disable my "canMove" bool when this other GameObject controlling my dialogues is Active?
Because I'm using Fungus, I know I'm a bit limited for find other options for stopping Player movement during dialogue moments, but if anyone has experience with this, I'd be very grateful!
Here's the relevant code:
public class PokemonPlayerController : MonoBehaviour { public Rigidbody2D theRB; public float moveSpeed;
public bool canMove;
public bool isWalking;
public GameObject sayingDialog;
public GameObject footsteps;
// Start is called before the first frame update
void Start()
{
myAnim = GetComponent<Animator>();
canMove = true;
}
// Update is called once per frame
void Update()
{
// ESTABLISH PLAYER'S MOVEMENT
theRB.velocity = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")) * moveSpeed;
// ESTABLISH ANIMATIONS
myAnim.SetFloat("moveX", theRB.velocity.x);
myAnim.SetFloat("moveY", theRB.velocity.y);
myAnim.SetBool("isWalking", isWalking);
// FIND OUT IF PLAYER IS MOVING
if (canMove)
{ if (Input.GetAxisRaw("Horizontal") >= 0.1 || Input.GetAxisRaw("Horizontal") <= -0.1 || Input.GetAxisRaw("Vertical") >= 0.1 || Input.GetAxisRaw("Vertical") <= -0.1)
{
// PLAY FOOTSTEPS IF WALKING
isWalking = true;
if (isWalking)
{
footsteps.SetActive(true);
}
}
// STOP FOOTSTEPS IF NOT WALKING
else
{
isWalking = false;
if (!isWalking)
{
footsteps.SetActive(false);
}
}
}
if (!canMove)
{
moveSpeed = 0f;
}
Answer by Ady_M · Jan 08, 2020 at 12:08 PM
I usually have a GameManager that keeps track of which object should be allowed to receive input.
A quick solution would be to have a reference (currentPlayer) in GameManager to the active player object.
In the player's Update, before reacting to input, check if this.gameObject is the same as the currentPlayer that the GameManager is referencing.
Alternatively, you could put the code that reacts to input in a separate script and enable/disable the component depending on whether it belongs to the active player or not.
Answer by logicandchaos · Jan 08, 2020 at 04:25 PM
canMove=!dialogGameObject.gameObject.active where dialogGameObject is your GameObject that controls the dialog.
Your answer
Follow this Question
Related Questions
Store a reference to an object with a certain boolean? 0 Answers
Create with code 2.2 pizza not shooting 1 Answer
Can't re-enable a gameobject 1 Answer
Change bool in only one GameObject 1 Answer