How do i stop player to move when dead

Hi. Does anyone know to stop player from moving and shooting?

Here’s my script for my health bar:

var curHealth = 300;
var healthTexture : Texture2D;
var explode:Transform;
var canMove = true;

function Start ()
{
	animation["MyCharacterRig|Die"].wrapMode = WrapMode.Once;
	animation["MyCharacterRig|Die"].layer = 1;
}

function Update ()
{
	if (curHealth <=0 )
	{
		animation.CrossFade("MyCharacterRig|Die");
	}
}

function OnTriggerEnter( hit : Collider )
 
{
    if(hit.gameObject.tag == "enemyProjectile")
    {
    	animation.Play("MyCharacterRig|Hit");
		Instantiate(explode, transform.position, transform.rotation);
    }
    
	if(hit.gameObject.tag == "enemyProjectile")
	{
		curHealth -= 15;
	}
	
	
	if(curHealth < 0)
	{
		curHealth = 0;
	}
	
	
	if (curHealth <= 0) 
	{
		
		yield WaitForSeconds(1.3);
		Application.LoadLevel(2);
		
	}
	


}

function OnGUI() {

	GUI.DrawTexture(Rect(10,10,curHealth,30), healthTexture);
}

i did make it looked like he’s dead but when the dead animation is playing i can still move and shoot .

I think you should disable the character movement script
It would be something like that:

var player : GameObject;

function Update () {
    if (curHealth == 0) {
        player.GetComponent("CharacterController").enbaled = false;
    }
}
  • Add that part of script to your health bar script
  • Select the player
  • If not your player’s movement script is “CharacterController” make sure you change it

Hello,

This is an old question, but I recently ran into this problem. Since I did not find a valid solution scouring the web. All Get commands did not properly grab the component or the CharacterController for that matter and setting .enabled = false; just didn’t seem to actually work. So for anyone running into this problem here’s my solution:

using System.Collections;
using UnityEngine;

public class P_Animator : MonoBehaviour
{
   ExtendedBehavior wait;
   P_Controller playerMovement;
   private Animator anim;

   protected void Awake()
    {
        if (Instance != null && Instance != this)
        {
            Destroy(gameObject);
        }
        else
        {
            Instance = this;
            anim = GetComponent<Animator>();
            playerMovement = GetComponent<P_Controller>();
            DontDestroyOnLoad(gameObject);
        }        
    }

    public void Death()
    {
        if (!isDead)
        {
            StartCoroutine(StopPlayer(.1f));
            anim.SetTrigger("isDead");
            //playerAudio.clip = deathClip;
            //playerAudio.Play();
            isDead = true;
            Revival();
        }
    }

    private IEnumerator StopPlayer(float time)
    {
        playerMovement.enabled = false;
        yield return new WaitForSeconds(time);
    }

    public void Revival()
    {
        // How the character revives
    }

You will also need to make a Coroutine script to run this correctly. Here is an example script:

using UnityEngine;
using System.Collections;
using System;

public class ExtendedBehavior : MonoBehaviour
{
    public void Wait(float seconds, Action action)
    {
        StartCoroutine(_wait(seconds, action));
    }
    IEnumerator _wait(float time, Action callback)
    {
        yield return new WaitForSeconds(time);
        callback();
    }
}

The Coroutine wasn’t necessary to stop the player’s movement, but it was so for allowing the animation time to finish while stopping movement. This script is a skeleton of my script, but it gives the main code that makes it work and I hope it helps someone.