- Home /
Question by
sarthakshah · Sep 09, 2014 at 01:09 PM ·
linerendererlineperspective
Line renderer is not working for Perspective camera.
Hi,
I am trying to draw line using line rendrer as per mouse drag, its work for orthographic camera, but not working for perspective camera. I am printing the values of linerenderer position array, but everytime , it gives me (0,0,0) initial position in whole array. So please help me.
Code which i have written is,
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class DrawLine : MonoBehaviour
{
public List<Vector3> pointsList;
public Material mat ;
private LineRenderer lineRenderer;
private bool isMousePressed;
private Vector3 mousePos;
private Vector3 lastPos;
void Awake()
{
// Create line renderer component and set its property
lineRenderer = gameObject.GetComponent<LineRenderer>();
lineRenderer.SetVertexCount(0);
lineRenderer.SetWidth(0.1f,0.1f);
lineRenderer.useWorldSpace = true;
isMousePressed = false;
pointsList = new List<Vector3>();
}
// -----------------------------------
void Update ()
{
// If mouse button down, remove old line and set its color to green
if(Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100))
{
if (hit.transform.gameObject == transform.gameObject)
{
print("hit me");
isMousePressed = true;
lineRenderer.SetVertexCount(0);
pointsList.RemoveRange(0,pointsList.Count);
}
}
}
else if(Input.GetMouseButtonUp(0))
{
if(isMousePressed)
{
lineRenderer.enabled = false;
isMousePressed = false;
print("LastPos:"+lastPos);
}
}
// 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);
lastPos=mousePos;
lineRenderer.SetVertexCount (pointsList.Count);
lineRenderer.SetPosition (pointsList.Count - 1, (Vector3)pointsList [pointsList.Count - 1]);
//}
}
}
}
Comment
Best Answer
Answer by sarthakshah · Sep 30, 2014 at 08:53 AM
Hi,
Got the solution of it.
By just replacing following two lines,
mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
mousePos.z=0;
By this line
mousePos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y, transform.position.z - Camera.main.transform.position.z));
Cheers......