Unity3D独立游戏开发日记(一):动态生成树木
目前写的独立游戏是一个沙盒类型的游戏。游戏DEMO视频如下:
提到沙盒类型的游戏,就有人给出了这样的定义:
游戏世界离现实世界越近,自由度、随机度越高才叫沙盒游戏。所谓自由度,就是你在游戏里想干啥就干啥,想开车就开车,想走路就走路。想盖房子就盖房子,没有城管来找你麻烦。那么随机度,就是每天发生的事情不能一样,做的任务也不会就一条线路可走。
在我的沙盒游戏里,地形上的树木,岩石等都是随机生成的,这样不同的人玩的地图都会不一样。当然如果最后能做到地形也随机生成那就更完美了。
下面我就讲下树木随机生成在地图上的原理。
在unity3d里要想动态生成一个GameObject,那需要使用Instantiate函数加载树木的模型组件到指定的坐标位置上。
我们的实现步骤如下:
1.在unity3d里的Assets目录下创建Prefabs文件夹,然后在其中创建Resources(重要:不然无法用代码动态加载)子文件夹,再把树木的模型预制件放入其中。

2.使用Instantiate函数动态加载树木预制件
var itemResource = Resources.Load("Tree"+i); //I是可变随机数
GameObject itemObj = Instantiate(itemResource, new Vector3(X, Y, Z), Quaternion.identity) as GameObject;
3.使用循环改变i的值,以及改变X,Y,Z的值。
要注意的是i的值范围,要和树木预制件的编号匹配。X,Y,Z的值也要控制在地图地形空间范围内。
按照这样的思路,我们很快就能随机生成树木了。但是仔细想想这样就可以了么?我们的X,Y,Z是随机的坐标值,其中Y的值是游戏世界里的高度值。如果Y的值随机出来的值过大或者过小(相对于地表高度而言),那么就悲剧了,树木不是长在天上,就是长在地底下。
怎么才能让树木刚好长在地表高度上呢?这是我们遇到的难点问题。如果有一个函数刚好能找到随机出的坐标位对应的Y轴线和地标相交接的那个点的Y的值就好了。通俗的讲,就是要获取,方位在X,Z时,地表所在的Y值。
按照这个思路我们就找到了一个函数,求指定坐标对应地面高度的函数:Terrain.activeTerrain.SampleHeight(position)。
这样我们就得到地表对应的Y的值了:Y=Terrain.activeTerrain.SampleHeight(new Vector3(X,Y,Z))。
剩下的时间就是码代码的时间了,把核心难题解决了,后面的就简单了。不过需要注意的是,如果地形不是用Terrain组件来创建的,而是用的美工模型的话,就需要使用射线(Ray)来找到射线和地标相交的点。
PS:游戏DEMO试玩群:198035671 Unity3d技术交流群:308185833 斗鱼游戏开发直播地址:www.douyutv.com/unity3d
Unity3D独立游戏开发日记(一):动态生成树木的更多相关文章
- Unity3D独立游戏开发日记(二):摆放建筑物
在沙盒游戏里,能自由建造是很重要的特点,比如说风靡全球的<我的世界>,用一个个方块就能搭建出规模宏大的世界.甚至有偏激的人说,没有自由建造,就不是一个真正的沙盒游戏.的确,沙盒游戏的魅力有 ...
- unity独立游戏开发日记2018/09/27
今天优化了下昨天的代码,并且添加了树木和其他资源的生成.还修复了接近石头后,挖掘图标不出现的bug.目前可以在unity中稳定60-70fps. 详看文章:https://www.cnblogs.co ...
- 《Unity3D/2D游戏开发从0到1(第二版本)》 书稿完结总结
前几天,个人著作<Unity3D/2D游戏开发从0到1(第二版)>经过七八个月的技术准备以及近3个月的日夜编写,在十一长假后终于完稿.今天抽出一点时间来,给广大热心小伙伴们汇报一下书籍概况 ...
- 《Unity3D/2D游戏开发从0到1》正式出版发行
<Unity3D/2D游戏开发从0到1>正式出版发行 去年个人编写的Unity书籍正式在2015年7月正式发行,现在补充介绍一下个人著作.书籍信息: 书籍的名称: <Uni ...
- 关于《Unity3D/2D游戏开发从0到1》书籍再版说明
关于<Unity3D/2D游戏开发从0到1>第一版本在2015年7月1日全国发行,累计得到不少国内高校教师.培训机构的好评.但是由于Unity官方对于技术不断的升级与版本的快速迭代,基于U ...
- Unity3D 入门 游戏开发 Unity3D portal game development
Unity3D 入门 游戏开发 Unity3D portal game development 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com ...
- Unity3D手机游戏开发
<Unity3D手机游戏开发> 基本信息 作者: 金玺曾 出版社:清华大学出版社 ISBN:9787302325550 上架时间:2013-8-7 出版日期:2013 年8月 开本:16开 ...
- unity独立游戏开发日志2018/09/22
f::很头痛之前rm做的游戏在新电脑工程打不开了...只能另起炉灶... 还不知道新游戏叫什么名...暂且叫方块世界.(素材已经授权) 首先是规划下场景和素材文件夹的建立. unity常用的文件夹有: ...
- 项目游戏开发日记 No.0x000005
14软二杨近星(2014551622) 还有一周就要交项目了, 看着周围的人也都忙碌了起来, 看着大部分人的项目都已经初具容貌, 我们团队里面也搞得人心惶惶, 一来是, 时间不多了, 还有很多事情要做 ...
随机推荐
- ASP.NET调用Web Service
1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求, ...
- SCAU巡逻的士兵
1142 巡逻的士兵 Description 有N个士兵站成一队列, 现在需要选择几个士兵派去侦察. 为了选择合适的士兵, 多次进行如下操作: 如果队列超过三个士兵, 那么去除掉所有站立位置为奇数的士 ...
- Oracle Stored Procedure demo
1.how to find invalid status stored procedure and recompile them? SELECT OBJECT_NAME , status FROM u ...
- SSIS XML source demo
以下是一个使用xml作为source的SSIS package示例: 自动生成的xsd.把两个结点merge join成一条记录. 示例XML如下: <?xml version="1. ...
- java 20 - 4 IO流概述和一个简单例子解析
IO流的分类: 流向: 输入流 读取数据 输出流 写出数据 数据类型: 字节流 字节输入流 读取数据 InputStream 字节输出流 写出数据 OutputStream 字符流 字符 ...
- Wooyun隐写术总结
之前还没有见到drops上有关于隐写术的总结,我之前对于隐写术比较有兴趣,感觉隐写术比较的好玩.所以就打算总结总结一些隐写术方面的东西.写的时候,可能会有错误的地方,请不吝赐教,谢谢. 本篇章中用到的 ...
- S2--《优化MySchool数据库设计》总结
第一章 数据库的设计 1.1 数据库设计 数据库中创建的数据库结构的种类,以及在数据实体之间建立的复杂关系是决定数据库系统效率的重要因素. 糟糕的数据库设计表现在以下两个方面: *效率低下 * ...
- S2小测--索引--视图
1. 关于Sql server 视图 视图是一个虚拟表,我们在查询视图的时候,实际上是对基础表的查询.视图不仅可以作为SELECT查询的目标,也可以作为修改语句的目 标.理论上它可以像普通的物理表一 ...
- 解决 php-cgi 启动时提示缺少 msvcr110.dll 的问题
问题描述: 启动 php-cgi 时如果提示缺少 msvcr110.dll 问题原因: 缺少 vc 2012 运行库 问题解决: 需要安装 vcredist_x64.exe 或 vcredist_ ...
- 【转】【C#】异常类 Exception 枚举所有类型的异常
一.基础 在C# 里,异常处理就是C# 为处理错误情况提供的一种机制.它为每种错误情况提供了定制的处理方式,并且把标识错误的代码与处理错误的代码分离开来. 对.NET类来说,一般的 异常类System ...