Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by fl1ckje · Aug 25, 2019 at 09:31 AM · c#raycastbeginnerreflectionline renderer

Updating line positions with reflections

Hello. I am creating a radar simulator and my aim is to make a wave which is reflected from any number of objects with specific tag until it reaches the maximal spread distance run out. I have a couple of questions:

1)How can I check if any reflection has been changed and then redraw the whole wave at runtime? (for example: one or more objects appear or disappear from the line of the original ray or of any of the reflected rays and then the wave redraws)

2)How can I safely add and remove hit points depending on number of reflections? (for example: if there are 3 reflections, there are 3 hit points in the list, if 2, then 2 hit points and etc.)

Here's my code and screenshots:

Before:

alt text

After:

alt text

 using UnityEngine;
  using System.Collections.Generic;
  
  [RequireComponent(typeof(LineRenderer))]
  public class Irradiator : MonoBehaviour
  {
      LineRenderer m_Line;
      public List<Vector3> HitPoints = new List<Vector3>();
      [Range(0, 255)] public float maxSL = 100;//maxSpreadLength.
      public float curSL = 0;//curSpreadLength.
      [Range(1, 50)] public byte density = 20;
      public float ampl = 1;
      public float dampC = 0.1f;
      public float sprdSpeed = 20;
      public float freq = 200;
      public float step;
      public int maxPointsCount;
      public int curPointsCount = 0;
      public Vector3 origin;
      public Vector3 direction;
      public const string dispersingTag = "Surfaces/Dispersing";
      public const string reflectingTag = "Surfaces/Reflecting";
      public int rayCount = 0;
      public float deltaZ = 0;
  
  
      void Start()
      {
          m_Line = GetComponent<LineRenderer>();
          step = 1 / (float)density;
          maxPointsCount = Mathf.CeilToInt(maxSL * density);
      }
  
      void FixedUpdate()
      {
          origin = transform.position;
          direction = transform.forward;
          m_Line.positionCount = maxPointsCount;
          RenderWave(origin, direction, ref curPointsCount, ref curSL, ref rayCount);
      }
  
      void RenderWave(Vector3 orig, Vector3 dir, ref int _curPointsCount, ref float _curSL, ref int rayCount)
      {
          if (_curSL >= maxSL)
          {
              Debug.Log("STOPPED");
              //Debug.Break();
              return;
          }
          Ray ray = new Ray(orig, dir);
          RaycastHit hit;
          ++rayCount;
          Debug.Log("RayCount: " + rayCount);
          int curRayPoints = 0;
          float curRaySL = 0;
          bool h;
          Vector3 pos = orig;
          Vector3 ortReflected = Vector3.Cross(transform.right, dir);
          Vector3 dirReflected = dir;
  
          if (Physics.Raycast(ray, out hit, maxSL - _curSL) && hit.transform.gameObject.tag == reflectingTag)
          {
              h = true;
              HitPoints.Add(hit.point);
              curRaySL = hit.distance;
              curRayPoints = Mathf.CeilToInt(curRaySL * density);
              ortReflected = Vector3.Cross(hit.transform.right, dir).normalized;
              Debug.DrawRay(orig, ortReflected, Color.blue);
              Debug.DrawRay(orig, dirReflected, Color.red);
          }
          else
          {
              h = false;
              curRaySL = maxSL - _curSL;
              curRayPoints = maxPointsCount - _curPointsCount;
              ortReflected = Vector3.Cross(transform.right, dir).normalized;
          }
          Debug.Log("curRaySL: " + curRaySL);
          Debug.Log("curRayPoints: " + curRayPoints);
  
          Debug.DrawRay(orig, dir * curRaySL, Color.red);
  
          for (int i = _curPointsCount; i < _curPointsCount + curRayPoints; i++)
          {
              Vector3 p = pos + ampl * Mathf.Exp(-dampC * deltaZ) * Mathf.Sin(Mathf.PI + freq * deltaZ / sprdSpeed) * ortReflected;
              Debug.Log("Point [" + i + "] = " + p);
              m_Line.SetPosition(i, p);
              pos += dirReflected * step;
              deltaZ += step;
          }
          _curSL += curRaySL;
          _curPointsCount += curRayPoints;
          if (h == true)
          {
              dirReflected = Vector3.Reflect(dirReflected, hit.normal);
              ortReflected = Vector3.Reflect(ortReflected, hit.normal);
              Debug.DrawRay(hit.point, dirReflected, Color.magenta);
              Debug.DrawRay(hit.point, ortReflected, Color.cyan);
          }
          Debug.Log("_curPointsCount: " + _curPointsCount);
          Debug.Log("_curSL: " + _curSL);
          RenderWave(hit.point, dirReflected, ref _curPointsCount, ref _curSL, ref rayCount);
      }
  }


снимок.png (77.3 kB)
снимок2.png (80.2 kB)
Comment
Add comment · Show 2
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image sacredgeometry · Aug 25, 2019 at 09:38 AM 0
Share

Im not entirely sure what you mean. Surely if you are casting a ray and using it to calculate the reflection the mere act of doing it at a certain rate will automatically propagate those changes.

avatar image fl1ckje sacredgeometry · Aug 25, 2019 at 09:48 AM 0
Share

I mean that if an obstacle is removed or moved away from raycast, then it doesn't automatically propagate those changes. As you can see, I have a function which calls itself to create a new ray, calculate points and etc.

1 Reply

· Add your reply
  • Sort: 
avatar image
0
Best Answer

Answer by sacredgeometry · Aug 25, 2019 at 10:46 AM

Video

 public class Laser : MonoBehaviour
 {
     public Transform Emitter;
 
     void FixedUpdate()
     {
         CastReflectedRay(Emitter.position, Emitter.forward);        
     }
 
     void CastReflectedRay(Vector3 position, Vector3 reflection)
     {
         if (Physics.Raycast(position, reflection, out var hit) && hit.transform.tag == "Mirror")
         {
             Debug.DrawLine(position, hit.point);
             var reflectedVector = Vector3.Reflect(reflection, hit.normal);
             CastReflectedRay(hit.point, reflectedVector);
         }
     }
 }
 


Comment
Add comment · Show 3 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image fl1ckje · Aug 25, 2019 at 01:36 PM 0
Share

Thank you for this answer, but I have to work with thousands of vectors (points), so anyway I have to recode it somehow, because even the start of program causes stackoverflow exception :((( I just have no idea how is it possible to fix it. The points calculation for each ray is right, the reflection is too, but i just really don't know, how to fix it up. Well, thanks again, I will try a few more times to make it work like it should.

avatar image sacredgeometry fl1ckje · Aug 25, 2019 at 02:00 PM 0
Share

You could probably call that hundreds of thousands of times without it causing a stack overflow. Are you sure you are testing for the mirror properly?

avatar image sacredgeometry fl1ckje · Aug 25, 2019 at 02:44 PM 0
Share

@fl1ckje https://www.youtube.com/watch?v=doXz1tLo6PI

Try this

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

662 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Shoot Laser 0 Answers

Line Renderer not showing 0 Answers

Can anybody tell me why reflections are not smoother from 2nd reflection? The first reflection is smooth but later ones aren't smooth. Please find the attached gif. 1 Answer

How can I make my player unable to jump up walls? 2 Answers

Why are the reflected bullets in my 2D game acting strange? 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges