回顾





Unity核心学习的主要内容





项目展示





基础知识

认识模型制作流程







2D相关

图片导入设置相关

图片导入概述


参数设置——纹理类型










参数设置——纹理形状



参数设置——高级设置




参数设置——平铺拉伸



参数设置——平台设置(非常重要)











Sprite

Sprite Editor —— Single图片编辑







Sprite Editor —— Multiple图集元素分割







Sprite Editor —— 多边形编辑
用的较少,了解即可



Sprite Renderer









练习:





Sprite Creator


练习:



SpriteMask




练习:


Sorting Group



图集制作







练习



2D物理系统

刚体









碰撞器









练习:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerObject : MonoBehaviour
{
    public float moveSpeed = 5;
    private float h;
    private SpriteRenderer sr;
    private Rigidbody2D rigidbody2D;
    // Start is called before the first frame update
    void Start()
    {
        sr = this.GetComponent<SpriteRenderer>();
        rigidbody2D = this.GetComponent<Rigidbody2D>();
    }
    // Update is called once per frame
    void Update()
    {
        h = Input.GetAxis("Horizontal");
        //this.transform.Translate(Vector2.right * moveSpeed * Time.deltaTime * h);
        //由于 重力 会给予对象 y方向的值 所以我们左右移动 应该只是改变左右速度 y的速度应该保留原有的值
        //rigidbody2D.velocity = Vector2.right * h * moveSpeed;
        rigidbody2D.velocity = new Vector2(h * moveSpeed, rigidbody2D.velocity.y);
        if (h < 0)
            sr.flipX = true;
        else if (h > 0)
            sr.flipX = false;
        if (Input.GetKeyDown(KeyCode.Space))
        {
            //创建子弹预设体
            GameObject obj = Instantiate(Resources.Load<GameObject>("BulletObj"), this.transform.position + new Vector3(sr.flipX ? -0.3f : 0.3f, 0.5f, 0), Quaternion.identity);
            //告诉子弹朝哪个方向动
            obj.GetComponent<BulletMove>().ChangeMoveDir(sr.flipX ? Vector3.left : Vector3.right);
        }
        if (Input.GetKeyDown(KeyCode.J))
        {
            //给它一个向上的瞬时力
            rigidbody2D.AddForce(Vector2.up * 300);
        }
    }
}

物理材质



恒定力



效应器








练习

SpriteShape

Sprite Shape Profile 精灵形状概述文件






Sprite ShapeRenderer 和 Sprite Shape Controller
精灵形状渲染器和控制器









练习:

TileMap——瓦片地图

瓦片资源




瓦片调色器窗口使用
(本节知识点较多,复习时可以配合视频进行)








重点
1.需要修改工程的自定义轴排序 以Y轴决定渲染顺序
x = 0 ; y = 1; z = -0.26;

2.如果地图存在前后关系需要修改TileRenderer的渲染模式


瓦片地图关键脚本和碰撞器









练习:




运用了平台效应器







官方拓展包导入

下载地址:
  https://github.com/Unity-Technologies/2d-extras

官方拓展包——新增瓦片类型
















官方拓展包——新增笔刷类型








代码控制相关


动画基础

Animation动画窗口

认识Animation动画窗口





创建编辑动画














代码控制动画(老动画系统)










练习:



Animator动画状态机

有限状态机概念


Animator Controller —— 动画控制器(状态机)













代码控制动画状态机切换





练习:




2D动画

序列帧动画
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson35 : MonoBehaviour
{
    public Sprite[] sprs;
    private SpriteRenderer spriteR;
    private float time = 0;
    private int nowIndex = 0;
    public Animator animator;
    // Start is called before the first frame update
    void Start()
    {
        #region 知识点一 什么是序列帧动画
        //我们最常见的序列帧动画就是我们看的 日本动画片
        //以固定时间间隔 按序列切换图片 就是 序列帧动画的本质
        //当固定时间间隔足够短时 我们肉眼就会认为图片是连续动态的 进而形成动画(会动的画面)
        //它的本质和游戏的帧率概念有点类似
        //原理就是在一个循环中按一定时间间隔不停的切换显示的图片
        #endregion
        #region 知识点二 代码制作序列帧动画
        //我们先尝试用原理 通过代码来实现序列帧动画
        spriteR = this.GetComponent<SpriteRenderer>();
        spriteR.sprite = sprs[nowIndex];
        #endregion
        #region 知识点三 Animation窗口制作序列帧动画
        //方法一:
        //1.创建一个空物体
        //2.创建一个动画
        //3.直接将某一个动作的序列帧拖入窗口中
        //方法二:
        //直接将图片拖入Hierarchy 层级窗口中
        //注意:需要修改动画帧率 来控制动画的播放速度
        #endregion
        #region 知识点四 利用Animator 进行动画控制
        #endregion
    }
    // Update is called once per frame
    void Update()
    {
        //每一次增加帧间隔时间
        time += Time.deltaTime;
        //当帧间隔时间达到某一个条件时 就切换图片
        if (time >= 0.03)
        {
            //索引增加 切换图片
            ++nowIndex;
            //判断是否 重头显示
            if (nowIndex >= sprs.Length)
                nowIndex = 0;
            spriteR.sprite = sprs[nowIndex];
            time = 0;
            
        }
        //知识点四
        if (Input.GetKeyDown(KeyCode.Space))
        {
            animator.SetBool("IsDown", true);
        }
        else if(Input.GetKeyUp(KeyCode.Space))
        {
            animator.SetBool("IsDown", false);
        }
    }
}

练习



2D骨骼动画

2D Animation

2D Animation_骨骼动画制作基础——单张图片编辑









练习

2D Animation_骨骼动画制作基础——图集编辑







练习

2D Animation_骨骼动画制作基础——PSB图集编辑











2D Animation_反向动力学IK










练习


2D Animation_换装_换装资源在同一个文件中










2D Animation_换装——换装资源在不同文件中












Spine

Spine_Spine运行库导入

官方地址:http://http:zh.esotericsoftware.com/



Spine_Spine骨骼动画使用




Spine_Spine骨骼动画参数相关












Spine_Spinr骨骼动画代码控制_Spine骨骼动画代码控制相关











模型导入相关设置

模型导入概述




Model页签














Rig操纵(骨骼)页签)





















Animation——动画页签

动画页签概述


基础信息设置





动画剪辑属性基本设置










动画剪辑属性其它设置





预览窗口


Materials——材质纹理页签




3D动画相关

3D动画的使用











练习


后退直接有的是向前走的动画,只要倒着播放就可以

 




添加事件


动画分层和遮罩










练习





动画1D混合







练习:



动画2D混合






练习



动画子状态机








练习:




动画IK控制






练习

先加一个头部的位置获取点


主要知识点是——四元数相关的

通过头部位置点计算出一个获取位置的虚拟点,通过它来控制转向
动作目标匹配







StateMachineBehaviour——状态机行为脚本





状态机复用




角色控制器








导航寻路系统

导航寻路系统概述


导航网格生成













导航网格寻路组件










导航网格外连接组件







导航网格动态障碍组件








通过鼠标右键点击让障碍物失活


总结







做实践项目之前需要先把:UGUI和数据持久化Json学习完。



















