这个是一个比较简单的入门小项目,简单记录一下步骤和知识点。
整体概览
1.游戏界面
2.游戏玩法:目标小球吃掉所有的小方块,则游戏胜利
创建工程
在Assets目录下新建Materials、Prefabs、Scenes、Scripts文件夹,用于分别存放材质、模型、场景和脚本文件
添加素材
使用UI中的Plane作为整个地面板,3D Object中的Sphere作为玩家控制的小球,3D Object中的Cube作为围墙、被捕食的小方块
1.材质 Material
类似于包装或者说是喷漆,作为在目标物体外层样式。
最简单的使用方法是右击、Create一个Material,修改Main Maps下的Albedo属性,更换颜色。
将材质拖放到对于物体下,即可生效。
2.素材 Prefab
相当于一个模板,需要用的时候之间拖放到场景当中。好处是,修改模板物体的属性,由该模板生成的所有物体的属性就统一修改了,比较方便。
3.场景 Scene
一个游戏可能由多个不同的场景组成,按需要在各场景切换。
4.视角
每个游戏物体都有一个自己的视角(Local)和全局视角(Global),在界面左上角可以进行切换。
添加功能
1.控制小球运动
首先给球(Player)添加一个Component:RigidBody(刚体)。RigidBody的作用是可以模拟物理的特性,例如运动、重力等。
创建C#脚本Player.cs,挂到小球Player下,在脚本中获取这个RigidBody组件,并控制其运动。
// 作用力的大小(设置为public可以显示在组件属性栏中)
public float force = 5;
// Use this for initialization
void Start () {
rd = GetComponent<Rigidbody>(); // 得到绑定脚本的当前物体上的刚体组件
}
// Update is called once per frame
void Update () {
float h = Input.GetAxis("Horizontal"); // 获取键盘输入,范围[-1,1],A左D右
float v = Input.GetAxis("Vertical");
rd.AddForce(new Vector3(h,0,v) * force); // 给刚体施加外力,控制移动
}
然后可以再Unity中,给小球自定义外力大小。
2.检测小球与方块的碰撞
此处有两种方法:碰撞检测、触发检测。
碰撞检测具有物理效果,物理无法进入触发器内部;出发检测反之。
首先,小球和方块都必须有collider组件,如图
其中的Is Trigger属性,勾选表示使用触发检测,不勾选则使用碰撞检测。
然后再C#脚本Player.cs种添加代码:
// 碰撞检测
void OnCollisionEnter(Collision collision)
{
// collision.collider 可以获取碰撞到当前目标的游戏物体的Collider组件
//string name = collision.collider.name;
//print(name); // 控制台输出游戏物体名称
if (collision.collider.tag == "Pickup")
{
Destroy(collision.collider.gameObject); // 销毁目标物体
}
}
// 触发检测 (区别:无物理效果,物体可以进入触发器内部;例如人物进入到某一块地区后,门自动打开)
void OnTriggerEnter(Collider collider)
{
if (collider.tag == "Pickup")
{
Destroy(collider.gameObject); // 销毁被碰撞的物体
}
}
3.统计分数
新建UI->Text,用于显示分数;再建一个显示You Win。
在脚本Player.cs中动态控制该文本物体。
// 只需要控制该Text物体的Text组件
public Text scoreText;
// 需要控制整个游戏物体
public GameObject winText;
// 修改触发检测部分的代码
void OnTriggerEnter(Collider collider)
{
if (collider.tag == "Pickup")
{
score++;
scoreText.text = score.ToString(); // 显示分数
Destroy(collider.gameObject); // 销毁被碰撞的物体
if (score == 8)
{
winText.SetActive(true); // **物体,使之显示出来
}
}
}
在Unity中Player物体下,关联一下代码变量和Unity物体:
4.给小方块添加自转效果
新建C#脚本PickUp.cs并挂到Pickup小方块模板下。
// transform返回挂载此组件的物体的位置
void Update () {
transform.Rotate(new Vector3(0, 1, 0)); // 旋转当前组件,绕y轴
}
5.设置游戏视角跟随小球
原理:设置相机和小球之间的相对位置不变。
新建C#脚本FollowTarget并挂到Camera物体下。
public Transform playerTransform; // 用来获取主角位置
private Vector3 offset; // 偏移量
void Start () {
// transform.position 获取调用脚本的当前游戏组件位置,此处camera使用了脚本,返回camera位置
offset = transform.position - playerTransform.position;
}
void Update () {
// 设置相机位置,与主体组件相对位置保持不变
transform.position = playerTransform.position + offset;
}
打包发布游戏
在Unity中选择File->Build Settings,拖入要发布的Scene,选择发布的平台:
点击Build完成游戏发布,发布后的文件目录如下: