在线体验链接:
http://example.creator-star.cn/block3d/

上面图中是打砖块游戏的主要 3D 节点元素,Shawn 这两天在学习 Unity 与 Creator3D 感受到制作 3D 游戏与 2D 游戏最大的不同是 3D 游戏是在模拟一个真实世界,下面我对打砖块游戏场景中的主要 3D 节点做个简要说明。

主灯光

当我们创建场景时,引擎为会我们默认创建两个节点:灯光、摄像机。
Main Light它是一只平行灯光,模拟真实世界中的太阳,你将它放在任何位置场景效果的变化都不大,调整角度会影响3D物体的表面的光泽。

3D摄像机

Camera 摄像机所照摄的界面就是我们运行时所看到的画面。

我们这里使用的是透视视角,它像一个锥体,通过锥体能可视化地控制摄像机的参数表现:

  1. 控制锥体底部的四个点可以调节摄像机的视野;
  2. 控制底部的中心点调节摄像机的远近;
  3. 控制摄像机的position、rotation调整摄像机的位置与角度;

在【主菜单】 > 【Develop】> 【Camera Privew】可以观察到实时的摄像机画面,请看下图:

地面

ground 是用 Plane 3D 节点模拟的地面,可以通过下面菜单创建:

Plane 像一张纸,只有x、y,可以设置 Plane 的大小,不论怎么设置它的 Scale y 他在场景中的高度都不会变。

我们重点看一下地块节点和它的组件:

可以看到在 Creator 3D 中节点属性已经被精简了,只有基本的Postion、Rotation、Scale三个基本的属性(Layer属性还没了解作用)。

温馨提示:2D 节点同样如此,2D节点中的锚点、Size属性被移到名为 cc.UITransformComponent 的组件上了,color 被移到 cc.SpriteComponent 组件上,而且没有Opacity属性,由 color 属性统一接管。

3D 物理最为重要的是它的 cc.ModelComponent 组件,其中Mesh属性是控制 3D 物体的形状,比如:立方体、球体、胶囊体等,引擎内置了如下 Mesh 资源:

像"#"井号一样的图标就是 Mesh 资源了,它主要保存的是模型的顶点数据。除了 Mesh 属性,还有一个与 3D 物体表现有关的就是材质了,看下图:

这里为了实验地面不同的贴图,我这里自定一个材质资源,在资源管理器中,鼠标右键创建 Material:

从 2D 游戏开发过渡到 3D 有一个关键的点就是理解材质系统,当创建一个材质资源,看到密密麻麻的属性时,心都麻了半截:

经过 Shawn 的连蒙带猜,将 ground 地块的材质设置如下:

需要注意,这样设置的材质颜色比较暗,还要把材质属性面板拉到底部,将 Emissive 颜色属性设置为白色,地板看起来就亮了。

我之前还有一种做材质的做法,使用的是无光照的材质,比使用标准材质要简单一些:

尝试了这么多,总算是把地面材质给弄的像点样子了,下面是为地块添加碰撞组件:

在 Creator 3D 中物理引擎不需要使用代码激活,直接将 cc.BoxColliderComponent 组件挂在节点上即可,需要注意地面只需要挂上碰撞组件就行了,如果添加了物理刚体组件,地面会向下掉落,这不是我们想要的。

砖块

砖块是使用的 Cube 3D节点创建,它的 cc.ModelComponent 默认为 box.mesh 看下图:

砖块的材质需要重新定制一个,方法与前面的地面材质相同,只要我们一修改这个材质资源,场景中的所有砖块都会发生变化,这里就不在唠叨了。

下面我们为砖块添加 cc.RigidbodyComponent 组件,在节点属性面板下方点击 Add Component 按钮,看下图:

Creator 3D 目前还是预览版本,组件没分类,看起来显的有点乱,RigidBody 组件在倒数第3个,还需要再添加上 BoxCollider 在倒数第5个,节点组件属性如下:

在 RigidBody 组件上,将 Mass 设置小一点,它表示物理的质量。BoxCollider组件默认就好,IsTrigger 属性不能勾上,勾上之后物理碰撞效果就没有了,但可以用代码接收到碰撞事件。

在空中的砖块,当你运行起来发现他会自然掉落,与地面接触会产生碰撞,而这一切我们都不用编写代码哦!

小结

将砖块节点多复制一些在场景中,制作成一堵墙我们的游戏场景就差不多了,我们下次继续子弹球体的制作与创建,以及使用键盘控制摄像机移动。

感谢你的关注与阅读,欢迎你来「Creator星球游戏开发社区」公众号分享你的技术与经验,愿我们在前进的道路上砥砺前行,共同成长!

本文由博客一文多发平台 OpenWrite 发布!

最新文章

  1. 参加微软Ignite大会有感
  2. redis——学习之路五(简单的C#使用redis)
  3. (转)C#为什么要使用Invoke,它和BeginInvoke有什么区别
  4. LeetCode Moving Average from Data Stream
  5. 设置java web工程中默认访问首页的几种方式
  6. MySQL执行计划解读
  7. python pyperclip模块的使用
  8. 邮箱输入(仿gmail)
  9. EXT学习之——获取下拉框combobox的值与显示名
  10. PHP 开发社区微信服务号实战图解
  11. 安装Debian的正确方法
  12. DQS安装失败——系统重新引导是否处于挂起状态
  13. Mysql 配置主从服务自动同步功能
  14. python 时间字符串与日期转化
  15. 【ASP.NET Web API教程】4.1 ASP.NET Web API中的路由
  16. 第一个windows 小游戏 贪吃蛇
  17. WINDOWS程序设计对话框加载显示bmp图像及刷新
  18. 关于在Python下安装布隆过滤器(bloomfilter)的方法
  19. idea中xml打开方式变成file,代码变成灰色
  20. python修炼第一天

热门文章

  1. hdu-6621 K-th Closest Distance
  2. codeforces 486 D. Valid Sets(树形dp)
  3. JS数组方法整理(附使用示例)
  4. Docker详解(二)
  5. Android四大组件初识之Service
  6. FaceBook快捷登入
  7. spring boot的多环境部署
  8. Python基础(十)
  9. 三、SpringBoot 整合mybatis 多数据源以及分库分表
  10. 同步FIFO design and IP level verification