Unity基础系列(二)——构建一个视图(可视化数学)

本文是Unity基础系列教程的一部分,主要介绍如何使用Unity创建视图来展示数学函数,包括创建Prefab、实例化立方体、自定义Shader以及实现视图动画,以展示数学方法和公式。通过实例化立方体来呈现函数图形,通过自定义Shader实现颜色变化,并通过Update方法更新点的位置以实现动态视图。
摘要由CSDN通过智能技术生成

点击蓝字关注我们吧!

目录

1 创建一排立方体

1.1 预制体

1.2 视图组件

1.3 实例化组件

1.4 代码循环

1.5 简化语法

1.6 改变域

1.7 把向量挪出循环

1.8 用X来定义Y

2 创建更多的立方体

2.1 定义分辨率

2.2 变量实例化

2.3 设置父节点

3 给视图上色

3.1 创建自定义Shader

3.2 基于世界坐标来上色

4 给视图配置动画

4.1 保持追踪点

4.2 更新点

4.3 显示正弦波

本篇内容概括:

1、创建一个prefab

2、实例化一排立方体

3、展示一个数学方法

4、创建一个自定义的Shader

5、让视图动起来

在本章教程中,我们将使用游戏对象来构建一个图形,这样我们就可以把数学公式用图像展示出来。然后再把函数和时间关联起来,从而产生一个运动的图像。

本教程假设您已经完成了“游戏对象和脚本”相关教程,对Unity有了基础的了解,并且Unity的版本至少要在2017.1。

(使用一排立方体来展示 正弦 波)

1 创建一排立方体

在编程的时候,充分地理解数学是非常非常有必要的事情。

从最基础的层次理解,数学就是操作一堆表示数字的符号。比如,解一个方程可以理解为重写一组符号,这样它就变成了另一组符号集(一般来说会比原始的简单)。而数学的规则决定了如何对它们进行重写。

比如我们有一个函数 f(x)=x+1 ,我们可以用一个数字来代替x,比如说3。这就会产生f(3)=3+1=4的结果。

我们提供了3作为输入,并在最后以4作为输出。我们可以说函数映射了 3到4,写这个的一个更短的方法是把它们作为一个输入-输出对,比如(3,4)。我们可以创建许多对形式(x,f(X))。例如(5,6)和(8,9)和(1,2)和(6,7)等等。但是,当我们按输入编号排序对时,会更容易理解该函数,例如:(1,2)和(2,3)和(3,4)等。

函数f(X)=x+1f(X)=x+1很容易理解。但

就比较难了。当然可以和之前一样写下一些输入-输出对,但这样的方式不能让我们很好地掌握它所代表的映射究竟是什么。如果要做到轻松的理解,就需要非常非常多的点,紧密排列在一起,但这无疑会导致巨量的数据,不但难以列举还难以分析。

相反,我们可以将对解释为形式[x,f(X)]的二维坐标。这是一个2D向量,上面的数字代表水平坐标,在X轴上,底部的数字代表Y轴上的垂直坐标。换句话说,y=f(X)。然后在一个坐标轴的表面上画出这些点。只要有足够多的点,就会得到一条线。这个结果是一个视图(graph)。

(用视图表示 x在(-2,2)的区间)

查看一个视图可以让我们快速了解一个函数是如何工作的。既然这么方便的话,那么我们就看下如何在Unity里创建吧。

通过File / New Scene启动一个新场景,或者使用新项目的默认场景。

1.1 预制体

视图是通过在适当的坐标处放置点来创建的。

要做到这一点的话,就需要把每个点的变成三维可视化的。我们将简单地使用Unity默认立方体的游戏对象。

在场景中添加一个立方体,并移除其碰撞组件,因为这个示例中不会使用到物理。

我们会使用脚本来创建这个立方体的诸多实例并正确定位它们。要做到这一点的话,就需要把这些立方图做成模板。把立方体从层次结构窗口(hierarchy window)拖到项目窗口(project window)中。

这会创建一个新的Asset,一个具有蓝色立方体图标,我们称为预制体。它是一个预先制作好的游戏对象,存在于项目中,但不在场景中。

(一个立方体的预制件)

预制体(Prefabs )是配置游戏对象的一种方便的方法。如果你更改了预置体资源,那么它在任何场景中的所有实例都会以相同的方式进行变更。例如,更改预制体的Scale会改变仍然在场景中的立方体的Scale。

但是要注意的是,每个实例只会使用自己的位置和旋转。也就是说,预制体不会统一修改场景示例对象的位置和旋转。此外,游戏对象也可以修改相关属性,并覆盖预置值。而如果进行了很大的更改,比如添加或删除了组件,则Prefab和实例之间的关系将被打破,需要重新保存或者应用修改。

这个章节,我们会使用脚本来创建预制体的实例,因此我们不再需要当前场景中的立方体实例。所以可以删除它了。

1.2 视图组件

我们需要一个C#脚本来生成我们的视图,所以创建一个并将其命名为Graph。从一个简单的扩展MonoBehaviour的类开始,这样它就可以成为game objects对象的组件。给它设置一个公共字段来保存预置体文件的引用,以便一会用来创建视图上的“点”,命名为pointPrefab。由于我们需要访问Transform组件来定位这些点,所以要使其成为字段的类型。

将一个空的游戏对象添加到场景中,通过GameObject/Create Empty,并将其放置在原点,命名为Graph。通拖动或通过其Add Component按钮将Graph组件添加到此对象。然后将预置体文件拖到Graph的PointPrefab字段上。现在它保存了对预置Transform组件的引用。

(视图对象和引用的Prefab)

1.3 实例化组件

实例化游戏对象是通过Instantiate方法完成的。

这是Unity Object类型的一个可公开使用的方法,它通过扩展MonoBehaviour间接继承。Instantiate方法会克隆作为参数提供的任何Unity类型的Object。在针对预制体的时候,它会实例一个对象并添加到当前场景中。我们就在Graph组件Awake时,去实例化。

(实例化的Prefab)

点击Play之后,会将在原点生成一个立方体,不过,前提是预置体的原始位置设置的就为零。要将这一点放到其他地方,就需要调整实例后的位置。

实例化方法为我们提供了对它创建的任何内容的引用。因此,我们给它创建一个 Transform 组件的临时变量来持有函数的返回值。

现在我们可以通过给它分配3D向量来调整点的位置。如我们在上一篇教程中中调整时钟指针的Local rotation 一样,但这次我

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值