UnityVR--组件3--Line Renderer--线性渲染

news2024/11/18 20:25:40

目录

前言

Line Renderer组件介绍

Trail Renderer组件介绍

 使用Line Renderer绘制线段

使用系统工具或自定义工具绘制线段

Trail Renderer简单制作子弹拖尾效果


前言

  Line Renderer线性渲染组件用于在3D中渲染线段,如之前在小游戏中做过的激光门伤害,以及VR手柄上用到了Line Renderer。

  Trail Renderer拖尾渲染器也是用于渲染线段,用于给物体增加一个体现高速运动拖尾特效。

  本篇主要记录使用Line Renderer、Trail Renderer组件和API,使用它们绘制线段的方法,并且自建一个工具集合存储这些实用工具,以便在后续开发中随时使用。

Line Renderer组件介绍

  Line Renderer是一个用顶点去控制渲染尺寸和位置的线条,其中顶点的个数和坐标也是可以控制的。官方的Line Renderer组件介绍可以看Line Renderer component - Unity 手册 (unity3d.com)

  其中,较常用的选项有width、Materials等,其他的设置一般都使用脚本控制。

  width控制线条的宽度,可以设置多个节点让线条各处不等宽。

    

   Materials控制线条材质,不加则只会显示粉色。当然这项也能在脚本中更改。

  

   Line Renderer常用的API有:

  positionCount:设置线段的点的数量;

  SetPosition(int index, Vector3[] position):添加点的位置(点的下标,点的位置);

  startWidth,endWidth:起点和终点的宽度;

  material.Color:射线材质颜色

Trail Renderer组件介绍

  Trail Renderer组件与Line Renderer组件非常类似,是可以挂在在某个物体上,让它产生拖尾的效果。一般宽度可以设置为前面宽,后面窄,更加有高速的感觉:

  

   其他的设置可以参照官方文档:Trail Renderer component - Unity 手册 (unity3d.com),且可以在脚本中使用API方法来设定。拖尾的效果如下图显示:

 使用Line Renderer绘制线段

  建立一个工具包Tools.cs,设置为静态Statics类,代码如下:

//静态工具类
public static class Tools
{
    //使用LineRenderer绘制线段,方法1(新建线段)
    public static LineRenderer DrawLine(Transform transform, Vector3 start, Vector3 end, Color color = default(Color),
        float width = 0.1f)
    {//DrawLine(设置父物体,线段起点,终点,颜色,宽度)
        GameObject gameObject = new GameObject();  //在场内新建一个物体
        gameObject.transform.SetParent(transform); //把这个物体方在父物体下面
        gameObject.name = "Line";                  //给物体命名
        LineRenderer line = gameObject.AddComponent<LineRenderer>();  //挂上LineRenderer组件
        line.useWorldSpace = true;  //线段设置为世界坐标
        line.material = Resload.Instance.LoadAsset<Material>("line");  //从Resource下加载名为line的材质
        line.SetVertexCount(2);  //设置顶点数量,2个,起点、终点
        line.SetWidth(width, width);  //设置第一个顶点的宽度、第二个顶点宽度
        line.material.SetColor("_Color", color);   //这个颜色是材质的颜色,是Material类中的一个属性
                                                   //这里修改的是Resource文件夹下line材质的颜色属性
        line.startColor = color;  //设置开始颜色和结束颜色
        line.endColor = color;    //可以有一个渐变的效果,当然也可以一致
        line.SetPosition(0, start);//设置起点和终点的位置
        line.SetPosition(1, end);
        return line;
    }

    //使用LineRenderer绘制线段,方法2(对已有线段修改)
    public static LineRenderer DrawLine(Transform transform, LineRenderer line,Vector3 start,Vector3 end, Color color=default(Color), float width = 0.1f)
    {//DrawLine(设置父物体,提供一个线段供修改,线段起点,终点,颜色,宽度)
        if(line==null)
        {//先判断是否已有一个线段,如果没有,则用方法2新建一个
            return DrawLine(transform,start, end, color,width);
        }
        //如果线段已存在,就按照下面的设置修改线段属性,与方法1设置方法相同
        line.useWorldSpace = false;  
        line.SetVertexCount(2);  
        line.SetWidth(width, width);  
        line.material.SetColor("_Color", color);  
        line.startColor = color;  
        line.endColor = color;    
        line.SetPosition(0, start);
        line.SetPosition(1, end);
        return line;
    }

}

  这里设置了2各绘制线段的方法,第一个方法是新建一个线段,包括在场内新建对象和挂载 Line Renderer组件,第二个方法是对已经挂载 Line Renderer组件的对象进行修改。如果有需要设置更复杂的线段,还可以定义得更加详细一些。

