2017-09-08 1 views
-1
using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class DrawLinesWithMouse : MonoBehaviour 
{ 
    private List<Vector3> pointsList; 

    // Use this for initialization 
    void Start() 
    { 
     pointsList = new List<Vector3>(); 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     RaycastHit hit; 

     Ray ray = GetComponent<Camera>().ScreenPointToRay(Input.mousePosition); 
     if (Physics.Raycast(ray, out hit, 1000)) 
     { 
      Vector3 hitpoint = hit.point; 
      pointsList.Add(hitpoint); 

      DrawLine(pointsList[0], pointsList[pointsList.Count -1], Color.red, 0.2f); 
     } 
    } 

    void DrawLine(Vector3 start, Vector3 end, Color color, float duration = 0.2f) 
    { 
     GameObject myLine = new GameObject(); 
     myLine.transform.position = start; 
     myLine.AddComponent<LineRenderer>(); 
     LineRenderer lr = myLine.GetComponent<LineRenderer>(); 
     lr.material = new Material(Shader.Find("Particles/Alpha Blended Premultiply")); 
     lr.startColor = color; 
     lr.startWidth = 3f; 
     lr.endWidth = 3f; 
     lr.SetPosition(0, start); 
     lr.SetPosition(1, end); 
     //GameObject.Destroy(myLine, duration); 
    } 
} 

Le problème ici est qu'il dessine une ligne comme ventilateur de pliage portable:Comment puis-je tracer une ligne sur le terrain lorsque je déplace la souris?

handheld folding fan

Mais je le veux tracer une ligne ligne juste unique en fonction de la position de déplacement de la souris, y compris les courbes si, par exemple Je déplace la souris en cercles, pas seulement des lignes droites.

+0

Je propose, vous devriez vérifier [Trail Renderer] (https://docs.unity3d.com/Manual/class-TrailRenderer.html). Vous pouvez ajouter un objet gameObject vide à la position de votre souris, ce qui affichera trailRenderer. – Thalthanas

+1

Au lieu de dessiner de pt0 au point courant, vous pouvez dessiner de currentPt -1 à currentPt – Everts

Répondre

1
DrawLine(pointsList[0], pointsList[pointsList.Count -1], Color.red, 0.2f); 

Cette pièce est le dessin à partir du premier point (poinstList [0]) au dernier point (PointsList [pointsList.Count -1]). Il devrait plutôt dessiner du deuxième au dernier point jusqu'au dernier point.

DrawLine(pointsList[pointsList.Count -2], pointsList[pointsList.Count -1], Color.red, 0.2f);