unity几种画线(网格)方式使用

这篇具有很好参考价值的文章主要介绍了unity几种画线(网格)方式使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、GL划线

这是调用低级别的图形库划线,效率较高,需要放在OnPostRender()函数,并将代码挂载到相机上,下面代码画了一个正方形

using System.Collections.Generic;
using UnityEngine;

public class GLSquare : MonoBehaviour
{
    //网格材质
    public Material LineMat;//随意指定一个材质就行
    //网格颜色
    public Color MeshColor;
    //网格线坐标存储
    List<Vector3[]> m_linePoints = new List<Vector3[]>();

    void Start()
    {
        initPoints();
        //修改网格材质颜色
        LineMat.SetColor("_Color", MeshColor);
    }

    //一个10*10的,单位大小为1网格
    void initPoints()
    {
        for(int i = -5; i <= 5; i++)
        {
            Vector3[] rows = new Vector3[2];
            rows[0] = new Vector3(-5, 0, i);
            rows[1] = new Vector3(5, 0, i);
            m_linePoints.Add(rows);
            Vector3[] clos = new Vector3[2];
            clos[0] = new Vector3(i, 0, 5);
            clos[1] = new Vector3(i, 0, -5);
            m_linePoints.Add(clos);
        }
    }

    /// <summary>
    /// 照相机完成场景渲染后调用
    /// </summary>
    void OnPostRender()
    {
        //线条材质
        LineMat.SetPass(0);
        GL.PushMatrix();
        //线条颜色,当前材质下,该方式修改颜色无效,详情可以看官方文档
        //GL.Color(MeshColor);
        //绘制线条
        GL.Begin(GL.LINES);

        //所有线条 (两点一条线)
        for (int i = 0; i < m_linePoints.Count; i++)
        {
            GL.Vertex(m_linePoints[i][0]);
            GL.Vertex(m_linePoints[i][1]);
        }
        GL.End();
        GL.PopMatrix();
    }
}

unity 画线,unity,游戏引擎

注意:代码必须挂载到相机上,而已画线只能在Game视图中显示,Scene视图不显示
具体GL参数详情,可查看官方GL相关文档

2、用Debug.DrawLine()来划线

unity 画线,unity,游戏引擎
比较简单,多用于调试,其中duration参数特别重要,控制线显示的时间,不设置,则存在一帧
利用上个实例中的点,划线核心代码为:

 void Start()
    {
        initPoints();
        //画网格
        for (int i = 0; i < m_linePoints.Count; i++)
        {
            //duration参数特别重要,控制线显示的时间,不设置,则存在一帧
            Debug.DrawLine(m_linePoints[i][0], m_linePoints[i][1], Color.green, 100, true);
        }
            
    }

这个代码随意挂载在哪个对象上都可
unity 画线,unity,游戏引擎
注意:显示在Scene视图,Game视图若开启了Gizmos,也能显示
具体Debug参数详情,可查看官方Debug相关文档

3、用Gizmos.DrawLine ()来划线

这种方式划线代码需要放在OnDrawGizmos 或 OnDrawGizmosSelected 函数中

 void OnDrawGizmos()
    {
        Gizmos.color = Color.blue;
        //画网格
        for (int i = 0; i < m_linePoints.Count; i++)
        {
            Gizmos.DrawLine(m_linePoints[i][0], m_linePoints[i][1]);
        }
    }

这个代码随意挂载在哪个对象上都可
unity 画线,unity,游戏引擎
注意:显示在Scene视图,Game视图若开启了Gizmos,也能显示
具体Gizmos参数详情,可查看官方Gizmos相关文档

4、用LineRenderer组件来划线

线渲染器用于在 3D 空间中绘制自由浮动的线,比较灵活,可以调节连接线的开始、截止宽度变化、颜色变化等,用在3d空间做连接线,运动轨迹等,但这个组件的线是一堆连续点的数组,顺序相连,类似于一笔画,其实不太适合用来画网格。
unity 画线,unity,游戏引擎
若要用它来画网格可以考虑如下思路:
unity 画线,unity,游戏引擎
unity 画线,unity,游戏引擎
类似这种一笔连画应该可以实现。这个组件主要还是用于画多样变化的线条比较好。
下面用LineRenderer实现运动轨迹代码(wasd键控制立方体运动,生成对应轨迹):
unity 画线,unity,游戏引擎
代码见上传项目。项目git连接
更多LineRenderer需要了解相关官方文档参数

