效果

场景搭建

创建一个空物体,并将其命名为 “GameManager”,并【Reset】它

创建一个 “Sphere”,并将其【Scale】设置为(0.1,0.1,0.1)

创建一个 “Cube”,并将其【Scale】设置为(0.1,0.1,0.1)

创建一个 “Material”,并将其命名为 “line”,设置其颜色为黑色,并把它拖到【Cube】上



把 Sphere 和 Cube 拖到事先创建好的 “Prefabs” 文件夹中使其变成一个【预制体】,然后把场景中的物体删除

把 “DrawCurve” 脚本拖拽到 “GameManager” 物体上,并把两个预制体拖到相应的变量槽上

源码

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class DrawCurve : MonoBehaviour
{
// 余弦函数曲线的方块
[SerializeField] private GameObject spherePrefab;
// 坐标轴的方块
[SerializeField] private GameObject linePrefab; [SerializeField] private float k = 5f;
private float x = 0f;
private float y = 0f; private float posX = 0f;
private float posY = 0f; private ArrayList list = new ArrayList();
private int destroyIndex = 0; void Start()
{
// 纵坐标
for (int i = 0; i < 100;i++ )
{
GameObject obj = Instantiate(linePrefab, transform.position, Quaternion.identity);
obj.transform.position = new Vector3(0, posY, 1f);
posY += 0.1f;
}
// 横坐标
for (int i = 0; i < 100; i++)
{
GameObject obj = Instantiate(linePrefab, transform.position, Quaternion.identity);
obj.transform.position = new Vector3(posX, 0, 1f);
posX += 0.1f;
} } void Update()
{
if (Input.GetKey(KeyCode.A))
{
// 计算位置
x += 0.1f;
y = Mathf.Sin(x);
// y = Mathf.Cos(x);
// y = Mathf.Tan(x);
// y = k / x; // 生成【cube】并且设置它们的位置
GameObject obj = Instantiate(spherePrefab, transform.position, Quaternion.identity);
obj.transform.position = new Vector3(x, y, 0);
// 把生成的【cube】存储到动态数组中,并用一个变量记录最后一个【cube】的下标
list.Add(obj);
destroyIndex = list.Count - 1;
}
if (Input.GetKey(KeyCode.D))
{
// 防止数组下标越界
if (destroyIndex >= 0)
{
// 从动态数组中拿到要销毁的【cube】
GameObject obj = (GameObject)list[destroyIndex]; // 把删除的【cube】的坐标值赋值给 x 和 y
// 当按下 A键 的时候,会继续沿着删除的【cube】的位置画下去
// x 位置后面减去【0.1f】是因为把最后删除的【cube】的 x坐标值 赋值给生成的【cube】时
// 第 46 行代码在计算的时候会加上0.1f,就是在最后删除的【cube】的x位置上加0.1f
// 最后得到的就不是最后删除的【cube】的x坐标
x = obj.transform.position.x - 0.1f;
// 销毁【cube】
Destroy(obj);
// 从动态数组中移除【cube】对象,令数组的长度减一
list.RemoveAt(destroyIndex--);
}
}
}
}

