Unity入门:小球吃金币游戏实操体验

Unity新手,下载好Hub和编辑器,新建一个3D项目进行一个简单的小游戏制作


目录

创建地面和小球

添加脚本,用键盘控制小球移动

相机跟随小球移动

设置可旋转金币

实现小球吃金币效果

显示分数

发布游戏

创建地面和小球

如图,在Hierarchy窗口中创建游戏地面,将其命名为Ground。随后在Inspector窗口的Transform右侧选择Reset命令,地面对象放置在原点。

可以选择地板材质,在Project窗口中新建文件夹名为Materials,再Materials文件中新建材质,并将材质文件rename为Ground。

修改Ground颜色后,点击左键将材质拖拽到Hierarchy中Ground,如图。

同样,新建小球,命名为Player,设置位置为原点。

将小球拖拽至地面上方

为小球添加一个重力,即设置为刚体组件,Inspector窗口最下方Add component中添加Rigidbody组件。(刚体是Unity中用来模拟游戏对象的物理特性的组件,可以让游戏对象具有物理属性,如质量、速度、力和角速度等。添加刚体组件后,游戏对象会立即响应重力,同时也可以受到碰撞的影响)

添加之后可以试运行一下,点击上方播放可以看到效果。

添加脚本,用键盘控制小球移动

先新建一个Scripts文件夹便于管理脚本文件

为小球添加脚本:在小球Player的Inspector中最下方Add搜索Player创建脚本。

双击Player脚本文件便可进入编辑模式

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

public class Player : MonoBehaviour
{
    // Start is called before the first frame update
    private Rigidbody rd;//定义刚体对象
    public int force = 5;
    void Start()
    {
        rd = GetComponent<Rigidbody>();//取得小球刚体
    }

    // Update is called once per frame
    void Update()
    {
        float h = Input.GetAxis("Horizontal");//获取键盘水平输入
        float v = Input.GetAxis("Vertical");//获取键盘垂直输入
        rd.AddForce(new Vector3(h, 0, v) * force);//小球施加X轴正向的力,*force控制速度
    }
}

定义public force后可在窗口中直接修改速度

增加游戏地面面积,如下图,将X,Z方向都扩大一倍

相机跟随小球移动

为Main Camera增加一个follow脚本,定义小球位置信息

    public Transform playerTransform;//记录小球位置信息

将小球和相机绑定

取得小球位置信息后,添加代码实现相机跟随小球移动

设置可旋转金币

创建地面的边墙,可以运行一下,小球容易滚出边界。

创建一个Cube,调整位置大小。

复制粘贴,创造另外三面墙体。

将四个Cube拖动到Ground对象上形成父子关系。

创建Cube,命名为Pickup,移动Cube在地面上,调整位置大小

新建材质名为Pickup,修改为金色,拖动到Cube上

因需要创造多个金币,可以在Project新建文件夹Prefabs,存储预制体,将已有Cube左键拖到该,文件夹中,再将文件夹中的Pickup对象拖到舞台上,调整好高度,Ctrl+D复制多个,分别调整好位置。新建一个空物体,将所有金币统一放在空物体下。

调整金币时修改为Global模式更方便

新建pickup脚本,拖到Prefabs下的Pickup即可,其他复制金币也获得同样效果

    void Update()
    {
        transform.Rotate(new Vector3(0, 1, 0));//绕y轴旋转
    }
}

播放运行所有小球都可以正常旋转。

实现小球吃金币效果

点击Project窗口下Prefabs中的Pickup,找到tag,选择Add Tag,添加后在下拉菜单中再次选择。

实现小球碰撞金币后消失,打开Player脚本修改代码。

    private void OnCollisionEnter(Collision collision)//碰撞检测函数
    {
        if(collision.collider.tag == "Pickup")
        {
            Destroy(collision.collider.gameObject);
        }
    }
显示分数

在Player中调整代码

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

public class Player : MonoBehaviour
{
    // Start is called before the first frame update
    private Rigidbody rd;//定义刚体对象
    public int force = 5;
    private int score = 0;
    void Start()
    {
        rd = GetComponent<Rigidbody>();//取得小球刚体
    }

    // Update is called once per frame
    void Update()
    {
        float h = Input.GetAxis("Horizontal");//获取键盘水平输入
        float v = Input.GetAxis("Vertical");//获取键盘垂直输入
        rd.AddForce(new Vector3(h, 0, v) * force);//小球施加X轴正向的力,*force控制速度
    }
    private void OnCollisionEnter(Collision collision)//碰撞检测函数
    {
        if(collision.collider.tag == "Pickup")
        {
            score++;
            Destroy(collision.collider.gameObject);
        }
    }
}

添加Text,转成2D显示,在Rect Transform中选择左上角方框,调整Text位置,修改文字内容。

在Player中增加代码

using UnityEngine.UI;

    public Text text;

在Player中将Text对象拖入

在碰撞函数中增加一行

    private void OnCollisionEnter(Collision collision)//碰撞检测函数
    {
        if(collision.collider.tag == "Pickup")
        {
            score++;
            text.text = score.ToString();
            Destroy(collision.collider.gameObject);
        }
    }

运行一下

发布游戏

就可以试玩了。

基本操作就是这些了,可以再自行拓展其他功能,例如音效天空盒开始结束场景等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值