Unity3d 实现用LineRenderer画线 不依赖摄像机位置
发布时间:2020-12-13 20:05:52 所属栏目:百科 来源:网络整理
导读:Unity3d 实现用LineRenderer画线 不依赖摄像机位置 用LineRenderer画线难点: 鼠标坐标和屏幕坐标之间的转换 我是弄了很多天才弄好的 跟大家分享一下 using UnityEngine;using System.Collections;using System.Collections.Generic;public class DrawLine:
|
Unity3d 实现用LineRenderer画线 不依赖摄像机位置 用LineRenderer画线难点: 鼠标坐标和屏幕坐标之间的转换 我是弄了很多天才弄好的 跟大家分享一下 using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class DrawLine: MonoBehaviour {
private Event e;
private int pointCnt = 0;
public Color c1 = Color.red;
public Color c2 = Color.blue;
public GameObject obj;
private LineRenderer lineRenderer;
private LineRenderer[] lineRendArray;
private Color[] color;
public int maxLine = 5;
private int index = 0;
private bool flag = true;
// 画线坐标之间的转换 20120330-------------
private Vector3 screenPoint;
private Vector3 scanPos;
private Vector3 offset;
// 20120330-----------------------------------
void Start () {
e = Event.current;
scanPos = obj.transform.position;
lineRenderer = (LineRenderer)obj.GetComponent("LineRenderer");
// lineRenderer = (LineRenderer)gameObject.AddComponent("LineRenderer");
lineRenderer.material = new Material (Shader.Find("Particles/Additive"));
lineRenderer.SetColors(c1,c2);
lineRenderer.SetWidth(0.02F,0.02F);
lineRenderer.SetVertexCount(0);
lineRendArray = new LineRenderer[maxLine];
color = new Color[8];
color[0] = Color.yellow;
color[1] = Color.blue;
color[2] = Color.cyan;
color[3] = Color.gray;
color[4] = Color.green;
color[5] = Color.grey;
color[6] = Color.magenta;
color[7] = Color.red;
}
void Update()
{
if(e != null){
if (e.type == EventType.MouseDown){
//////////////20120330---------------------
////坐标之间的转换
Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
print("new mouse point: "+mousePos);
screenPoint = Camera.main.WorldToScreenPoint(scanPos);
offset = scanPos - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,screenPoint.z));
Vector3 curScreenPoint = new Vector3(Input.mousePosition.x,screenPoint.z);
Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint); // +offset;
//////////////20120330-----------------------
if(index < maxLine){
if(flag){
GameObject newObj;
newObj = (GameObject)Instantiate(obj,obj.transform.position,obj.transform.rotation);
lineRenderer = (LineRenderer)newObj.GetComponent("LineRenderer");
int n = Random.Range(1,8);
c1 = color[n-1];
n = Random.Range(1,8);
c2 = color[n-1];
lineRenderer.SetColors(c1,c2);
lineRenderer.SetWidth(0.02F,0.02F);
lineRendArray[index] = lineRenderer;
}
}
else{
index = 0;
flag = false;
}
pointCnt = 0;
DrawRenderLine(lineRendArray[index],curPosition);
index++;
}
if (e.type == EventType.MouseDrag){
////// 20120330---------------------------
Vector3 curScreenPoint = new Vector3(Input.mousePosition.x,screenPoint.z);
print("curScreenPoint: "+curScreenPoint);
Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint);// + offset;
////// 20120330-----------------------------
if (index == 0)
DrawRenderLine(lineRendArray[index],curPosition);
else
DrawRenderLine(lineRendArray[index-1],curPosition);
}
if (e.type == EventType.MouseUp){
}
}
}
void OnGUI () {
e = Event.current;
}
void DrawRenderLine(LineRenderer line,Vector3 vect3){
Vector3 newPos = vect3;
line.SetVertexCount(++pointCnt);
line.SetPosition(pointCnt-1,newPos);
print("new point: "+newPos);
}
} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c – Qt:当主窗口被模态QDialog阻塞时,如何关注从主窗口创
- 用React实现一个最最最简单的TodoList
- 前端优化感想以及[译]redux 教程 第一部分(共四部分
- Flutter进阶—简单平台插件实例
- c# – 如何使用Entity Framework修剪字符串?
- FlexViewer的Config中配置离线google地图的瓦片
- ruby-on-rails – Capistrano 3 Sprockets 3 Rails 4.2.1将
- cocos2d-x-3.10 之Mac系统Xcode环境搭建教程
- Cocos2d-JS____CocosDenshion引擎
- Oracle11g RAC下真的要关闭DRM
