Unity的学习(二):打砖块

一、新建项目

在这里插入图片描述

创建成功后,进入了如下界面。
在这里插入图片描述

二、场景的设计

在Hierarchy中鼠标右键创建Plane(地面)游戏物体,将其Transform组件重置,并将游戏物体重命名为Ground,如下图所示。
在这里插入图片描述

调整地面的大小。
在这里插入图片描述

在Assets下创建文件夹Materials,并在其中创建Ground的Material(材质)并在Ground(地面)游戏物体上设置材质。如下图所示。(Smoothness为光滑度)
在这里插入图片描述

三、创建砖块和砖块的prefab(预制体)

右键创建Cube,并给该游戏物体添加Rigidbody(刚体)组件,然后创建在Assets下创建Prefabs文件夹,将Cube拖入到Prefabs文件夹下将Cube游戏物体设置为prefab(预制体)。如下图所示。
在这里插入图片描述

Rigidbody:当游戏物体添加了刚体组件,会有物理效果,如重力。
prefab:预制体,相当于模板,当修改预制体时,由此prefab生成的实例也会进行相同的变化。

四、创建墙

通过预制体来创建墙,在Unity中距离的单位为米,而Cube的长度为1,即是1米,当移动时,我们可以按住ctrl键然后通过按住箭头来移动固定的距离。创建墙如下图所示。
在这里插入图片描述

五、创建子弹

通过预制体来创建子弹的实例,因为子弹会有很多个,所以需要用到预制体,并且通过代码来控制子弹的生成。创建子弹如下图所示。
在这里插入图片描述

六、创建C#脚本

在Assets下创建Scripts文件夹,并且创建命名为Shoot的C#脚本文件,然后将脚本文件拖入Main Camera作为一个脚本组件。如下图所示。
在这里插入图片描述

七、子弹的生成

打开Shoot脚本,并定义一个属性public GameObject bullet;,保存,回到Unity,可以看到Main Camera游戏物体中的脚本组件出现了变化,这时可以将Prefabs中的Sphera预制体拖入其中,给其赋值。具体如下图所示。
在这里插入图片描述

在Shoot的Update方法中加入实例化代码用于控制子弹的生成。

// 每帧调用一次
    void Update() {
        //Input.GetMouseButtonDown(0):鼠标左键按下
        if (Input.GetMouseButtonDown(0)) {
            //transform:当前脚本所在游戏物体的transform组件
            //transform.position:这里取得的是当前游戏物体(Camera)的位置
            //transform.rotation:当前游戏物体的旋转角度
            GameObject.Instantiate(bullet, transform.position, transform.rotation);//生成bullet实例
        }
    }

此时运行,点击左键,观察Hierarchy发现,有Sphere实例生成。如下图所示。但是观察Game视图发现,子弹并没有发射出去。
在这里插入图片描述

八、给子弹生成初速度,使其能够发射出去。

我们可以通过Rigidbody(刚体)来给子弹施加速度,这样就可以发射了。
在这里插入图片描述
在Shoot中定义一个属性public float speed=5;
并在Update方法中获取Rigidbody组件,并赋予向前的速度。

//获得Rigidbody(刚体)
Rigidbody rgd = b.GetComponent<Rigidbody>();
//给其赋一个向前的初速度
rgd.velocity = transform.forward * speed;

这时我们运行下看看效果,如下图所示。
在这里插入图片描述
通过运行,我们发现,相机的距离过近需要调整相机距离,并且子弹发射出去进行了翻滚,我们可以通过锁定它的y轴来让它不进行翻滚。如下图所示。
在这里插入图片描述

九、控制相机的上下左右移动

创建C#脚本Movement,并将其挂载到Main Camera上。如下图所示。
在这里插入图片描述

在Movement脚本中添加属性public float speed = 3;
并且在Update方法中添加上下左右移动代码

void Update() {
        //获取左右键的按下
        float h = Input.GetAxis("Horizontal");

        //获取上下键的按下
        float v = Input.GetAxis("Vertical");
        //移动
        //Time.deltaTime:时间修正值
        transform.Translate(new Vector3(h, v, 0) * Time.deltaTime * speed);
    }

十、运行

对子弹速度进行一个调整。
在这里插入图片描述

运行效果如下图所示。
在这里插入图片描述

十一、代码

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

public class Shoot : MonoBehaviour {

    public GameObject bullet;

    public float speed = 5;

    // 在第一帧更新之前调用Start
    void Start() {
        
    }

    // 每帧调用一次
    void Update() {
        //Input.GetMouseButtonDown(0):鼠标左键按下
        if (Input.GetMouseButtonDown(0)) {
            //transform:当前脚本所在游戏物体的transform组件
            //transform.position:这里取得的是当前游戏物体(Camera)的位置
            //transform.rotation:当前游戏物体的旋转角度
            GameObject b=GameObject.Instantiate(bullet, transform.position, transform.rotation);//生成bullet实例

            //获得Rigidbody(刚体)
            Rigidbody rgd = b.GetComponent<Rigidbody>();
            //给其赋一个向前的初速度
            rgd.velocity = transform.forward * speed;
        }
    }
}

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

public class Movement : MonoBehaviour {

    public float speed = 3;

    // Start is called before the first frame update
    void Start() {

    }

    // Update is called once per frame
    void Update() {
        //获取左右键的按下
        float h = Input.GetAxis("Horizontal");

        //获取上下键的按下
        float v = Input.GetAxis("Vertical");
        //移动
        //Time.deltaTime:时间修正值
        transform.Translate(new Vector3(h, v, 0) * Time.deltaTime * speed);
    }
}

热门文章

暂无图片
编程学习 ·

java 中的反射技术

