I am quite inexperienced with unity but i made a raycaster today but it had weird warping and i don’t know how to fix it, and would highly appreciate if anyone wants to help! 😀
The code for the renderer:
using System.Collections;
using System.Collections.Generic;
using Unity.Mathematics;
using UnityEngine;
public class renderer : MonoBehaviour
{
public Camera cam;
public GameObject player;
public GameObject square;
public int rays = 50;
public int fov = 70;
public float ray_dist = 20;
public float fall_off_dist = 5;
private float cam_width;
private float cam_height;
private float cam_edge;
private float ray_angle;
private void create_slices()
{
for (int current_slice = 0; current_slice < rays; current_slice++)
{
GameObject clone = Instantiate(square, cam.transform);
clone.name = "slice" + current_slice.ToString();
clone.transform.localScale = new Vector3(cam_width / rays, cam_height);
clone.transform.position = new Vector3(cam_edge + (clone.transform.localScale.x / 2) + (cam_width / rays * current_slice), 0);
}
}
void Start()
{
Vector3 cam_dim = cam.ViewportToWorldPoint(new Vector3(1, 0, cam.nearClipPlane)) - cam.ViewportToWorldPoint(new Vector3(0, 1, cam.nearClipPlane));
cam_width = cam_dim.x;
cam_height = -cam_dim.y;
cam_edge = cam.ViewportToWorldPoint(new Vector3(0, 1, cam.nearClipPlane)).x;
create_slices();
}
private void change_slice(RaycastHit2D raycast, float current_ray)
{
if (raycast)
{
float dist_mult = math.clamp((fall_off_dist - raycast.distance) / fall_off_dist, 0, 1);
Color hit_color = raycast.collider.gameObject.GetComponent<SpriteRenderer>().color;
GameObject slice = GameObject.Find("slice" + current_ray.ToString());
slice.GetComponent<SpriteRenderer>().color = hit_color * dist_mult;
slice.transform.localScale = new Vector3(slice.transform.localScale.x, cam_height * dist_mult);
}
}
void Update()
{
ray_angle = math.radians(fov / (float)rays);
for (float current_ray = 0f; current_ray < rays; current_ray += 1f)
{
float angle1 = math.sin((-ray_angle * (((float)rays - 1) / 2)) + (ray_angle * current_ray));
float angle2 = math.cos((-ray_angle * (((float)rays - 1) / 2)) + (ray_angle * current_ray));
Vector3 direction = Quaternion.AngleAxis(player.transform.eulerAngles.z, Vector3.forward) * new Vector3(angle1, angle2);
RaycastHit2D raycast = Physics2D.Raycast(player.transform.position, direction, ray_dist);
change_slice(raycast, current_ray);
}
}
}
i have tried to multiply raycast distance by cos(ray_angle) but it made no difference
New contributor
charlieck is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.