IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity 3D学习(三)——打砖块 -> 正文阅读

[游戏开发]Unity 3D学习(三)——打砖块

本讲进行Unity的第二个案例练习,预计10个小时,会同时更新博客。熟悉Unity的一些简单操作。

1 搭建环境

1.1 设计地面

1

首先,创建20x20一个平面,平面Plane默认是10x10的,所以平面Scale的x和z轴的值设为2
2
接着,为地面添加材料和颜色
3

1.2 设计墙体和砖块

4
设计的墙体和砖块如上图所示。砖块采用预制体设计(Ctrl+D可以复制物体),Ctrl+鼠标左键可以控制物体进行步移(Edit ->Grid and Snap Settings可以设置步移距离)
5
砖块可以建立一个空物体作为父物体,方便管理
6

2 相机移动(第一人称视角移动)

相机应该能够根据方向键的按下进行移动。

2.1 初始化位置

相机的初始位置应该正对砖块墙
7

2.2 位置更新策略

相机的水平移动(Horizontal)沿 x 轴方向,垂直移动(Vertical)沿 y 轴方向

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

public class Movement : MonoBehaviour
{
    //设置相机的移动速度
    public int speed = 1;
    // Update is called once per frame
    void Update()//每一帧执行一次,每一帧执行时间与硬件有关
    {
        //接收水平方向(x轴)的输入,输入量为浮点型数据,大小为[-1,1]
        float h = Input.GetAxis("Horizontal");//左右移动[-1,1]
        float v = Input.GetAxis("Vertical");//上下移动[-1,1]
        //相机位置更新
        //Debug.Log(Time.deltaTime);//每一帧的时间
        //Debug.Log(1 / Time.deltaTime);//FPS 帧率 frame per second
        //位置变换
        transform.Translate(new Vector3(h, v, 0)*speed*Time.deltaTime);//v=1m/s
    }
    private void FixedUpdate()//每秒执行次数是固定的,也就是说帧率固定,默认为50 FPS,可以进行修改
    {
        Debug.Log("FPS:"+1 / Time.deltaTime);
    }
}

3 创建子弹(小球)

我们希望创建的小球初始位置与相机位置重合,并且沿 z 轴方向以一定的初始速度射出
子弹的创建采用预制体实例化的方式,子弹预制体采用红色Sphere设计
8

4 游戏程序设计

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

public class Shoot : MonoBehaviour
{
    public GameObject bulletPrefab;//定义一个游戏物体,与子弹预制体相联系
    public int speed = 30;
    public Text countText;//定义一个计数文字
    public Text winText;//定义游戏胜利文字
    private int count=0;//定义一个整数型变量,用来记录射出子弹的数量
    private bool isGameOver = false;//定义一个bool类型变量,判断游戏是否胜利
    GameObject[] bricks = new GameObject[66];//初始化一个游戏物体数组,用来存放找到的砖块
    Transform[] Ts = new Transform[66];//初始化一个Transform数组,用来存放砖块的Transform属性数组
    // Start is called before the first frame update
    void Start()
    {
        bricks = GameObject.FindGameObjectsWithTag("Brick");//通过标签查找所有的砖块物体
        for (int i = 0; i < 66; i++)
        {
            Ts[i]=bricks[i].GetComponent<Transform>();//存储砖块的Transform属性
        }
    }

    // Update is called once per frame
    void Update()
    {
        //通过鼠标左键,创建子弹(小球),并发射
        //Input.GetMouseButtonDown(0);//返回一个bool类型的值,0代表鼠标左键,1代表鼠标右键
        if (Input.GetMouseButtonDown(0))
        {
            //根据Prefab创建实例 = 实例化Prefab = 克隆
            //创建子弹,位置和方向与相机保持一致
            //GameObject.Instantiate(bulletPrefab,transform.position,transform.rotation);
            GameObject bullet=GameObject.Instantiate(bulletPrefab, transform.position, transform.rotation);
            Rigidbody rd = bullet.GetComponent<Rigidbody>();//得到子弹的刚体属性
            //施加力
            //rd.AddForce(Vector3.forward*10000);
            //施加速度
            rd.velocity = Vector3.forward*speed;//为子弹施加一个向前的速度(沿 z 轴方向)
            count++;//记录射出的子弹的数量
            countText.text = "消耗子弹数:" + count;//显示射出的子弹数量
        }
        int brickCount = 0;//记录还停留在平面上的砖块的数量
        for (int i = 0; i < 66; i++)
        {
            if (Ts[i].position.y > -6)
            {
                brickCount++;
            }
        }
        if (brickCount == 0)//如果平面上没有砖块存在,游戏胜利
            isGameOver = true;
        if(isGameOver == true)
        {
            winText.text = "Win the Game!\nYour score is:" + count;//游戏胜利后,输出游戏胜利UI文字
        }   
    }
}

5 游戏整体展示

9
本次的打砖块游戏主要涉及到预制体设计、步移移动、键盘控制、鼠标左键点击控制、位置变化、标签搜索、文字UI设计等相关的Unity知识

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-01-29 23:24:16  更:2022-01-29 23:25:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 18:40:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码