备注:这篇lineRenderer动态划线好像不错,没具体看,记录下文章来源地址https://www.toymoban.com/news/detail-614264.html

到了这里,关于unity几种画线(网格)方式使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [游戏开发]Unity随机网格中空位置_二叉树

    在做个小游戏,需要随机在网格的空位置上生成方块,在随机的时候,感觉简单随机的方式效率很低而且不稳定。就在想有没有比较快的方式能够随机到想要的位置。最后是用二叉树记录下权重并进行随机,很稳定而且效率还不错。所以写个文章记录一下,以供参考。 在一个

    2024年02月12日
    浏览(53)
  • 【Unity天空盒的制作及使用】使用HDR图或六面图制作天空盒及天空盒的几种使用方式

    前言 Unity工程中每次打开工程映入眼帘的蓝灰过渡的画面就是Unity默认的 天空盒

    2024年02月16日
    浏览(74)
  • 游戏中模型动画的几种实现方式

    游戏内动画的实现方式一般有这几种: 骨骼动画 顶点动画 材质动画 CPU蒙皮动画 骨骼动画是一种基于骨骼系统的动画技术,它通过对骨骼进行变换来控制模型的姿态和动作。 在骨骼动画中,模型通常被分解成多个部分,每个部分都与一个或多个骨骼相连,通过对骨骼进行旋

    2024年02月05日
    浏览(61)
  • 23. Unity - 3D游戏开发小计02 --- 动画结束UI、导航网格代理、场景搭建插件(ProGrids,ProBuilder,Polybrush)

    1. 动画结束UI 一个游戏在通过后,都是需要一个界面显示当前游戏已经结束,即需要给游戏添加一个结束的界面,可以做一个简单的游戏结束界面,用一个图片展示: 首先在 层级窗口 添加两层UI中的Image,其中第一层的Image仅作背景,可将其填充颜色设置为纯黑色,第二层的

    2024年02月05日
    浏览(52)
  • 十八、Unity游戏引擎入门

    1、下载     首先需要下载Unity Hub,下载网址:https://unity.com/cn。     然后在其中下载Unity编辑器并安装,可选择最新版本。     接着需要选择适合的开发环境,例如Android Studio或Xcode,以便进行手机游戏开发。在安装完Unity后,需要根据项目需求下载对应的模块和插件,例

    2024年02月16日
    浏览(73)
  • 【图文详解】Unity存储游戏数据的几种方法

    在Unity中,常用的数据存储方法包括PlayerPrefs、ScriptableObject、JSON、XML和数据库等。 PlayerPrefs是Unity自带的一种简单的键值存储系统,适合存储一些简单的游戏数据。ScriptableObject是一种Unity类,可用于创建可序列化的对象并存储数据。JSON和XML是轻量级的数据交换格式,可以通过

    2023年04月08日
    浏览(48)
  • 【用unity实现100个游戏之4】手搓一个网格放置功能,及装修建造种植功能(2d3d通用,附源码)

    参考原视频链接 【视频】:https://www.youtube.com/watch?v=l0emsAHIBjU 注意 :本文为学习笔记记录,推荐支持原作者,去看原视频自己手敲代码理解更加深入

    2024年02月13日
    浏览(40)
  • Unity解析JSON的几种方式

    1.使用JsonUtility(Unity自带)解析数据 踩坑 2.使用Newtonsoft.Json dll解析json 链接: link 3.使用LitJson解析数据 4.传递给前端或后端 json

    2024年02月16日
    浏览(51)
  • Unity——数据存储的几种方式

    PlayerPrefs适合用于 存储简单的键值对数据 存储的数据会在游戏关闭后依然保持,并且可以在不同场景之间共享,适合用于需要在游戏不同场景之间传递和保持的数据。 它利用key-value的方式将数据保存到本地,跟字典类似。然后通过代码进行保存、读取、更新操作。值得注意

    2024年02月03日
    浏览(44)
  • Unity物体移动的几种方式

    主要是Vector3的内置函数以及CharacterController的Move 还有一个固定的每帧进行移动的操作

    2024年02月12日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包