Whenever player gets hit, it keeps getting pushed despite bool off?
I'm nearly done with my player's Main code but I just need to get over this hurdle to complete it. I'm trying to add pushback whenever the player gets damaged by anything tagged with "Enemy". I've used a boolean check in FIxedUpdate part and from what I understand the player should only get pushed whenever the boolean is on. Weirdly, the character keeps getting pushed despite bool check showing the tick off.
Here's the code: using UnityEngine; using System.Collections;
public class PlayerMain : MonoBehaviour
{
//Variable
public bool PBenabler;//p
public float maxDashTime;//p
private float currentDashTime;//p
Vector3 forward, right;//m
public float moveSpeed = 4f;//m
private Vector3 moveDirection;//m
private bool moveEnabler;//m
public float force;
public float gravity = 3F;//m
public float MaxHealth = 100f;//h
public float CurHealth;//h
public GameObject Health;//h
public bool alive;//h
void Start()
{
//P/ush Back script
currentDashTime = maxDashTime;
//H/ealth script
alive = true;
CurHealth = MaxHealth;
SetHealth ();
}
public void TakeDamage(float amount)
{
CurHealth -= amount;
SetHealth ();
if(CurHealth <= -0f)
{
alive = false;
}
}
void FixedUpdate()
{
CharacterController controller = GetComponent<CharacterController>();// is the controller on the ground?
if(PBenabler == true)
{
moveDirection -= transform.forward * Time.deltaTime * 15;
}else if(PBenabler == false)
{
moveDirection.y -= gravity * Time.deltaTime; //Applying gravity to the controller
controller.Move(moveDirection * Time.deltaTime); //Making the character move
}
//CharacterController controller = GetComponent<CharacterController>();// is the controller on the ground?
forward = Camera.main.transform.forward;// Set forward to equal the camera's forward vector
forward.y = 0;// make sure y is 0
forward = Vector3.Normalize(forward);// make sure the length of vector is set to a max of 1.0
right = Quaternion.Euler(new Vector3(0, 90, 0)) * forward;// set the right-facing vector to be facing right relative to the camera's forward vector
if(( (Input.GetAxis("Horizontal") != 0) || Input.GetAxis("Vertical") != 0) && alive == true)//disables allowing any keys aside from WASD and UP DOWN LEFT RIGHT keys
{
moveEnabler = true;
}else
{
moveEnabler = false;
}
if(controller.isGrounded && moveEnabler == true && CurHealth >0)
{
Move();
}
if(controller.isGrounded && GetComponent<AudioSource>().isPlaying == false && ( (Input.GetAxis("Horizontal") != 0) || Input.GetAxis("Vertical") != 0) && CurHealth >0)
{
GetComponent<AudioSource>().volume = Random.Range (0.7f, 0.9f);
GetComponent<AudioSource>().Play ();
}
moveDirection.y -= gravity * Time.deltaTime; //Applying gravity to the controller
controller.Move(moveDirection * Time.deltaTime); //Making the character move
}
void OnTriggerEnter(Collider c)
{
if (c.gameObject.tag == "Enemy")
{
PBenabler = true;
} else
{
PBenabler = false;
}
}
void Move()
{
Vector3 direction = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
Vector3 rightMovement = right * moveSpeed * Time.deltaTime * Input.GetAxis("Horizontal");
Vector3 upMovement = forward * moveSpeed * Time.deltaTime *Input.GetAxis("Vertical");
Vector3 heading = Vector3.Normalize(rightMovement + upMovement);//controls where its facing
transform.forward = heading;
transform.position += rightMovement;
transform.position += upMovement;
}
public void SetHealth()
{
float P_Health = CurHealth / MaxHealth; //if CurHealth 80/100 = 8f
//P_Health value vaule between 0 and 1
Health.transform.localScale = new Vector3(Mathf.Clamp (P_Health, 0f, 1f), Health.transform.localScale.y, Health.transform.localScale.z);
}
}
I've tried using coroutines for the first time, it still keeps getting pushed.
Comment
Your answer