Unity制作 小球吃金币 游戏

1. 新建一个项目

Unity制作 小球吃金币 游戏_第1张图片

2. 新建一个平面对象

Unity制作 小球吃金币 游戏_第2张图片

Unity制作 小球吃金币 游戏_第3张图片

3. 新建一个材质球

Unity制作 小球吃金币 游戏_第4张图片

为材质球设置颜色

Unity制作 小球吃金币 游戏_第5张图片

5. 将材质球拖拽赋值给平面

Unity制作 小球吃金币 游戏_第6张图片

6.  创建立方体对象,拉伸至平面宽度

Unity制作 小球吃金币 游戏_第7张图片

7. 再复制三个立方体、调整位置、添加材质,用四个调整过的立方体将平面围起来

Unity制作 小球吃金币 游戏_第8张图片

8. 创建一个球体(游戏的主角)

Unity制作 小球吃金币 游戏_第9张图片

9. 创建一个圆柱体并调整为金币形状、竖着摆放在桌面上

Unity制作 小球吃金币 游戏_第10张图片

10. 创建一个材质球,取金色,并赋值给金币

Ctrl D复制多个金币(共10个),调整位置,围绕小球布局。

Unity制作 小球吃金币 游戏_第11张图片

11. 创建一个空对象,将所有金币放到空对象中,以便统一管理(立方体也是)

Unity制作 小球吃金币 游戏_第12张图片

12. 为金币添加脚本,实现自动旋转

Unity制作 小球吃金币 游戏_第13张图片

Unity制作 小球吃金币 游戏_第14张图片

金币的自转脚本 rorate.cs(将脚本手动拖拽挂载到每一个金币上)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class rorate : MonoBehaviour
{
    void Start()
    {
    }
    void Update()
    {
        this.transform.Rotate(Vector3.right, Space.Self);//自转
    }
}

13. 为小球添加刚体组件(检查器:添加组件→Physics→Rigidbody)

Unity制作 小球吃金币 游戏_第15张图片

14. 为小球添加脚本,实现通过键盘WSAD、↑↓←→控制小球移动

此时小球碰到金币会弹开

Unity制作 小球吃金币 游戏_第16张图片

小球的移动脚本 move.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class move : MonoBehaviour
{
    Vector3 mPrevPos = Vector3.zero;
    Vector3 mPosDelta = Vector3.zero;
    // Start is called before the first frame update
    void Start()
    {
    }

    void Update()
    {
        float ws = Input.GetAxis("Vertical");  //按‘W’'S'键返回一个[-1,1]的值
        float ad = Input.GetAxis("Horizontal");  //按‘A’'D'键返回一个[-1,1]的值
        this.transform.Translate(Vector3.forward * ws * Time.deltaTime * 7, Space.World);  //前后移动
        transform.Translate(Vector3.right * ad * Time.deltaTime * 7, Space.World);  //左右移动
    }
}

15. 为每一个金币设置自定义的标签(coin),作为碰撞检测的判断条件

Unity制作 小球吃金币 游戏_第17张图片

新加自定义标签:

Unity制作 小球吃金币 游戏_第18张图片

16. 碰撞检测。为小球添加脚本实现“小球碰到金币 -> 金币消失”(即小球吃金币)功能

小球吃金币(小球碰到金币后金币消失,且层级中的金币对象也消失):

Unity制作 小球吃金币 游戏_第19张图片

 小球的碰撞检测脚本 collision.cs(拖拽挂载给小球)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class collision : MonoBehaviour
{
    private Rigidbody rd;
    public int force=5;

    void Start () {
        rd = GetComponent ();
    }
    void Update () {
        float h = Input.GetAxis ("Horizontal");
        float v = Input.GetAxis ("Vertical");
        rd.AddForce (new Vector3 (h, 0, v) * force);
    }
    //碰撞检测
    void OnCollisionEnter(Collision collision){
        if (collision.collider.tag == "coin") {
            Destroy (collision.collider.gameObject);
        }
    }
}

17. 触发检测(与16 碰撞监测二选一)

全选金币,勾选“是触发器”,即触发机制的开关