使用系统工具或自定义工具绘制线段

  在场内新建一个空节点line,并挂载一个脚本line.cs(名字随意)。不过这个line节点的位置会对之后绘制的线段有影响,因为线段是作为它的子节点的。line.cs的脚本只要在Start()中如下

void Start()
    {
        //使用Unity自带的Debug划线工具
        Debug.DrawLine(transform.position,transform.position+transform.forward*10,Color.green,100);
        Debug.DrawRay(transform.position, transform.forward, Color.red, 100);

        //使用Tools工具集划线段
        Tools.DrawLine(transform, transform.position, transform.position + transform.forward * 10, Color.blue, 0.1f);        
    }

  这里先尝试使用Unity自带的划线工具Debug.DrawLine。它的定义如下,传的参数比较少。

public static void DrawLine(Vector3 start, Vector3 end, Color color, float duration){}

  * 注: 使用静态(static)类、静态方法、静态变量时,只有在调取类时才能调用到它(Tools.DrawLine()),而不是new对象后,通过“对象.方法”来调用了。

  运行结果如下:

Trail Renderer简单制作子弹拖尾效果

  之前做过的子弹预制体上,直接AddComponent,加上Trail Renderer组件,根据需要简单设置一下颜色、宽度、阴影等参数,达到如下效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/554439.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Axure设计—动态条形图(中继器)

本文将教大家如何用AXURE中的中继器动态条形图。 一、效果介绍 如图&#xff1a; 预览地址&#xff1a;https://i7x7i9.axshare.com 下载地址&#xff1a;https://download.csdn.net/download/weixin_43516258/87807039?spm1001.2014.3001.5503 二、功能介绍 简单填写中继…

PyQt5桌面应用开发(17):类结构+QWebEngineView

本文目录 PyQt5桌面应用系列PyQt5学习PyQt5类结构和帮助速查实现与解释最终界面和完整源代码界面完整的代码 总结 PyQt5桌面应用系列 PyQt5桌面应用开发&#xff08;1&#xff09;&#xff1a;需求分析 PyQt5桌面应用开发&#xff08;2&#xff09;&#xff1a;事件循环 PyQt5桌…

Spring 如何处理请求参数和表单数据

当我们开发 Web 应用程序时&#xff0c;处理请求参数和表单数据是必不可少的。Spring MVC 是一个流行的 Java Web 框架&#xff0c;提供了多种方式来处理请求参数和表单数据。本文将介绍 Spring MVC 中处理请求参数和表单数据的常用方式&#xff0c;并提供相应的代码示例。 处…

Redis数据结构-SDS

一、SDS&#xff08;Simple Dynamic String&#xff0c;简单动态字符串&#xff09; Redis没有使用C语言传统的字符串表示方式&#xff08;以’\0’结尾的字符数组&#xff09;&#xff0c;而是自己实现了sds的抽象类型&#xff0c;Redis默认使用sds作为字符串的表示。 set ms…

新视野(2023.5.5-2023.5.12)

一、知识&#xff1a; 媒体账号买卖网站 A5新媒体交易&#xff1a;https://xmt.a5.net/ 新媒虎:https://www.xinmeihu.com/ 二、资讯&#xff1a; GPT最大的竞争对手Claude宣布支持100K的上下文&#xff01;基本上一本中篇小说都能塞进去了&#xff0c;你再不需要ChatPDF这种…

【框架源码】手写Spring框架IOC容器核心流程

要是想要了解Spring IOC底层&#xff0c;首先我们就得先了解什么是IOC。 IOC就是控制反转&#xff0c;把对象创建和对象之间的调用过程交给Spring进行管理。 使用IOC目的就是之前我们创建对象的方式都是用new的方式创建&#xff0c;这个方式有个缺点&#xff0c;被创建对象的…

【halcon资料】取出区域的轮廓上所有转折点

一、说明 在区域运算的时候&#xff0c;有时候需要用图形的顶点来描述&#xff0c;比如&#xff0c;两个图中对象需要对齐&#xff0c;或者仿射变换&#xff0c;于是特征点是需要提取的。本文给出一个提取顶点的示例。 二、算子 1.1 get_region_polygon算子 &#xff08;1&a…

2023互联网Java面试真题1000道(附答案)

前言 2023 跳槽不迷茫&#xff0c;大家可以先收藏再看&#xff0c;后续跳槽都能用上的&#xff01; Java程序员绝大部分工作的时间都是增删改查&#xff0c;很多人觉得这项工作没什么技术含量&#xff0c;任何一件事情都要站在不同的角度去考虑&#xff0c;对于大部分的java程序…

拼多多新阶段,透露出不寻常

