unity官方demo学习:Roll-a-Ball
2015-05-09 18:06
375 查看
【官网地址】http://unity3d.com/learn/tutorials/projects/roll-a-ball
以下所有素材和代码来自官网。
![](https://img-blog.csdn.net/20150509170045656?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjIzNDExNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
整个例子的目的是做一个小球拾取桌面上立方体的小游戏,综合运用到了入门所需的知识,包括编辑器的使用、建模、脚本编写、材质、预设体、刚体、碰撞检测、摄像机、UI以及编译等,方便新手快速了解unity3d游戏的制作流程。
![](https://img-blog.csdn.net/20150509170922500?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjIzNDExNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
建立Scene , Scripts , Material 文件夹
场景中添加桌面、小球、灯光(勾选阴影)
给桌面和小球附上材质
![](https://img-blog.csdn.net/20150509171403831?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjIzNDExNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
给小球物体添加刚体组件
编写脚本,注意Update和FixedUpdate区别,绑定虚拟轴,挂到小球物体上,注意调整速度(其中,addforce的写法可以更简单一些)
![](https://img-blog.csdn.net/20150509171938970?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjIzNDExNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
重置摄像机的位置参数,和观察角度。
尝试将摄像机挂到小球的子节点上,发现不行,这样,小球翻滚会导致摄像机视角翻滚。
编写脚本,注意LateUpdate函数,计算摄像机到小球的相对距离向量的偏移量,然后在小球移动的过程中使得摄像机的位置加上这个偏移量,实现摄像机跟随。
![](https://img-blog.csdn.net/20150509172829948?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjIzNDExNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
用建模工具简单构建桌子的四个围边,建立一个空物体结点作为母结点便于管理
巧妙运用duplicate命令以及旋转、平移
![](https://img-blog.csdn.net/20150509173626373?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjIzNDExNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
创建一个立方体,旋转到斜立于桌面上
编写脚本挂到立方体上,控制立方体的旋转
将立方体存为预设体
调整到俯视视角,在场景中复制若干个立方体,作为采集物品,建立空物体结点作为母结点
创建材质,并未所有的立方体统一赋材质
![](https://img-blog.csdn.net/20150509173910391?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjIzNDExNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
在小球的控制脚本中添加碰撞检测逻辑,如果与采集物品碰撞,就让采集物品消失
将采集物品预设体的设置为isTrigger(分清静态和动态碰撞物体,分清刚体和网格碰撞体的区别)
给采集物体添加刚体,取消勾选isTrigger,再尝试碰撞情况
将采集物体的is kinematic勾上,再尝试
![](https://img-blog.csdn.net/20150509174917076?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjIzNDExNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
在场景目录上添加UI控件,自动出现Canvas母结点和Text控件结点
在小球的控制脚本中添加代码,关联游戏计分的字符label和最终游戏赢的字符label,注意关联场景中的控件到脚本的公共变量中。
![](https://img-blog.csdn.net/20150509175306833?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjIzNDExNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
设置build选项
编译为PC可执行文件
启动游戏测试
PlayerController.cs
Rotator.cs
一个exe加一个游戏内容文件夹
![](https://img-blog.csdn.net/20150509180209041?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjIzNDExNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
web版可执行文件,主html加一个unity3d的文件和几个js文件,离线可运行
以下所有素材和代码来自官网。
步骤
1 简介
整个例子的目的是做一个小球拾取桌面上立方体的小游戏,综合运用到了入门所需的知识,包括编辑器的使用、建模、脚本编写、材质、预设体、刚体、碰撞检测、摄像机、UI以及编译等,方便新手快速了解unity3d游戏的制作流程。
2 搭建游戏基本场景
建立Scene , Scripts , Material 文件夹
场景中添加桌面、小球、灯光(勾选阴影)
给桌面和小球附上材质
3 添加小球移动控制
给小球物体添加刚体组件
编写脚本,注意Update和FixedUpdate区别,绑定虚拟轴,挂到小球物体上,注意调整速度(其中,addforce的写法可以更简单一些)
4 设置摄像机跟踪
重置摄像机的位置参数,和观察角度。
尝试将摄像机挂到小球的子节点上,发现不行,这样,小球翻滚会导致摄像机视角翻滚。
编写脚本,注意LateUpdate函数,计算摄像机到小球的相对距离向量的偏移量,然后在小球移动的过程中使得摄像机的位置加上这个偏移量,实现摄像机跟随。
5 建立完整的游戏桌面
用建模工具简单构建桌子的四个围边,建立一个空物体结点作为母结点便于管理
巧妙运用duplicate命令以及旋转、平移
6 创建采集物品
创建一个立方体,旋转到斜立于桌面上
编写脚本挂到立方体上,控制立方体的旋转
将立方体存为预设体
调整到俯视视角,在场景中复制若干个立方体,作为采集物品,建立空物体结点作为母结点
创建材质,并未所有的立方体统一赋材质
7 建立小球采集物品逻辑
在小球的控制脚本中添加碰撞检测逻辑,如果与采集物品碰撞,就让采集物品消失
将采集物品预设体的设置为isTrigger(分清静态和动态碰撞物体,分清刚体和网格碰撞体的区别)
给采集物体添加刚体,取消勾选isTrigger,再尝试碰撞情况
将采集物体的is kinematic勾上,再尝试
8 添加游戏GUI
在场景目录上添加UI控件,自动出现Canvas母结点和Text控件结点
在小球的控制脚本中添加代码,关联游戏计分的字符label和最终游戏赢的字符label,注意关联场景中的控件到脚本的公共变量中。
9 编译工程成可执行游戏
设置build选项
编译为PC可执行文件
启动游戏测试
项目源码和生成目录
代码
CameraController.csusing UnityEngine; using System.Collections; public class CameraController : MonoBehaviour { public GameObject player; private Vector3 offset; // Use this for initialization void Start () { offset = transform.position; } // Update is called once per frame void Update () { transform.position = player.transform.position + offset; } }
PlayerController.cs
using UnityEngine; using System.Collections; public class PlayerController : MonoBehaviour { public float speed; public GUIText countText; public GUIText winText; private int count; void Start() { count = 0; SetCountText (); } void FixedUpdate() { float moveHorizontal = Input.GetAxis("Horizontal"); float moveVertical = Input.GetAxis("Vertical"); Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical); rigidbody.AddForce (movement * speed * Time.deltaTime); } void OnTriggerEnter(Collider other) { if (other.gameObject.tag == "PickUp") { other.gameObject.SetActive(false); count = count+1; SetCountText(); } } void SetCountText() { countText.text = "Count: " + count.ToString (); if (count >= 12) { winText.text = "YOU WIN!"; } } }
Rotator.cs
using UnityEngine; using System.Collections; public class Rotator : MonoBehaviour { // Update is called once per frame void Update () { transform.Rotate (new Vector3 (15, 30, 45) * Time.deltaTime); } }
生成文件
win32可执行文件一个exe加一个游戏内容文件夹
web版可执行文件,主html加一个unity3d的文件和几个js文件,离线可运行
相关文章推荐
- Unity官方实例教程 Roll-a-Ball 学习笔记
- Unity官方实例教程 Roll-a-Ball 学习笔记(一)+(二)
- Unity官方实例教程 Roll-a-Ball(二)
- Unity官方实例教程 Roll-a-Ball
- Unity官方教程Roll-a-ball (一)
- unity官方demo学习之Stealth(五)游戏控制器
- unity官方demo学习之Stealth(十三)摄像机跟踪
- Unity2017官方案例Roll_Ball 浅析学习
- unity官方demo学习:Survival Shooter
- unity官方demo学习之Stealth(一)
- unity官方demo学习之Stealth(十九)敌人动画控制
- Unity2d官方demo:2D Platformer学习
- unity官方demo学习之Stealth(二十三)敌人射击功能
- unity官方demo学习之Stealth(十四)钥匙卡设定
- unity官方demo学习之Stealth(六)CCTV监控摄像机
- unity官方demo学习之Stealth(八)角色初步设定
- unity官方demo学习之Stealth(二十)敌人视听范围
- unity官方demo学习之Stealth(二)警报灯设定
- unity官方demo学习之Stealth(七)激光门
- unity官方demo学习之Stealth(九)角色动画控制器