Dibujar líneas con el mouse en Unity 3D

Curso de Unity 3D

21.  
40.  

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

  1. Configuración global:
    1. Usaremos una vista ortográfica para la cámara. ( Seleccionamos la cámara -> Projection -> Orthographic)
    2. Usaremos un fondo plano (Seleccionamos la cámara -> Clear flags -> Solid color)
  2. Creando el pincel:
    1. Create Empty. Lo llamaremos ball
    2. Dentro de este empty creamos un 2D Object -> Sprite. Le asignamos la imagen del pincel:
Pincel unity 3d
  1. Asociamos un Rigid Body 2D al objeto Ball.
  2. Dentro del componente Rigid Body 2D cambiamos la propiedad Body Type a static para que la pelota no caiga por gravedad.
  3. Añadimos un Circle Collider 2D al objeto Ball y lo ajustamos al tamaño del pincel.
  4. Convertimos el objeto Ball en un Prefab.
  1. Creamos la línea
    1. Creamos un nuevo empty que llamaremos Line.
    2. Añadimos un componente de tipo Line Renderer a esta línea.
    3. Creamos un nuevo material y lo vinculamos al objeto.Line.
    4. Dentro del componente Line Renderer del objeto Line:
      1. Asignaremos un Width de 0.15.
      2. Asignamos un Edge Collider 2D a la línea.
      3. Salvamos la línea como Prefab.
  2. Creamos un nuevo Script llamado DrawLine
public class DrawLine : MonoBehaviour {
	public GameObject linePrefab;
	private GameObject currentLine;
	private LineRenderer lineRenderer;
	private EdgeCollider2D edgeCollider;
	private List<Vector2> fingerPositions = new  List<Vector2>();

	void Update () {
		if (Input.GetMouseButtonDown(0)){
			CreateLine();
		}
		if (Input.GetMouseButton(0)){
			Vector2 tempFingerPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
			if (Vector2.Distance(tempFingerPos, fingerPositions[fingerPositions.Count - 1]) > .1f){
				UpdateLine(tempFingerPos);
			}
		}
	}

	void CreateLine(){
                // Llamamos a CreateLine una sola vez cuando empezamos a dibujar para crear currentLine. currentLine se visualizará porque tendrán un lineRenderer y tendrá colisión porque tendrá un edgeCollider
		currentLine = Instantiate(linePrefab, Vector3.zero, Quaternion.identity);
		lineRenderer = currentLine.GetComponent<LineRenderer>();
		edgeCollider = currentLine.GetComponent<EdgeCollider2D>();
		fingerPositions.Clear();
		// Como lineRenderer es una línea, necesitamos añadir dos puntos a fingerPositions para poder dibujarla sin errores
		fingerPositions.Add(Camera.main.ScreenToWorldPoint(Input.mousePosition));
		fingerPositions.Add(Camera.main.ScreenToWorldPoint(Input.mousePosition));
		// Dibujamos una línea compuesta de dos puntos
		lineRenderer.SetPosition(0, fingerPositions[0]);
		lineRenderer.SetPosition(1, fingerPositions[1]);
		edgeCollider.points = fingerPositions.ToArray();
	}

	void UpdateLine(Vector2 newFingerPos){
		fingerPositions.Add(newFingerPos);
		lineRenderer.positionCount++;
		// Convertimos el List de posiciones por las que ha ido pasando el dedo en la línea que vamos a ver
		lineRenderer.SetPosition(lineRenderer.positionCount - 1, newFingerPos);
		// Convertimos el List de posiciones por las que ha ido pasando el dedo en los puntos del edge collider
		edgeCollider.points = fingerPositions.ToArray();
	}
}
  1. Creamos un Empty llamado GameController y le vinculamos el código anterior.
  2. Luego, en el panel inspector, iremos asociando las propiedades que hemos hecho públicas. Sólo con rellenar la primera propiedad ( Line Prefab ya podremos dibujar).
Descargar Recurso

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.