一个企业的特质&#xff0c;往往由这个企业的领导人所决定。 企业文化本质上就是领导人文化&#xff0c;领导人的风格会决定这个企业当下的现状。一个成功的大企业&#xff0c;往往需要不同的领导人来接替完成其发展使命。 在创业期&#xff0c;企业领导人需要的是勇气、执行…

统计一个数的二进制中1的个数(三种方法)

那么好了好了&#xff0c;宝子们&#xff0c;今天给大家分享一篇经典例题的三种实现方法&#xff0c;来吧&#xff0c;开始整活&#xff01;⛳️ 一、基础法 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int number_of_one(int n) {int count 0;while(n){if…

一文读懂selenium自动化测试(基于Python)

前言 我们今天来聊聊selenium自动化测试&#xff0c;我们都知道selenium是一款web自动化测试的工具&#xff0c;它应该如何去运用呢?我们接着看下去。 ​1、Selenium简介&#xff1a; 1.1 Selenium&#xff1a; Selenium是一款主要用于Web应用程序自动化测试的工具集合。Sele…

gcc-arm-none-eabi-10.3-2021.10-src.tar.bz2 的编译环境搭建

文章目录 gcc-arm-none-eabi-10.3-2021.10-src.tar.bz2 的编译环境搭建概述实验END gcc-arm-none-eabi-10.3-2021.10-src.tar.bz2 的编译环境搭建 概述 正在迁移Smoothieware_best-for-pnp到MCUXPresso的失败实验中徘徊. 将Smoothieware_best-for-pnp升级到和MCUXPresso相同的…

LeetCode:26. 删除有序数组中的重复项

26. 删除有序数组中的重复项 1&#xff09;题目2&#xff09;代码3&#xff09;结果 1&#xff09;题目 给你一个 升序排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应…

可以写进简历的软件测试项目(银行/金融/电商/商城......)

目录 一、引言 二、测试任务 三、测试进度 四、测试资源 五、测试策略 六、测试完成标准 七、风险和约束 八、问题严重程度描述和响应时间规范 九、测试的主要角色和职责 ​有需要实战项目的评论区留言吧&#xff01; 软件测试是使用人工或者自动的手段来运行或者测定…

赛效:如何制作gif动态图

将一张静态图转为动态图的好处是增强照片的表现力和吸引力&#xff0c;通过动态效果和音效等元素来传达更加生动和直观的信息&#xff0c;更容易吸引人们的注意力和兴趣。此外&#xff0c;动态图还可以增强视觉效果&#xff0c;使得图片更加生动和有趣&#xff0c;更容易被人们…

C++系列之类与对象(下)

&#x1f497; &#x1f497; 博客:小怡同学 &#x1f497; &#x1f497; 个人简介:编程小萌新 &#x1f497; &#x1f497; 如果博客对大家有用的话&#xff0c;请点赞关注再收藏 &#x1f31e; 插入和输出流 //流插入不能写成成员函数&#xff0c;因为Date对象默认占用了第…

浅谈人工智能

人工智能的概念和现状 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是指通过计算机程序和算法来模拟人类智能&#xff0c;包括学习、推理、感知、语言理解、图像识别等方面。自20世纪50年代以来&#xff0c;人工智能领域的研究取得了巨大的进展…

ChatGPT模型大战:讯飞星火认知大模型、百度文心一言能否击败GPT-4(含个人内测体验测试邀请码获取方法,2小时申请成功,亲测有效)

目录 前言讯飞星火内测申请申请方式内测体验登录界面 百度内测申请内测对比基本问答事实性问答科普文写作小红书文案项目计划撰写古文理解模型的常识能力和反事实推理代码理解法律相关广告话术数字排序数值计算推理解题跨语言能力文生图 总结个人感受一、你有使用过这种对话式A…

MySQL无法启动服务--NET HELPMSG 3534

一、问题综述 安装完MySQL&#xff0c;使用 net start mysql 时&#xff0c;出现无法启动服务 二、解决思路 1. 查看一下错误日志 出现了问题&#xff0c;第一步先查看一下错误日志&#xff0c;使用 mysqld --console 打印错误信息&#xff0c;发现是 Failed to find valid …

H264: [ RTP传H264裸流 ] > 如何传(关注点:H264部分)

RTP传h264裸流, 如何传: 可能有几种情况: 1 一帧传一个NALU(NALU很小) 2 一帧传几个NALU(几个NALU很小)[STAP-A] 3 一帧连一个NALU都传不完(一个NALU很大)[FU-A] 如何解决这些问题?? 单一NALU模式:一帧传一个NALU [rtp帧头] [nalu header] [多媒体数据] 一帧传几个NAL…