2d project a shadow below the player
I want to create a shadow in my 2d sidescroller game. Just a round circle that is under the players feet. I want the shadow to get more transparent the higher the player jumps.
so what I did is to cast a raycast 2D from the players feet to the ground and I moved it a bit behind the player to prevent the shadow to appear when the player is hanging on a ledge. It works fine so far but sometimes the shadow just keeps sticking on the players feet while jumping. I don't know why that is that way.
It works again when I reset the scene. Sometimes it works for minutes sometimes just for seconds.
Any idea?
using UnityEngine;
using System.Collections;
using PlatformerPro;
public class ShadowRaycast : MonoBehaviour {
public Transform Shadow;
public Transform Player;
public float xOffset;
private Vector2 raycastOrigin;
/// <summary>
/// The character reference.
/// </summary>
protected IMob animatable;
public float opacityGrade;
public SpriteRenderer shadow;
/// <summary>
/// Unity start hook.
/// </summary>
void Start()
{
// This is not elegant but its a simple and effective way to handle interfaces in Unity
animatable = (IMob)gameObject.GetComponentInParent (typeof(IMob));
if (animatable == null) Debug.LogError ("UnitySpriteDirectionFacer can't find the animatable reference");
}
// Update is called once per frame
void Update () {
if (animatable.LastFacedDirection == -1) {
raycastOrigin = this.transform.position + new Vector3 (xOffset, 0f, 0f);
}
else raycastOrigin = this.transform.position + new Vector3 (-xOffset, 0f, 0f);
RaycastHit2D hit = Physics2D.Raycast(raycastOrigin, -Vector2.up);
Vector2 yPosition = hit.point;
float distance = Mathf.Abs(hit.point.y - this.transform.position.y);
Shadow.transform.position = yPosition;
if (distance > 6)
distance = 6;
opacityGrade = (distance/6-1)*-1;
Debug.Log("The opacityGrade is: "+ opacityGrade);
shadow.color = new Color(1f, 1f, 1f, opacityGrade);
}
}
Your answer
Follow this Question
Related Questions
Need help making a ledge climber. The problem, transform.position always returns to vector( 0, 0) 0 Answers
Inconsistent Jump Heights 1 Answer
One 2D Raycast Not Stopping Even Though Others Do? 0 Answers
how to check if an object is betwen enemy and player 1 Answer
How can I make a third person camera collision script? 2 Answers