2. 创建下图所示的脚本文件,并将其拖拽到MainCamera对象下
3. 打开步骤2创建的脚本文件,编辑代码如下图所示。
using UnityEngine
using System.Collections
public class DrawLines : MonoBehaviour
{
public Material lineMat
public GameObject mainPoint
public GameObject[] points
//public void set
void DrawConnectingLines()
{
if (mainPoint &&points.Length >0)
{
// Loop through each point to connect to the mainPoint
foreach (GameObject point in points)
{
Vector3 mainPointPos = mainPoint.transform.position
Vector3 pointPos = point.transform.position
GL.Begin(GL.LINES)
lineMat.SetPass(0)
GL.Color(new Color(lineMat.color.r, lineMat.color.g, lineMat.color.b, lineMat.color.a))
GL.Vertex3(mainPointPos.x, mainPointPos.y, mainPointPos.z)
GL.Vertex3(pointPos.x, pointPos.y, pointPos.z)
GL.End()
}
}
}
void OnPostRender()
{
if (points.Length == 0)
return
DrawConnectingLines()
}
}
4. 在场景中创建如下图所示的球体作为测试
5. 为mainSphere球体创建材质并赋值给它,如下图所示。选中【MainSphere】->【MeshRender】->【Materials】
6. 同步骤5为其他的球添加材质如下图所示,LineMaterial设置如下。
7. 选中【MainCamera】下的脚本,为其变量赋值,如下图所示。
8. 运行结果如下图所示。源码下载地址见注意事项
第一步:给物体加rigidbody第二部:创建一个emptyObject,拖入你的模型下面,并添加boxcollider,调整其属性,让box包围你的模型(如果一个boxcollider不够,还可以多建几个,总之让它尽可能的正好包围你的模型)
第三部:运行,调整就ok了
unity3d 中的碰撞时通过碰撞盒来检测的
不能用插件,也不能用LineRender,那我暂时只能想到这个两种方法了,但是个人还是推荐前面这俩个,比较方便。1 用Cylinder弄成很细的那种做成预设物,需要显示的时候调出来,然后自己用代码调整位置缩放朝向就可以当做3D的线段来用,我个人用这个做过类似指示方向的东西,算是简单粗暴。
2 用GL方法,在摄像机上面挂载脚本,然后写OnPostRender()画线,貌似屏幕坐标和世界坐标需要换一下,所以要复杂一点了(有点像OpenGL的那种写法,我个人也只是泛泛了解)。
额外,如果你只是调试,Debug.DrawLine()还是很有用的。
GL示例
void GLdemo()
{
GL.PushMatrix()//保存当前Matirx
GL.LoadPixelMatrix()//设置pixelMatrix
GL.Begin(GL.LINES)
mat.SetPass(0)//mat是一个材质,注意shader的选择,否则颜色无效
GL.Color(Color.magenta)
GL.Vertex3(0, 0, 0)
GL.Vertex3(Screen.width, Screen.height, 0)
GL.End()
GL.PopMatrix()//读取之前的Matrix
}
void OnPostRender()
{
GLdemo ()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)