从零开始Unity引擎学习

简单说明

你好! 这是我从零开始学习unity的博客。
每有空就会添加一个小标题用于总结当天所学的知识。

在小标题下会用加粗字体一句话总结当日学习的知识点。
刚开始接触unity什么都不懂,有错误还请多多包涵( ゚Д゚)ノ

教程

unity核心类图
官方用户手册

【翻译注释文档】
游戏蛮牛Unity 用户文档1.0

代码调试和配置环境
调试C#代码

【Unity界面基础认识①】2021/12/13

本日安装了Unity 和 Unity Hub 。
学习到了:初步认识了unity界面、学习了什么叫场景,如何新建场景、场景编辑器、如何添加资源、什么叫游戏对象,坐标系。

1.unity界面初识
新建项目后安装unity界面如图所示。
unity界面

Project项目面板:项目内的资源文件。图中下方的面板。可在里面直接建立场景、文件夹、对象、脚本等等物品
Scene场景视图:以可视化的形式展现游戏内容。
面板内部左上角一排工具分别为:抓取工具(可拖动视图)、旋转平移工具、自由变换工具和拉伸工具。其中旋转可进行xyz轴的旋转。
右上角工具为相机和将视图画面2D3D切换的可视化工具。
Game游戏视图:对游戏进行播放预览。
Hierachy层级面板:以树状形式显示游戏中的对象(左侧面板)
inspector 组件面板:显示一个游戏对象的全部组件
Console控制台:打印调试的

2.什么叫场景,如何新建
场景就是一个游戏里的关卡,或者某个画面。
我个人理解,以找茬游戏为例,应该是一个解密里的一个关卡,在该关卡中进行解密,到下一关就切换为下一个场景。

新建场景:在project面板中右键create新建场景就可以了。

3.场景编辑器
就是中间这个编辑窗口,可以用滚轮放大缩小,也可以平移。
其内部可见:
1.网格: 一个占屏幕上100像素、1个Unit(可自定义)
2.主摄像机:摄像机的可视范围
3.世界坐标系:x,y轴

4.如何添加资源
方法:
①直接将素材拖拽进project面板的Assets
②右键Assents区域选择import导入

注:可直接右键素材Show In Explorer找到该素材所在的目录,当导入素材后会多出一个对应的.meta文件。且删除原有的素材项目内素材不会消失,因为unity导入规则是复制一份新的文件
管理资源时可以添加子目录来分类管理。可以重命名素材,也可以删除素材。

5.游戏对象,坐标系的概念

游戏对象就是场景中包含的内容。
比如将某个图片拖进Scene窗口或是Hierarchy窗口中,就新增了一个游戏对象。
点击该对象,右侧会显示该对象的属性信息(名字,变换信息、组件,脚本情况等等)

注:在场景中只是保存了游戏对象引用了谁,比如说引用了某个图片,该图片的id是什么。

坐标系可以在对象的Inspector属性面板查看对象的坐标xyz轴
坐标的单位:一个方格是一个Unit(单位),一个单位在现实世界中都可以自行约定。
x轴:水平向右
y轴:垂直向上
z轴:垂直屏幕向内
(可以用ae的摄像机来理解)

【Unity基础界面认识②】2021/12/14

今日学习:认识了游戏对象的概念及其操作和显示顺序、摄像机、组件。

1.游戏对象

基本操作
移动(更改position值或者使用工具)
旋转(x,y,z轴都可以作为旋转轴)
缩放(x,y轴的缩放,中间的方块可以不失去比例的缩放)
矩形工具:自由变换(按shit键可以等比例缩放)
隐藏和显示:属性中选择active复选框

点击 Sprite Editor打开图形编辑器,右下角显示图片的各个属性

名称 作用
name 名字
Position centered 位置
Border
Pivot 轴心(可选择轴心位于哪里)
Pivot Unit Mode
Custom Pivot

图片切割
打开图片编辑器后,打开左上 第二个菜单:Slice,点击Slice,会自动剪裁图片,分成相应的多个图片游戏对象

图片与渲染器
Sprite:精灵
Sprint Renderer:图片渲染器,用于显示一个Sprite(一种组件)
将素材拖拽到Sprite的位置,替换当前显示的素材图片。

显示顺序
-修改Order in Layer属性
-修改Z坐标

父子关系
与AE的父子关系同理,子对象随父对象变换
:在树状管理器里拖拽就可以设置了

2.摄像机
点击摄像机可查看其添加的组件
下面展示了部分了解到的组件

名称 功能
Transform 一种组件,表示:Position:位置 Rotation:旋转 Scale:缩放(每个游戏对象都有的组件)
Background 背景,显示区域外的填充是什么颜色
Size 摄像机的范围大小,默认为5个单位,描述了摄像机可以拍摄多大的区域

Game窗口中可以跳调整其长宽比例

3.组件
组件:用于实现一种功能。
在右侧面板种可以添加一些组件

【Unity 脚本认识①】2021/12/15

今日学习:认识了什么叫脚本、如何挂载脚本、学习查看手册、认识了脚本中的Start()和Update()

什么是脚本
游戏对象的行为由附加的__组件__控制。脚本可以理解就是在写一个自用组件(?

怎么挂载脚本
Assets窗口创建一个C#脚本
双击脚本启动VS
挂载脚本01
在VS页面内可以编辑该脚本,编辑脚本后退出到unity界面,可以直接将脚本拖拽至对象上挂载,然后点击Game窗口中运行。

①新建一个脚本和使用它
新建一个脚本后点开脚本观察其代码。

using UnityEngine;
using System.Collections;

public class MainPlayer : MonoBehaviour {

    // 使用此函数进行初始化
    void Start () {
    
    }
    
    // 每帧调用一次 Update
    void Update () {
    
    }
}

为了连接到 Unity 的内部架构,脚本将实现一个类,此类从称为 MonoBehaviour 的内置类派生而来。也就是说MonoBehaviour是每一个脚本的基类。

MonoBehaviour 是一个基类,所有 Unity 脚本都派生自该类。
使用 C# 时,必须显式派生自 MonoBehaviour。(不太理解,找个例子来理解它)

——什么叫做显式派生?
就是在派生类的构造函数中指定要调用的基类的构造函数,
并将派生类构造函数的部分参数值传递给基类构造函数。
——什么叫做隐式派生?
隐式方式就是在派生类的构造函数中不指定对应的基类的构造函数,
这个时候调用的是基类的默认构造函数。

monoBehaviour介绍及其函数

Component 菜单上的 Scripts 子菜单,其中包含项目中可用的所有脚本,包括自定义的脚本。

每当创建一个脚本时,自动创建一个类.cs文件,文件名与类名相同。
会由引擎自动调用:

Start() :启动时调用
Update():每帧调用 (帧率不固定)

内部执行的顺序:
1.创建对象
2.创建其调用的组件
3.Start()
4.定时执行Update()

【Unity 脚本认识②】2021/12/16

今日学习:重新配置了环境、学习帧率的概念、如何获取当前对象和其他对象的组件

今早打开脚本不知道为什么vs的自动补全代码又没了,就把环境重新配置了一下。
查看vs2019的unity相关组件是否装上。(查看发现明明已经安装好了T T)
然后打开unity,点击edit中的preference,找到自己安装的编译器,进行一个选择。
配置
然后记得一定要重启,再次打开后双击脚本就能查看代码的补全了。

②什么叫帧率,如何让一个物体匀速移动?
帧率就是指每秒钟更新多少次。
FPS = 50 约每20ms 更新一次
FPS = 60 约每16.7ms更新一次

Debug.log("In Update() .." + Time.delaTime);

观察间隔多久刷新一次
控制台情况

提问,什么叫做delaTime?
中文名称增量时间,含义是每经过一帧所耗费的时间。
Update()每帧执行一次,那么经历过一帧耗费的时间就是 增量时间(deltaTime)
1秒内Update执行的次数,就是1秒内执行的总帧数

举个例子

 void Update()
    {
   
        transform.Translate(0, 0, Time.deltaTime * 10); //物体沿着自身Z轴方向,每秒移动物体10米运动
    }

用增量时间*10,可以让物体每一秒钟移动10米。而Update()每一秒刷新的次数都不同。

(Update执行一次就是一帧,每秒的帧不同但每一帧移动的距离都是速度 * 时间,最后相当于再乘每秒钟有几帧,相当于下面这个公式)

10米=(增量时间 * 1秒总帧数) *10米/秒

③如何获取节点和组件?

-当前游戏对象

this.gameObject //当前你这个游戏对象

取得当前对象的全部组件

    void Start()
    {
   
        //在当前对象下寻找类型为SpriteRenderer类型的全部组件
        SpriteRenderer render = this.gameObject.GetComponent<SpriteRenderer>();
        //简写:SpriteRenderer 自变量名称 = this.GetComponent<获取的类型>();
        render.flipY = true; //对当前对象进行一个翻转(X对称轴)
    }

运行脚本后图片翻转了……
图片翻转

-获取其他对象

 GameObject obj = GameObject.Find("相应对象的路径");

【Unity 脚本认识③】2021/12/17

今日学习:父子节点关于transform的一些简单操作、组件的属性如何增加修改,游戏对象如何改变坐标,旋转。

今天又有问题了。
在这里插入图片描述
找到这个用户目录下,删除原有的许可证。
目录
再重启电脑,重新打开unity hub申请许可证就好了。

④父节点和子节点
左侧树状文件结构由Transform来管理。
常见操作:
1.取得父节点,获得父节点的名称

    //取出当前对象的父节点
        GameObject parentobj = this.transform.parent.gameObject;
        Debug.Log("rabbit的父节点" + parentobj.name);

2.遍历全部子节点
遍历当前对象的全部子节点并打印出其名称。

		//遍历子节点
        foreach (Transform child in transform)
        {
   
        Debug.log("子节点" + child.name);
        }

3.把一个节点移动到另外一个位置。

将rabbit对象挂载到主摄像机对象下面。

    //分别定义两个对象
        GameObject obj = GameObject.Find("rabbit");
        GameObject target = GameObject.Find("Main Camera");

        //通过transform,先找到子节点的transform,将其挂到父节点的transform下面
        obj.transform.SetParent(target.transform);

未运行前层级关系。
在这里插入图片描述
运行后层级关系。
在这里插入图片描述
当想将对象挂载到场景下面的时候,直接设置为null

 obj.transform.SetParent(null);

游戏运行时,层级面板和组件面板都会显示实时数据。

⑤组件的属性定义
在组件面板中可以看到组件下面的一些属性。

新建一个脚本,在脚本内定义一个public的组件属性,我们可以看到属性面板中显示了我们自己定义的属性。
在这里插入图片描述
该值也可以修改
在这里插入图片描述
⑥游戏对象运动计算

Vector3,用于表示一个3维向量(x,y,z),也称为3元数。

定义一个三维的坐标,坐标表示为浮点数,所以在其后必须要加f

 Vector3 pos = new Vector3(0, 0.1f, 0);

节点坐标、旋转都可以用Vector3表示

transform.position = new Vector3(0, 0.1f, 0); //设置位置
//eulerAngles 欧拉角 用来旋转的 旋转了45度
transform.eulerAngles = new Vector3(0, 0, 45f); 

世界坐标 World Space Position 绝对坐标,以世界坐标系计算
本地坐标 Local Space Position 以父节点的坐标系计算

控制游戏对象在一定范围内移动,当碰到上下边界的时候就调转自己的方向。

 private bool upward = true;//飞行的方向,向上
    // Update is called once per frame
    void Update()
    {
   
        if(upward && transform.position.y > 5)
        {
   
            upward = false;
            transform.localEulerAngles = new Vector3(0, 0, 180);
        }
        if (!upward 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值