小白走上游戏开发之路(5)之完成我们的第一个小游戏

小白走上游戏开发之路(5)之完成我们的第一个小游戏

首页模拟经营游戏开发的二三事游戏更新时间:2024-06-06

今天我们将完善我们的游戏 给小球周围加挡板 和食物

创建一个空的GameObject 作为父的GameObject 重命名Walls

在创建一个Cube 一个立方体 Reset Cube的transform 重命名West Wall

修改 West Wall的transform的值 已满足我们的需求 我们也可以拖动X,YZ轴来将它固定到合适位置

右键WestWall Duplicate 在复制三个出来 上下两个我们可以把transform的 rotation的Y值改成90

我们保存场景 在运行游戏

我运行我的游戏发现我的小球还是不是按照我的按键方向来移动 所以 我又调整了一下 代码 就是要对应上

在创建一个cube 重命名Food 调整transform rotation(45.45.45) 让他悬挂在空中 45度

接下来在Assert文件夹中新建一个文件夹 Prefabs 将Food拖进去

这样Food就成为了一个Prefab

什么是prefab?

查API

大致意思就是 Prefab就是模板 就是你开始创建了一个GameObject后 设置好相关参数 在你其他地方也要用它

就可以把它做成prefab 避免重复的修改 。

然后给小球周围 拖一个方块 摆放一下位置

保存场景 运行游戏 小球现在碰到方块 方块不会消失 但是有碰撞 因为我们创建的Cube 和sphere Unity都自动给我们添加了组件collider

sphere有sphere collider

Cube有Box collider

什么是Collider?

A base class of all colliders.

碰撞器 挂了collider的组件才能够检测碰撞

新建FoodMaterial 挂在prefab下面 因为所有的方块都是prefab克隆出来的 所以改了prefab 克隆的物体也就都改变了

这就是为什么要使用prefab的方便之处

我们让方块能够有点活力

新建脚本Rotator 挂在prefab下面

运行游戏 方块开始运动了。

给方块加个标志 tag

在PlayerController脚本里添加一个函数

OnTriggerEnter什么时候调用 就是在当前GameObject与其他GameObject发生碰撞的时候调用

如果其他GameObject是food 就让food消失。

isTrigger的意思就是是否触发碰撞 因为我们的小球和地面一开始是接触的 如果我们勾了is Trigger

小球就会触发碰撞 穿透地面

我们在改变prefab时 我们必须要点下apply 不然修改是无效的

运行游戏 小球可以吃方块了,很好 。

等小球吃完方块 我们给个提示 YOU Win!

PlayerController完整代码如下:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

public class PlayerController : MonoBehaviour {

//定义一个Rigidbody对象 rb

public Rigidbody rb;

public float speed;

public int count;

public Text WinText;

// Use this for initialization

void Start ()

{

count = 0;

rb = GetComponent<Rigidbody>();

// WinText = GetComponent<Text>();

Debug.Log("调用了Start方法");

}

//Update is called once per frame

void Update()

{

float moveHorizontal = Input.GetAxis("Horizontal");

float moveVertical = Input.GetAxis("Vertical");

Debug.Log(moveVertical);

Debug.Log(moveHorizontal);

Vector3 movement = new Vector3(-moveHorizontal, 0.0f, -moveVertical);

rb.AddForce(movement * speed);

if (count == 8)

{

WinText.text = "You Win !";

}

}

void OnTriggerEnter(Collider other)

{

Debug.LogError("调用了OnTriggerEnter");

if (other.gameObject.CompareTag("food"))

{

other.gameObject.SetActive(false);

count = 1;

}

}

}

我们定义一个Text 然后定义一个变量count 小球吃一个方块 我们就把count加1 因为Update方法是每帧调用 所以我们在Update方法里面实时判断 如果count等于8就说明小球把方块吃完了。然后我们给Text负值 You Win !

有个问题就是Text这个对象实例化的问题 Unity 如果你要实例化一个对象 你直接把这个GameObject拖到对应的对象名上就可以了 。不需要你去new 了。也是很方便的。

好了 这个小游戏的雏形就完成 后面就是完善 优化了 。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved