- Home /
How to determine direction in order to compare it to raycast results
Hi, I am attempting to make a rudimentary way to determine if a player controlled object has another object in the way it is facing. If it does (determined by raycasting) the object will print a message to console. However, i cannot seem to save a boolean that carries what direction the player is moving without there being continuous input. I need something that will be stay true until told otherwise.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ControllerPlayer : MonoBehaviour
{
public float speed;
private Rigidbody2D rb2d;
private float angleRotation = 0f;
public float rayDistance = 1f;
private SpriteRenderer rend;
private int layerMask = 1 << 9;
void Start()
{
rb2d = GetComponent<Rigidbody2D>();
rend = GetComponent<SpriteRenderer>();
rb2d.freezeRotation = true;
}
void FixedUpdate()
{
float moveHorizontal = Input.GetAxisRaw("Horizontal");
float moveVertical = Input.GetAxisRaw("Vertical");
Vector2 movement = new Vector2(moveHorizontal, moveVertical);
rb2d.AddForce(movement * speed);
rb2d.velocity = new Vector2(0, 0);
bool directionColor = Input.GetKey("w");
if (directionColor)
{
rend.color = Color.blue;
}
else if (Input.GetKey("s"))
{
rend.color = Color.red;
}
else if (Input.GetKey("a"))
{
rend.color = Color.green;
}
else if (Input.GetKey("d"))
{
rend.color = Color.yellow;
}
{
RaycastHit2D hitUp = Physics2D.Raycast(transform.position, Vector2.up, rayDistance, layerMask);
if ((hitUp.collider != null))
{
Debug.Log("Object UP");
}
RaycastHit2D hitDown = Physics2D.Raycast(transform.position, Vector2.down, rayDistance, layerMask);
if (hitDown.collider != null)
{
Debug.Log("Object DOWN");
}
RaycastHit2D hitLeft = Physics2D.Raycast(transform.position, Vector2.left, rayDistance, layerMask);
if (hitLeft.collider != null)
{
Debug.Log("Object LEFT");
}
RaycastHit2D hitRight = Physics2D.Raycast(transform.position, Vector2.right, rayDistance, layerMask);
if (hitRight.collider != null)
{
Debug.Log("Object RIGHT");
}
}
}
}
Right now, i have it sending out 4 rays in all 4 directions which will continuously print to console when an object is in their line of sight. However, I just need it to only do so when the object has moved in the direction of the object. The directionColor if/else statements will keep the color of the character despite there being no input, and i need that to apply to other variables.