- Home /
HitStop problems
Howdy! I seem to be having some problems whenever I implement my HitStop code, whenever I hit an enemy and let go of my move button, my character seems to keep moving in the direction that I pressed last without me even pressing the button. Below I have my Health script with my Hurt function which calls my IEnumerator, which calls my HitPause script (which I also have below). Also, I tried to experiment by removing and changing my movement script and it had the same results. I also have a video to show what I'm talking about, thanks!
public class Health : MonoBehaviour {
public int health = 5;
public int numOfCrystals;
public Animator myAnim;
public float waitDuration = 0.5f;
public Image[] crystals;
public Sprite fullCrystal;
public Sprite emptyCrystal;
//private PlayerControls2 movement;
/*
void Start()
{
movement = FindObjectOfType<PlayerControls2> ();
}
*/
void Update()
{
if(health > numOfCrystals)
{
health = numOfCrystals;
}
for (int i = 0; i < crystals.Length; i++) {
if (i < health) {
crystals [i].sprite = fullCrystal;
} else {
crystals [i].sprite = emptyCrystal;
}
if (i < numOfCrystals) {
crystals [i].enabled = true;
} else {
crystals [i].enabled = false;
}
}
}
void Hurt()
{
health--;
//StartCoroutine ("HitStop");
StartCoroutine ("GetInvulnerabley");
if (health <= 0) {
SceneManager.LoadScene (SceneManager.GetActiveScene ().buildIndex);
Physics2D.IgnoreLayerCollision (9, 12, false);
Time.timeScale = 1.0f;
}
}
void OnCollisionEnter2D (Collision2D collision)
{
Enemy enemy = collision.collider.GetComponent<Enemy> ();
if (enemy != null) {
Hurt ();
}
Boss boss = collision.collider.GetComponent<Boss> ();
if(boss != null)
{
Hurt ();
}
}
IEnumerator HitStop()
{
Time.timeScale = 0.0f;
yield return new WaitForSecondsRealtime (0.5f);
Time.timeScale = 1.0f;
}
IEnumerator GetInvulnerabley()
{
//FindObjectOfType<HitPause> ().Stop (0.5f);
//movement.hitStop ();
Time.timeScale = 0.0f;
yield return new WaitForSecondsRealtime (0.5f);
Time.timeScale = 1.0f;
Physics2D.IgnoreLayerCollision (9, 12, true);
myAnim.SetLayerWeight (1, 1);
yield return new WaitForSeconds (2f);
Physics2D.IgnoreLayerCollision (9, 12, false);
myAnim.SetLayerWeight (1, 0);
}
/*
TODO: Find and implement some good hitstop/hit pause code
IEnumerator WaitForSpawn()
{
while(Time.timeScale != 1.0f)
{
yield return null;
}
}
*/
}
public class HitPause : MonoBehaviour {
bool waiting;
public void Stop(float duration)
{
if (waiting)
return;
Time.timeScale = 0.0f;
StartCoroutine(Wait (duration));
}
IEnumerator Wait (float duration)
{
waiting = true;
yield return new WaitForSecondsRealtime (duration);
Time.timeScale = 1.0f;
waiting = false;
}
}
Your answer
Follow this Question
Related Questions
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Is there a standardized way for creating a 2D ball physics movement method? 0 Answers
Physic function doesn't work in different resoultions 0 Answers
Is it ok to use Linear Drag and/or Mass to make an object immovable? 2 Answers