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 Oliversgame · Jan 21, 2019 at 01:53 PM · linerendererlinedraw

Draw Line and detect line collision

I have this code. Its work fine. The line are drawing and detect collision but its too sesitive. When i made a sharp corner or accidentally i little bit draw backwards immediately detect the collision. How can i do that the last 1 unit do not detect.

heres more abot the script: http://www.theappguruz.com/blog/draw-line-mouse-move-detect-line-collision-unity2d-unity3d

using UnityEngine; using System.Collections; using System.Collections.Generic; public class DrawLine : MonoBehaviour { private LineRenderer line; private bool isMousePressed; public List pointsList; private Vector3 mousePos;

 // Structure for line points
 struct myLine
 {
     public Vector3 StartPoint;
     public Vector3 EndPoint;
 };
 //    -----------------------------------    
 void Awake ()
 {
     // Create line renderer component and set its property
     line = gameObject.AddComponent<LineRenderer> ();
     line.material = new Material (Shader.Find ("Particles/Additive"));
     line.SetVertexCount (0);
     line.SetWidth (0.1f, 0.1f);
     line.SetColors (Color.green, Color.green);
     line.useWorldSpace = true;    
     isMousePressed = false;
     pointsList = new List<Vector3> ();
     //        renderer.material.SetTextureOffset(
 }
 //    -----------------------------------    
 void Update ()
 {
     // If mouse button down, remove old line and set its color to green
     if (Input.GetMouseButtonDown (0)) {
         isMousePressed = true;
         line.SetVertexCount (0);
         pointsList.RemoveRange (0, pointsList.Count);
         line.SetColors (Color.green, Color.green);
     }
     if (Input.GetMouseButtonUp (0)) {
         isMousePressed = false;
     }
     // Drawing line when mouse is moving(presses)
     if (isMousePressed) {
         mousePos = Camera.main.ScreenToWorldPoint (Input.mousePosition);
         mousePos.z = 0;
         if (!pointsList.Contains (mousePos)) {
             pointsList.Add (mousePos);
             line.SetVertexCount (pointsList.Count);
             line.SetPosition (pointsList.Count - 1, (Vector3)pointsList [pointsList.Count - 1]);
             if (isLineCollide ()) {
                 isMousePressed = false;
                 line.SetColors (Color.red, Color.red);
             }
         }
     }
 }
 //    -----------------------------------    
 //  Following method checks is currentLine(line drawn by last two points) collided with line 
 //    -----------------------------------    
 private bool isLineCollide ()
 {
     if (pointsList.Count < 2)
         return false;
     int TotalLines = pointsList.Count - 1;
     myLine[] lines = new myLine[TotalLines];
     if (TotalLines > 1) {
         for (int i=0; i<TotalLines; i++) {
             lines [i].StartPoint = (Vector3)pointsList [i];
             lines [i].EndPoint = (Vector3)pointsList [i + 1];
         }
     }
     for (int i=0; i<TotalLines-1; i++) {
         myLine currentLine;
         currentLine.StartPoint = (Vector3)pointsList [pointsList.Count - 2];
         currentLine.EndPoint = (Vector3)pointsList [pointsList.Count - 1];
         if (isLinesIntersect (lines [i], currentLine)) 
             return true;
     }
     return false;
 }
 //    -----------------------------------    
 //    Following method checks whether given two points are same or not
 //    -----------------------------------    
 private bool checkPoints (Vector3 pointA, Vector3 pointB)
 {
     return (pointA.x == pointB.x && pointA.y == pointB.y);
 }
 //    -----------------------------------    
 //    Following method checks whether given two line intersect or not
 //    -----------------------------------    
 private bool isLinesIntersect (myLine L1, myLine L2)
 {
     if (checkPoints (L1.StartPoint, L2.StartPoint) ||
         checkPoints (L1.StartPoint, L2.EndPoint) ||
         checkPoints (L1.EndPoint, L2.StartPoint) ||
         checkPoints (L1.EndPoint, L2.EndPoint))
         return false;
     
     return((Mathf.Max (L1.StartPoint.x, L1.EndPoint.x) >= Mathf.Min (L2.StartPoint.x, L2.EndPoint.x)) &&
         (Mathf.Max (L2.StartPoint.x, L2.EndPoint.x) >= Mathf.Min (L1.StartPoint.x, L1.EndPoint.x)) &&
         (Mathf.Max (L1.StartPoint.y, L1.EndPoint.y) >= Mathf.Min (L2.StartPoint.y, L2.EndPoint.y)) &&
         (Mathf.Max (L2.StartPoint.y, L2.EndPoint.y) >= Mathf.Min (L1.StartPoint.y, L1.EndPoint.y)) 
            );
 }

}

Comment
Add comment
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

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by ModProg · Jan 21, 2019 at 04:00 PM

I'm not sure if it is you what you are trying to achieve, but if you want the isLineCollide Function to ignore every collision within the last eg. 5 Units, you can put the Code below Line 62. Just define tolerance as the distance in Units you want to ignore in the collision detection.

 //ToleranceCalculation
 for(int i = TotalLines-1;tolerance>0&&i>=0;i--){
     tolerance-=Vector3.Distance(lines[i].StartPoint,lines[i].EndPoint);
     TotalLines--;
 }

The code simply "deletes" all lines which are in sum shorter than tolerance. To be clear they are still in the lines array, but ignored due to TotalLines being lower.

Comment
Add comment · Show 1 · 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 Oliversgame · Jan 22, 2019 at 01:36 PM 0
Share

Thank you! This line of code not good for what i want , but i achieved that by i simply changed this line of code: int TotalLines = pointsList.Count - 1;

to this int TotalLines = pointsList.Count - 20;

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

98 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

Related Questions

Draw a line to a new pontential character position/target 1 Answer

LineRenderer. Problem with ray displaying 2 Answers

How to draw a line using script 8 Answers

Line Renderer Ilumination 1 Answer

Achieve a "stroke" / "transparent" effect with the Line Renderer in 2D 0 Answers


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