Stopping player's Blink ability with Raycasts.?

Hello everyone, took two days of searching around and I can’t seem to exactly find how to get this working.

Explanation: I have a player which can use a Blink ability (quick movement forward). My problems is that upon using this ability, the player passes through walls. I’m trying to call Raycasts in the update section until one hits something very close, at which point the player’s movement will stop. By modifying my code, I’m able to completely prevent the ability to launch if something is in the way (which is not what I want), or the player passes through everything.

I’ll make the assumption that the way I use Raycasts is highly flawed. If Raycasts won’t do the job, what could be used to get the desired result? Thanks in advance for the help guys, much appreciated.

Here is my code:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class added_Controls : MonoBehaviour {

    public KeyCode RunKey = KeyCode.LeftShift;
    public float blinkSpeed = 20f;
    public float delayTime = 2;
    public Rigidbody rb;
    public Slider blinkSlider;
    public GameObject blinkParticle;
    public GameObject blinkParticleSpawn;
    public GameObject player;

    float counter = 0;
    float savedTime = 0;
    bool blinkUnderway = false;
    float blinkTimer = 0.5f;

    // Use this for initialization
    void Start () {
	// Update is called once per frame
	void FixedUpdate () {

        blinkSlider.value -= Time.deltaTime * blinkTimer;

        if (Input.GetKeyDown(RunKey) && blinkSlider.value == 0) {

            blinkUnderway = true;
            blinkSlider.value = 1;
            GameObject blinkEffect = (GameObject)Instantiate(blinkParticle,blinkParticleSpawn.transform.position, blinkParticleSpawn.transform.rotation);
            blinkEffect.transform.parent = gameObject.transform;

            RaycastHit hit;
            Vector3 fwd = transform.TransformDirection(Vector3.forward);
            Physics.Raycast(transform.position, fwd, out hit);

            if (hit.distance <= 1f)

                rb.velocity =;
                blinkUnderway = false;
                savedTime = 0;


            while (blinkUnderway) {

                gameObject.transform.Translate(Vector3.forward * Time.deltaTime * blinkSpeed);
                savedTime += Time.deltaTime;

                if (savedTime >= 5){

                    blinkUnderway = false;
                    savedTime = 0;


With the physics in Unity, you should never use manual translation. Instead use rigidbody.AddForce.

Your using translate to move a rigidbody really fast, if the physics can’t catch up, it will pass through walls.

Apply a force to your rigidbody instead and see if that helps.