您的位置:首页 > 移动开发 > Unity3D

unity官方demo学习:Roll-a-Ball

2015-05-09 18:06 375 查看
【官网地址】http://unity3d.com/learn/tutorials/projects/roll-a-ball

以下所有素材和代码来自官网。

步骤

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.cs
using 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文件,离线可运行

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: