[傅老師]Unity3D基础入门学习笔记

本系列学习视频——[傅老師/Unity教學] Unity3D基礎入門

1 installation

在这里插入图片描述
创建一个全新的项目
在这里插入图片描述

得到视窗,选择右上角的layout可以更改布局
在这里插入图片描述

安装MonoDevelop确保可以用,点选edit→preferences,勾选MonoDevelop,可以新建c#文件然后由MonoDevelop打开
在这里插入图片描述

2 window

在这里插入图片描述
shift+空格——使scene view最大化
project栏位和文件夹的状态一致
在这里插入图片描述

3 move yourself

在这里插入图片描述

4 move other objects

在这里插入图片描述
操作练习——台阶
在这里插入图片描述

5 primatives

在这里插入图片描述
按住ctrl移动,在格线上面移动,摆出这几个基本元件看看。
在这里插入图片描述

6-7 materials

albedo——反射率贴图,主要体现模型的纹理和颜色
在这里插入图片描述
在这里插入图片描述
tilling——重复次数
在这里插入图片描述

offset——偏移量

metallic——金属度
smoothness——平滑度(看着粗不粗糙)
在这里插入图片描述
在这里插入图片描述
normal——法线贴图
在网上搜一下freepbr的材质,导入法线贴图
在这里插入图片描述

在这里插入图片描述
但是看到边缘还是平的,所以这也体现了法线贴图
在这里插入图片描述
在这里插入图片描述

8 skybox

下载一个天空盒进行应用,十字天空条,或者是新建材质里选hdri
在这里插入图片描述

9 Material and skybox

只剩一个球体,应用白色的材质球,打开window→light→setting
在这里插入图片描述
smooth调到最高会看到反射,但是这个反射只是环境的反射,resolution为分辨率,compression为是否压缩,老显卡可能会压缩失败
intensity multip为这个反射的权重,bounces为反射次数
在这里插入图片描述
也可以选择custom,选择另一个天空盒材质来反射
在这里插入图片描述
如果想要反射信息,可以在create→light→reflection probe(以后再说)
自带天空盒的sun source
在这里插入图片描述
环境光原本是skybox,可以设置成ambient color以及其他的的东西
在这里插入图片描述
设置成gradient的话,可以设置天顶,赤道,以及地面的颜色
在这里插入图片描述
metallic实际上调整一个权重,调整上述提到的环境光和反射光的比例
在这里插入图片描述

10 add floor

可以到这里下载素材,随意找到一个
在这里插入图片描述
下载albedo和normal,导入,通常会设置这几个
在这里插入图片描述
normal贴图要改type
在这里插入图片描述
但是还是假假的,所以还要上AO贴图 环境光遮蔽(Ambient Occlusion),它的原理是通过将褶皱、孔洞和非常靠近的墙面变暗的方法近似模拟出间接光照
在这里插入图片描述
我们还会用到高度图 height map

在这里插入图片描述
在这里插入图片描述
手机上最常见就上一张albedo或者加上normal,因为会影响性能
我们可以再下一张Roughness贴图
我们记得之前有过一个smoothness的选项,这和roughness有什么关系呢
smoothness的贴图信息,要么从metallic alpha去取,要么从albedo alpha去取(为了省一个贴图)
在这里插入图片描述
我们下载完roughness的图之后,开gimp处理,进行颜色翻转
为了塞到metallic的alpha通道里,我们新建一个metallic贴图,操作见视频p10
在这里插入图片描述

在这里插入图片描述

11 add player

在asset store里搜索unity chan(不过要2018以上的版本,所以就去下了2019的unity)
在这里插入图片描述
下载之后导入,注意导入的文件,点选play以后,可以按wasd以及空格试试
在这里插入图片描述
我们接下来调整成第三人称的相机
在这里插入图片描述
把maincamera塞进unitychan里面,就可以跟随了
在这里插入图片描述
原画面有很多字,这其实是脚本文件
在这里插入图片描述
如果不想显示就进入源代码注释掉
在这里插入图片描述

12 add wall

首先聊一聊父子层级关系
之前把相机塞进unitychan里面,形成了父子关系
如果把plane也塞进unitychan里,那么就会一起掉落,因为unitychan是基于物理的;
如果把平行光也塞进unitychan里,那么阳光就会一直在后脑勺

我们为了深入理解父子关系,我们上网搜索crate texture
在这里插入图片描述
我们新建一个cube 贴上去
在这里插入图片描述
我们多用几个,然后撞上去,如果不锁死这个
在这里插入图片描述
我们会发现问题,走着走着人就飘起来了
在这里插入图片描述
我们进一步想要把unitychan关起来,我们需要用到这三个立方体,我们新建空物件把它们并起来
在这里插入图片描述
这么多箱子是不是很耗性能,确实,所以如果为了节约性能,可以把它设置成预置物件,实例化生产
我们设置也能写代码来控制它产生的地方
在这里插入图片描述

13 use block creator

打开assets store 搜索block creator,下载导入,会看到这些
在这里插入图片描述
在这里插入图片描述

我们用砖块搭一个简易的楼梯
在这里插入图片描述
但是重叠在一起的部分会出现z-fighting,互相打架,加个0.001
组成一个梯子
在这里插入图片描述
非均匀缩放不要用在父子物件上

14 iron bars

我们大概拉一个铁门
在这里插入图片描述
回到之前那个材质网站,搜索iron,下载一个材质,然后按照之前贴地面的方法贴上去
在这里插入图片描述

15-19 basic coding

我们想控制unitychan走到铁门时,铁门自动开启和关闭
我们需要自己新增组件
在这里插入图片描述
我们用vs打开,定义几个变量看看效果
在这里插入图片描述

在这里插入图片描述
我们实现jk控制铁门的代码

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

public class IronBars : MonoBehaviour
{
    
    
    // 1.Variables 变量定义
    public float maxY = 6.7f;
    public float minY = 3.71f;
    // Start is called before the first frame update
    void Start()
    {
    
    
        // 2.一次性代码区
        
    }

    // Update is called once per frame
    void Update()
    {
    
    
        // 3.重复性程序 60次/s     
        //print(gameObject.transform.position.x);
        
        
        if (Input.GetKey(KeyCode.J) && transform.position.y < maxY)
        {
    
    
            transform.position = new Vector3(transform.position.x, transform.position.y+0.01f, transform.position.z);
        }

        if (Input.GetKey(KeyCode.K) &&   transform.position.y > minY  )
        {
    
    
            transform.position = new Vector3(transform.position.x, transform.position.y - 0.01f, transform.position.z);
        }
    }
}

我们打算在门旁边放一个魔法阵,踩到才会打开门
一个quad配上魔法阵的贴图
在这里插入图片描述
新建MagicCircle的组件
勾选一下,第二行表示可以被侵入(不会把人物抬起来)
在这里插入图片描述
勾选了第二行要使用以下代码来判断

private void OnTriggerEnter(Collider other)
    {
    
    
       ......
    }

只有第一行的话要以下代码

private void OnCollisionEnter(Collision collision)
    {
    
    
       ......
    }

在代码中新建铁门,并把我们的铁门绑上去
在这里插入图片描述
两个文件的代码很简单

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

public class MagicCircle : MonoBehaviour
{
    
    
    public IronBars ironBars;
    // Start is called before the first frame update
    void Start()
    {
    
    
        
    }

    // Update is called once per frame
    void Update()
    {
    
    
        
    }
    //进入时
    private void OnTriggerEnter(Collider other)
    {
    
    
        
    }
    //在里面
    private void OnTriggerStay(Collider other)
    {
    
    
        ironBars.SendMessageUpwards("Up");
    }
    //退出时
    private void OnTriggerExit(Collider other)
    {
    
    

    }
}

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

public class IronBars : MonoBehaviour
{
    
    
    // 1.Variables 变量定义
    public float maxY = 6.7f;
    public float minY = 3.71f;
    public float startY;
    // Start is called before the first frame update
    void Start()
    {
    
    
        // 2.一次性代码区
        startY = transform.position.y;
    }

    // Update is called once per frame
    void Update()
    {
    
    
        // 3.重复性程序 60次/s     
        //print(gameObject.transform.position.x);
        
        
        if (Input.GetKey(KeyCode.J) )
        {
    
    
            if (transform.position.y <= startY + 3.0f)
            {
    
    
                transform.position = new Vector3(transform.position.x, transform.position.y + 0.01f, transform.position.z);
            }
        }

       
    }

    void Up()
    {
    
    
        if (transform.position.y <= startY + 3.0f)
        {
    
    
            transform.position = new Vector3(transform.position.x, transform.position.y + 0.01f, transform.position.z);
        }
    }


}

现在就能实现站在魔法阵上,铁门会上升了

20 physics konwledge

主要学习unity的collider组件
在这里插入图片描述
在这里插入图片描述
unity的物理引擎是nvdia的PhsyX,详情可以查维基,以上表格都是PhsyX的特性
在unity中game loop和render thread都是60次/s,但是硬件原因physics thread是50次/s
在这里插入图片描述

会在物理引擎里计算物理的东西有几种角色(结合表格理解)
在这里插入图片描述
我们的碰撞一定要算出接触点,所以kinematic和static以及自己这个类型的无法算碰撞
在这里插入图片描述
在这里插入图片描述
在做手机游戏的时候,能不用物理就不用物理

21 add particles

我们之前踩到魔法阵,没有什么效果,我们想用粒子系统加一些效果
粒子系统的使用可能要一到两周的时间,我们在asset store上搜索3d game effects pack free找现成的,下载并安装这个
选一个特效拖进去,点掉play on awake
在这里插入图片描述
我们让魔法阵的代码操作粒子效果,先拖进去
在这里插入图片描述
然后一下是魔法阵的代码

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

public class MagicCircle : MonoBehaviour
{
    
    
    public IronBars ironBars;
    public ParticleSystem ps1;
    public ParticleSystem ps2;
    // Start is called before the first frame update
    void Start()
    {
    
    
        
    }

    // Update is called once per frame
    void Update()
    {
    
    
    }
    //进入时
    private void OnTriggerEnter(Collider other)
    {
    
    
        if (ps1 && ps2)
        {
    
    
            ps1.Play();
            ps2.Play();
            Destroy(ps1.transform.parent.gameObject, 3.0f);
            Destroy(ps2.transform.parent.gameObject, 3.0f);
        }
    }
    //在里面
    private void OnTriggerStay(Collider other)
    {
    
    
        ironBars.SendMessageUpwards("Up");
    }
    //退出时
    private void OnTriggerExit(Collider other)
    {
    
    

    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43803133/article/details/108532768