用【Unity】中的【3D Object】画【数学函数】图形 —— 正弦函数... { }的更多相关文章

  1. Python 绘制你想要的数学函数图形

    Python 非常热门,但除非工作需要没有刻意去了解更多,直到有个函数图要绘制,想起了它.结果发现,完全用不着明白什么是编程,就可以使用它完成很多数学函数图的绘制. 通过以下两个步骤,就可以进行数学函 ...

  2. 关于Unity中的3D拾取

    3D拾取 3D游戏实际上看到的是2D画面,我们在屏幕上点击,想要找到哪个3D物体,我们实际上是在一个2维平面内做3D拾取. 3D拾取实际上是,当玩家点击屏幕的时候,会从显示屏幕的摄像头发射一条射线,射 ...

  3. 使用代码给Unity中的动画片段绑定回调函数

    在制作动作游戏的时候,需要播放许多动画,同时还有个需求,那就是动画播放到一定时间时,给一个回调函数,好做对应的状态变更, 我查了一下,发现如果使用的是unity自带的动画系统,要做到这样的话,需要这样 ...

  4. Tip8:Unity中诸如 Awake() Start() Update()等函数的 执行顺序

    Unity脚本中有很多的事件函数,下面是各种函数的执行顺序: 1.reset(); 2.Awake(); 3.OnEnable; 4.OnLevelWasLoaded(); 5.Start(); 6. ...

  5. 小小知识点(三十五)MATLAB中如何更改所画Figure的图形比例

    1. 打开一个figure,show plot tools and dock figure 2.选择图形的 more properties 3. 选择aspect ratio中的plotboxaspe ...

  6. unity中三种调用其他脚本函数的方法

    第一种,被调用脚本函数为static类型,调用时直接用  脚本名.函数名()第二种,GameObject.Find("脚本所在的物体的名字").SendMessage(" ...

  7. 浅谈unity中gamma空间和线性空间

    转载请标明出处:http://www.cnblogs.com/zblade/ 一.概述 很久没有写文章了,今天写一篇对gamma空间和线性空间的个人理解总结,在查阅和学习了各个资料后,算是一个个人笔记 ...

  8. 游戏的物理和数学:Unity中的弹道和移动目标提前量计算

    下载地址:https://www.jianguoyun.com/p/DZPN6ocQ2siRBhihnx8 弹道计算是游戏里常见的问题,其中关于击中移动目标的自动计算提前量的话题,看似简单,其实还是挺 ...

  9. 3D语音天气球(源码分享)——在Unity中使用Android语音服务

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 这个项目准备分四部分介绍: 一:创建可旋转的"3D球":3 ...

  10. Unity UGUI和特效(含粒子系统和3D Object)之间层级问题

    撰写本文时使用Unity的版本为2017.4.10f1(64bit) 1.描述问题 需求:通过UGUI制作一个界面之后,我需要在界面的后面跟前面各添加一个特效. 问题:同一层级UI是最后渲染的,所以U ...

随机推荐

  1. zabbix监控apache80端口

    1.修改zabbix_agentd.conf 修改# EnableRemoteCommands=0 -->去掉注释修改为1--> EnableRemoteCommands=1 ###允许客 ...

  2. 搭建uipath

    我对windows也不太熟,也是第一次安装Uipath Orchestrator,希望有问题指出一起交流,可以留言,Uipath中文qq交流群:4656303241. 下载镜像 windows ser ...

  3. JDBC:获取自增长键值的序号

    1.改变的地方  实践: package com.dgd.test; import java.io.FileInputStream; import java.io.FileNotFoundExcept ...

  4. IO流思维导图

    IO思维导图总结 总览: 1.文件 <目标:File类的创建和删除的方法 > public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时, 创建一个 ...

  5. 要想不踩SaaS那些坑,得先了解“SaaS架构”

    摘要:围绕当下许多企业青睐的SaaS应用开发,华为云开发者技术服务工程师程泽在DTT首期带来主题为 <SaaS云原生应用典型架构> 的DTT首期直播分享. 本文分享自华为云社区<DT ...

  6. 5-8 Resource 静态资源服务器

    静态资源服务器 什么是静态资源服务器 我们无论做什么项目,都会有一些页面中需要显示的静态资源,例如图片,视频文档等 我们一般会创建一个单独的项目,这个项目中保存静态资源 其他项目可以通过我们保存资源的 ...

  7. ETL工具 Flume (一)

    分布式日志采集系统Flume学习 一.Flume架构 1.1 Hadoop业务开发流程 1.2 Flume概述 flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统. 支持在日志系统 ...

  8. gdb调试器在windows下的相关内容

    1.gdb调试器在visual studio或dev c++中也有类似的调试图形化可视界面,但是gdb不同的是它是由命令行组成,他的界面对于习惯图形化可视界面的用户来说一时间会不知所措 2.通过gcc ...

  9. 1269: 求最长上升子序列(LIS)

     题目描述: LIS问题(longest increasing subsequence),即:最长上升子序列问题,是动态规划中一个比较经典的问题.具体描述为:一个有n个整数的序列:A[1],A[2], ...

  10. python获取本机的安装所有应用( Windows)

    Windows获取本机的安装所有应用 采用操作注册表的方式,理论上其他可通过操作注册表方式的动作均可 import winreg def get_window_software(hive, flag) ...