Всем привет подскажите как изменить скрипт чтобы можно было рисовать мышкой. Кто может напишите пожалуйста
Code
private var origPoints : Vector2[];
function Start () { linePoints = new Vector2[numberOfPoints]; origPoints = new Vector2[numberOfPoints];
// Plot points on a circle var radians : float = 360.0/(numberOfPoints-1)*Mathf.Deg2Rad; var p = 0.0; for (i = 0; i < numberOfPoints; i++) { linePoints[i] = Vector2(.5 + .25*Mathf.Cos(p), .5 + .25*Mathf.Sin(p)); origPoints[i] = linePoints[i]; p += radians; } }
function Update () { for (i = 0; i < linePoints.Length; i++) { if (i%2 == 0) {var m = .4; var t = 1.0;} else {m = .5; t = .5;} linePoints[i] = (origPoints[i]-Vector2(.5, .5))*(Mathf.Sin(Time.time*t)+Mathf.PI*m)+Vector2(.5, .5); } }
var numberOfPoints = 31; var lineColor = Color.white; var lineWidth = 3; var drawLines = true; private var lineMaterial : Material; private var linePoints : Vector2[]; private var cam : Camera;
function Awake () { lineMaterial = new Material( "Shader \"Lines/Colored Blended\" {" + "SubShader { Pass {" + " BindChannels { Bind \"Color\",color }" + " Blend SrcAlpha OneMinusSrcAlpha" + " ZWrite Off Cull Off Fog { Mode Off }" + "} } }"); lineMaterial.hideFlags = HideFlags.HideAndDontSave; lineMaterial.shader.hideFlags = HideFlags.HideAndDontSave; cam = camera; }
function OnPostRender () { if (!drawLines || !linePoints || linePoints.Length < 2) {return;}
var nearClip = cam.nearClipPlane + .00001; // Add a bit, else there's flickering when the camera moves var end = linePoints.Length - 1; var thisWidth = 1.0/Screen.width * lineWidth * .5;
lineMaterial.SetPass(0); GL.Color(lineColor);
if (lineWidth == 1) { GL.Begin(GL.LINES); for (i = 0; i < end; i++) { GL.Vertex(cam.ViewportToWorldPoint(Vector3(linePoints[i].x, linePoints[i].y, nearClip))); GL.Vertex(cam.ViewportToWorldPoint(Vector3(linePoints[i+1].x, linePoints[i+1].y, nearClip))); } } else { GL.Begin(GL.QUADS); for (i = 0; i < end; i++) { var perpendicular = (Vector3(linePoints[i+1].y, linePoints[i].x, nearClip) - Vector3(linePoints[i].y, linePoints[i+1].x, nearClip)).normalized * thisWidth; var v1 = Vector3(linePoints[i].x, linePoints[i].y, nearClip); var v2 = Vector3(linePoints[i+1].x, linePoints[i+1].y, nearClip); GL.Vertex(cam.ViewportToWorldPoint(v1 - perpendicular)); GL.Vertex(cam.ViewportToWorldPoint(v1 + perpendicular)); GL.Vertex(cam.ViewportToWorldPoint(v2 + perpendicular)); GL.Vertex(cam.ViewportToWorldPoint(v2 - perpendicular)); } } GL.End(); }
function OnApplicationQuit () { DestroyImmediate(lineMaterial); }
@script RequireComponent(Camera) private var origPoints : Vector2[];
function Start () { linePoints = new Vector2[numberOfPoints]; origPoints = new Vector2[numberOfPoints];
// Plot points on a circle var radians : float = 360.0/(numberOfPoints-1)*Mathf.Deg2Rad; var p = 0.0; for (i = 0; i < numberOfPoints; i++) { linePoints[i] = Vector2(.5 + .25*Mathf.Cos(p), .5 + .25*Mathf.Sin(p)); origPoints[i] = linePoints[i]; p += radians; } }
function Update () { for (i = 0; i < linePoints.Length; i++) { if (i%2 == 0) {var m = .4; var t = 1.0;} else {m = .5; t = .5;} linePoints[i] = (origPoints[i]-Vector2(.5, .5))*(Mathf.Sin(Time.time*t)+Mathf.PI*m)+Vector2(.5, .5); } }
var numberOfPoints = 31; var lineColor = Color.white; var lineWidth = 3; var drawLines = true; private var lineMaterial : Material; private var linePoints : Vector2[]; private var cam : Camera;
function Awake () { lineMaterial = new Material( "Shader \"Lines/Colored Blended\" {" + "SubShader { Pass {" + " BindChannels { Bind \"Color\",color }" + " Blend SrcAlpha OneMinusSrcAlpha" + " ZWrite Off Cull Off Fog { Mode Off }" + "} } }"); lineMaterial.hideFlags = HideFlags.HideAndDontSave; lineMaterial.shader.hideFlags = HideFlags.HideAndDontSave; cam = camera; }
function OnPostRender () { if (!drawLines || !linePoints || linePoints.Length < 2) {return;}
var nearClip = cam.nearClipPlane + .00001; // Add a bit, else there's flickering when the camera moves var end = linePoints.Length - 1; var thisWidth = 1.0/Screen.width * lineWidth * .5;
lineMaterial.SetPass(0); GL.Color(lineColor);
if (lineWidth == 1) { GL.Begin(GL.LINES); for (i = 0; i < end; i++) { GL.Vertex(cam.ViewportToWorldPoint(Vector3(linePoints[i].x, linePoints[i].y, nearClip))); GL.Vertex(cam.ViewportToWorldPoint(Vector3(linePoints[i+1].x, linePoints[i+1].y, nearClip))); } } else { GL.Begin(GL.QUADS); for (i = 0; i < end; i++) { var perpendicular = (Vector3(linePoints[i+1].y, linePoints[i].x, nearClip) - Vector3(linePoints[i].y, linePoints[i+1].x, nearClip)).normalized * thisWidth; var v1 = Vector3(linePoints[i].x, linePoints[i].y, nearClip); var v2 = Vector3(linePoints[i+1].x, linePoints[i+1].y, nearClip); GL.Vertex(cam.ViewportToWorldPoint(v1 - perpendicular)); GL.Vertex(cam.ViewportToWorldPoint(v1 + perpendicular)); GL.Vertex(cam.ViewportToWorldPoint(v2 + perpendicular)); GL.Vertex(cam.ViewportToWorldPoint(v2 - perpendicular)); } } GL.End(); }
function OnApplicationQuit () { DestroyImmediate(lineMaterial); }
Без обид, но тут никто бесплатно разбираться в этой простыне и писать за Вас скрипты не будет... А по теме советую изучить LineRenderer - это наиболее простой способ решения Вашей проблемы. X.cor.R (Prologue)
Если будут задаваться конкретные и точные вопросы, подразумевающие короткий ответ, то поможем. Но как и писал выше - разгадывать загадки и работать за дядю не будет никто, даже за туманное:
А может кто хотя бы описать этот скрипт что и куда желательно поподробнее если можно пожалуйста. Я так думаю linePoints нужно изменить на mouseposition
Добавлено (13.03.2012, 11:46) --------------------------------------------- Я ещё слышал про VectroCity но проблема моя заключается в покупки у меня только webmoney
Нет у меня Pro. Просто проблема заключается в ширине линии, что можно использовать в замен, lineRender или всё же GL.QUADS но проблема в мыши как рисовать её
Добавлено (13.03.2012, 12:54) --------------------------------------------- Мне просто нужно что то типа вот этого LoveMyHome
using UnityEngine; using System.Collections.Generic; public class example : MonoBehaviour { //структура для отрезка struct line { public Vector3 start;//начальная точка public Vector3 end;//конечная точка } public Material mat; private Vector3 mousePos; private bool startDraw;//начато ли рисование отрезка private List<line> lines;//список отрезков private line currentLine;//отрезок, который рисуем void Start() { lines = new List<line>(); startDraw = false; } void Update() { mousePos = Input.mousePosition; if (Input.GetKeyDown(KeyCode.Space) && !startDraw) { currentLine.start = new Vector3(mousePos.x / Screen.width, mousePos.y / Screen.height, 0); startDraw = true; }else if (Input.GetKeyDown(KeyCode.Space) && startDraw) { currentLine.end = new Vector3(mousePos.x / Screen.width, mousePos.y / Screen.height, 0); lines.Add(currentLine); startDraw = false; }
} void OnPostRender() { if (!mat) { Debug.LogError("Please Assign a material on the inspector"); return; } GL.PushMatrix(); mat.SetPass(0); GL.LoadOrtho(); //отрисовываем все отрезки, которые есть в списке foreach(line l in lines) { GL.Begin(GL.LINES); GL.Color(Color.red); GL.Vertex(l.start); GL.Vertex(l.end); GL.End(); } //Проверяем, начато ли рисование отрезка if(startDraw) { GL.Begin(GL.LINES); GL.Color(Color.yellow); GL.Vertex(currentLine.start); GL.Vertex(new Vector3(mousePos.x / Screen.width, mousePos.y / Screen.height, 0)); GL.End(); } GL.PopMatrix(); } }
но в unity нет функции как в openGL ширины линии. Я думаю как то вставить quads из скрипта в первом сообщении
Всем Привет! Не знаю вариант с VectorLine мне больше нравится просто потом по координатам пtреводить в 3d. Как думаете через что? Есть ешё вариант я думаю сразу создавать куб а потом расстягивать мышью. Только как??? наведите на мысли или киньти какой скрипт Скажите пожалуйста кто нибудь пользовался VectroCity(DrawLine, VectorLine). Как построить 3d по линиям или при на ведении на линию появляется другой "окно" или "дверь" как в приложении
Сообщение отредактировал Georg_Gukov - Вт, 13 Мар 2012, 17:21