Деформация в рендерере raycaster, сделанном в UnityC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Деформация в рендерере raycaster, сделанном в Unity

Сообщение Anonymous »

Я совершенно неопытен в Unity, но сегодня я сделал рейкастер, но он странно деформировался, и я не знаю, как это исправить, и буду очень признателен, если кто-нибудь захочет помочь! :D
картинка проблемы
Код рендерера:

Код: Выделить всё

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().color;
GameObject slice = GameObject.Find("slice" + current_ray.ToString());
slice.GetComponent().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);
}
}
}
Я пытался умножить расстояние raycast на cos(ray_angle), но это не имело никакого значения

Подробнее здесь: https://stackoverflow.com/questions/788 ... e-in-unity
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как правильный способ реализовать поддержку N Shadowmaps в рендерере WebGPU?
    Anonymous » » в форуме Javascript
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Проблема с позиционированием и размерами в апк сделанном через фреймворк Kivy
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Проблема с позиционированием и размерами в апк сделанном через фреймворк Kivy
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Проблема с позиционированием и размерами в апк сделанном через фреймворк Kivy
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Raycaster не отображает текстуры по оси Y.
    Anonymous » » в форуме C++
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»