Unity制作 小球吃金币 游戏_第20张图片

添加脚本,实现小球触到金币后,金币消失,且层级中的金币也对应消失

Unity制作 小球吃金币 游戏_第21张图片

小球的触发检测脚本 trigger.cs(拖拽挂载给小球)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class trigger : MonoBehaviour
{
    private Rigidbody rd;
    public int force=5;
    void Start () {
        rd = GetComponent ();
    }
    void Update () {
        float h = Input.GetAxis ("Horizontal");
        float v = Input.GetAxis ("Vertical");
        rd.AddForce (new Vector3 (h, 0, v) * force);
    }
    //触发检测
    void OnTriggerEnter(Collider collider){
        if (collider.tag == "coin") {
            Destroy (collider.gameObject);
        }
    }
}

18. 为相机添加脚本,实现相机跟随小球

脚本参数 target赋值为小球,即跟随对象为小球

Unity制作 小球吃金币 游戏_第22张图片

 相机跟随小球:

Unity制作 小球吃金币 游戏_第23张图片

相机脚本 follow.cs(脚本拖拽挂载给相机,脚本中的变量“target”赋值为小球)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class follow : MonoBehaviour
{
    public Transform target;
    private Vector3 offset;

    void Start () {
        offset = transform.position - target.position;
    }
    
    void Update () {
        transform.position = target.position + offset;
    }
}

19. 添加实时分数文本(TextMeshPro)

Unity制作 小球吃金币 游戏_第24张图片

修改颜色、大小、初始内容。

Unity制作 小球吃金币 游戏_第25张图片

20. 完善小球collision.cs脚本实现实时修改得分

Unity制作 小球吃金币 游戏_第26张图片

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class collision : MonoBehaviour
{
    private Rigidbody rd;
    public int force=5;
    private int score_num = 0;
    public GameObject score;

    void Start () {
        rd = GetComponent ();
    }
    void Update () {
        float h = Input.GetAxis ("Horizontal");
        float v = Input.GetAxis ("Vertical");
        rd.AddForce (new Vector3 (h, 0, v) * force);
    }
    //碰撞检测
    void OnCollisionEnter(Collision collision){
        if (collision.collider.tag == "coin") {
            score_num++;
            score.GetComponent().text = "score: " + score_num.ToString ();
            Destroy (collision.collider.gameObject);
        }
    }
}

21. 添加游戏胜利文本并修改颜色、内容

Unity制作 小球吃金币 游戏_第27张图片

22. 完善小球collision.cs脚本,实现吃到10个金币时文本出现(未激活 -> 激活)

Unity制作 小球吃金币 游戏_第28张图片

修补collision.cs 代码(最终版):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class collision : MonoBehaviour
{
    private Rigidbody rd;
    public int force=5;
    private int score_num = 0;
    public GameObject score;
    public GameObject win;

    void Start () {
        rd = GetComponent ();
        win.SetActive (false);
    }
    void Update () {
        float h = Input.GetAxis ("Horizontal");
        float v = Input.GetAxis ("Vertical");
        rd.AddForce (new Vector3 (h, 0, v) * force);
    }
    //碰撞检测
    void OnCollisionEnter(Collision collision){
        if (collision.collider.tag == "coin") {
            score_num++;
            score.GetComponent().text = "score: " + score_num.ToString ();
            if (score_num == 10) {
                win.SetActive (true);
            }
            Destroy (collision.collider.gameObject);
        }
    }
}

23. 发布游戏

文件菜单栏 -> 构建和运行

选择游戏生成位置文件夹

Unity制作 小球吃金币 游戏_第29张图片

选择文件夹,片刻后发布成功

24. 运行游戏

进入游戏生成的文件夹,找到对应的exe文件,打开即可全屏进行游戏

Unity制作 小球吃金币 游戏_第30张图片

启动页

Unity制作 小球吃金币 游戏_第31张图片

游戏运行:

Unity制作 小球吃金币 游戏_第32张图片

吃掉全部金币胜利:

Unity制作 小球吃金币 游戏_第33张图片

你可能感兴趣的:(Unity,游戏)