java代码 @SpringBootTest(classes = {ShujiegouApplication.class}) @RunWith(SpringJUnit4ClassRunner.class) public class FansheTest {@Testpublic void test1() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {SysColumn sysColumn …
暂无图片
编程学习 ·

【Flutter 实战】简约而不简单的计算器

老孟导读:这是 【Flutter 实战】组件系列文章的最后一篇,其他组件地址:http://laomengit.com/guide/widgets/Text.html,接下来将会讲解动画系列,关注老孟,精彩不断。先看一下效果:大家学习UI编程语言时喜欢用哪个 App 当作第一个练手的项目呢?,我喜欢使用 计算器 ,可…
暂无图片
编程学习 ·

面向对象(二)- java

面向对象(二) 一、封装 封装使得对代码的修改更加安全和容易。将代码分成了一个个相对独立的单元。 封装所带来的好处是:明确的指出了那些属性和方法是外部可以访问的。这样当你需要调整这个类的代码时,只要 保证公有(Public:)属性不变,公有方法的参数和返回值类型不变,那…
暂无图片
编程学习 ·

期末复习、化学反应工程科目(第四章)

@Author:Runsen @Date:2020/7/1人生最重要的不是所站的位置,而是内心所朝的方向。只要我在每篇博文中写得自己体会,修炼身心;在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰难,奋勇前行,不忘初心,砥砺前行,人生定会有所收获,不留遗憾 (作者:Runsen )作者介…
暂无图片
编程学习 ·

python编程练习(小甲鱼)第6-10课

1.python中有两种除法运算,一种是真除,一种是floor除法,/ 是真除,保留浮点数,//是floor除法,去除浮点数保留整数 a = 30/4 #7.5 b = 30//4 #72.请写一个程序打印出 0~100 所有的奇数 for i in range(101):if i % 2==1:print(i)3.爱因斯坦曾出过这样一道有趣的数学题:有一…
暂无图片
编程学习 ·

centos下安装nginx

1,环境介绍 本文安装nginx版本为1.12.2 系统版本为centos6.9 2,软件下载 链接:https://pan.baidu.com/s/1RVhCS1-WcXXaGlnAVQPH-g 提取码:od5x 3,安装nginx 1,编译安装需要安装一些兼容包 yum install pcre-devel openssl-devel gcc-c++ htop iotop iftop nmap nc telnet…
暂无图片
编程学习 ·

Python中%r和%s的相同点和不同点

1、在处理布尔型或者数字型时,二者是没有区别的 (1)数字型 I am %r years old%22#%r ‘I am 22 years old’ I am %s years old%22#%s‘I am 22 years old’ This building is %r m tall%22.35#%r‘This building is 22.35 m tall’ This building is %s m tall%22.35#%s‘Thi…
暂无图片
编程学习 ·

Xavier初始化和He初始化

转自https://blog.csdn.net/xxy0118/article/details/84333635Xavier初始化: 条件:正向传播时,激活值的方差保持不变;反向传播时,关于状态值的梯度的方差保持不变。初始化方法:W∼U[−6√ni+ni+1√,6√ni+ni+1√] W∼U[−ni​+ni+1​​6​​,ni​+ni+1​​6​​]假设激活函…
暂无图片
编程学习 ·

二叉搜索树与双向链表

题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 package hk;import java.util.ArrayList;public class Solution {public TreeNode Convert(TreeNode pRootOfTree) {if (pRootOfTree==null){r…
暂无图片
编程学习 ·

通过小项目学习23种设计模式(四)

通过读取文件导入数据库功能学习23种设计模式 第一次重构代码 目前代码写的很随性,导致以后业务增加时拓展起来繁杂,所以我们将已有逻辑进行第一重构: 抽取公共的行为生成接口 package com.xiaoma.fileimport.common;/*** 任务主执行类* 使用工厂模式,首先将任务共同行为抽象出…
暂无图片
编程学习 ·

free_spirit(在栈上爆破一个可以被free的fake_chunk)

free_spirit(在栈上爆破一个可以被free的fake_chunk)首先检查一下程序的保护机制然后,我们用IDA分析一下,功能3存在8字节溢出,将会把v7下面的buf指针覆盖掉,而覆盖了buf指针,就能实现任意地址写。那么,我们劫持函数栈返回地址为one_gadget即可,为了绕过结尾对buf的检查…
暂无图片
编程学习 ·

POJ1270 Following Orders(拓扑排序+dfs回溯)

POJ1270 Following Orders(拓扑排序+dfs回溯) Description Order is an important concept in mathematics and in computer science. For example, Zorn’s Lemma states: ``a partially ordered set in which every chain has an upper bound contains a maximal element.’…
暂无图片
编程学习 ·

浅析为什么开发中阿里禁用Select *查询

1、低效率原因 首先看下阿里开发手册中关于Mysql的描述: 4 - 1. 【强制】在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明。 说明: 增加查询分析器解析成本。 增减字段容易与 resultMap 配置不一致。 无用字段增加网络 消耗,尤其是 text 类型的字…
暂无图片
编程学习 ·

操作系统-中断

什么是中断?中断是改变处理器执行指令顺序的一种事件。 这样的事件与CPU芯片内外部硬件电路产生的电信号相对应。为什么需要中断?有了中断后,使CPU可以与其他设备并行工作,能有效提高CPU的利用率,改善系统性能,支持系统的异步性。中断的类型 分为 : 同步中断(内部中…
暂无图片
编程学习 ·

elasticsearch

1. elasticsearch基本操作 1.1. 基本概念 Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的。 对比关系: 索引(indices)----------------------Databases 数据库类型(type)--------------------------Table 数据表文档(Document)--…