Unity3D学习笔记(十二):2D模式和异步资源加载

Wesley13
• 阅读 863

2D模式和3D模式区别:背景纯色,摄像机2D,没有深度轴

精灵图片设置

Unity3D学习笔记(十二):2D模式和异步资源加载

Normal map,法线贴图,更有立体感

Sprite (2D and UI),2D精灵贴图,有两种用途

1、当做UI贴图

2、当做2D精灵直接作为游戏物体

Unity3D学习笔记(十二):2D模式和异步资源加载

Sprite Mode:精灵模式

Single:单图模式,一张2D精灵贴图

Multiple:多图模式,图集,切图,切成一张张小图,序列帧图片

Polygon:多边形模式

多图模式点精灵编辑器,切图

Unity3D学习笔记(十二):2D模式和异步资源加载

Unity3D学习笔记(十二):2D模式和异步资源加载

1、自动切,根据图片的Alpha透明通道,图片的轮廓

缺点:中心点不在同一位置,播放动画会发生偏移

Unity3D学习笔记(十二):2D模式和异步资源加载

2、宽高切,根据尺寸来切,每张图宽高都是XY

3、行列切,C列R行,一整张图分成C列R行

Unity3D学习笔记(十二):2D模式和异步资源加载

手动切,不建议,每次宽高不同

Sprite Renderer 2D精灵渲染器

Unity3D学习笔记(十二):2D模式和异步资源加载

Sprite:指定让精灵渲染器渲染哪张精灵图片,用代码可以做动画

Color:主颜色,向上叠加其他颜色,用代码可以做颜色切换

Filp:沿着X轴或者Y轴进行镜像旋转

Material:赋材质,一般是默认材质

Draw Mode:贴图模式

----Simple普通模式:

----Sliced切片模式:九宫格图片的贴图方式,四角不拉伸,其余拉伸

单图模式Sprite Mode - Single,平铺模式Wrap Mode - Clamp,报错修改Mush Type - Full Rect

----Tiled切割模式:拉伸复制,根据图片的原始大小重复贴图

--------Tile Mode:Continuous模式,Adaptive模式

------------Stretch Value:伐值,拉伸之后的压缩比例

Sliced切片模式:精灵图片九宫格切割,防止图片拉伸变形,四角不变,其余部位重复拉伸

Unity3D学习笔记(十二):2D模式和异步资源加载

Sorting Layer(排序层级):决定了多张精灵图片的渲染顺序,越靠下的层级越后渲染,后渲染的就会把先渲染的覆盖掉。(所以不需要调z轴的深度,2D也没有z轴深度,也可以两个深度,一个放背景,一个放物体,渲染顺序优于z轴深度)

Order Layer(int值):在同一层级(Sorting Layer)下,数值越大的越后渲染,后渲染的就会把先渲染的覆盖掉。

Sorting Layer > Order Layer

Flare耀斑,导入基础资源包 - effects - 50mmmzoom

2D精灵图片,导入基础资源包

Unity3D学习笔记(十二):2D模式和异步资源加载

Pixel Per Unit:1个单元格(1米)=200个像素

根据游戏分辨率和图片像素,在图片尺寸不变,按比例缩放图片在2D场景的大小

游戏物体移动:动画.cs和位移.cs分开编写,很少会用动画自带的位移,镜之边缘

游戏物体转身:推荐使用Scale缩放为-1,使用Flip镜像转身,如果中心点不在物体中心,会有问题

打包图集:

Unity3D学习笔记(十二):2D模式和异步资源加载

给切图打上标签

Unity3D学习笔记(十二):2D模式和异步资源加载

老版图集打包,选择Always Enabled:把同一标签的图片,全部挤在一张图片上,合理利用剩余空间

Unity3D学习笔记(十二):2D模式和异步资源加载

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//简易动画状态机,面向对象的思想
//枚举表示状态
public enum PlayerState
{
    Idle,
    Walk,
}
public class SpriteTest : MonoBehaviour
{
    public Sprite[] idleSprites;
    public Sprite[] walkSprites;
    public float timeInterval = 0.1f;
    private SpriteRenderer spriteRenderer;
    private float curTime = 0;
    private int curIndex = 0;
    private float h;
    private PlayerState state = PlayerState.Idle;//枚举项附初值
    public PlayerState State//给枚举变量添加属性
    {
        get
        {
            return state;
        }
        set
        {
            if (state != value)//判断状态是否改变
            {
                curIndex = 0;//如果改变,把数组下标curIndex清零
                state = value;//给状态赋新值
            }
        }
    }
    // Use this for initialization
    void Start()
    {
        spriteRenderer = GetComponent<SpriteRenderer>();
    }
    // Update is called once per frame
    void Update()
    {
        h = Input.GetAxisRaw("Horizontal");
        CheckState();
    }
    //根据轴值检测状态
    void CheckState()
    {
        if (h == 0)
        {
            State = PlayerState.Idle;
        }
        else
        {
            State = PlayerState.Walk;
        }
        ChooseState();
    }
    //根据状态传递数组
    void ChooseState()
    {
        switch (State)
        {
            case PlayerState.Idle:
                PlayAnimation(idleSprites);
                break;
            case PlayerState.Walk:
                PlayAnimation(walkSprites);
                break;
        }
    }
    //接收数组播放动画
    void PlayAnimation(Sprite[] sprites)
    {
        curTime += Time.deltaTime;
        if (curTime >= timeInterval)
        {
            curIndex++;
            curIndex %= sprites.Length;
            spriteRenderer.sprite = sprites[curIndex];
            curTime = 0;
        }
    }
}

2D中的物理系统

Physics 2D

2D物理是没有z深度的

----Collider 2D

--------Edge Collider 2D:边缘碰撞器,线体

--------Polygon Collider 2D:多边形碰撞器,闭环

----Rigidbody 2D

--------G重力缩放值,0为无重力

--------检测模式,连续监测

--------睡眠模式,永远不睡,清醒,一碰就醒

--------抖动修正

--------锁轴

2D物理的碰撞检测:

private void OnCollisionEnter2D(Collision2D collision)
    {
       
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
       
    }

2D的射线:

Physics2D.Raycast();

int Raycast(Vector2 origin, Vector2 direction, ContactFilter2D contactFilter, RaycastHit2D[] results);

ContactFiter2D:筛选器,信息整合,返回值是RaycastHit2D,不是布尔值

往上跳,给2D刚体一个向上力

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovementController : MonoBehaviour
{
    public float moveSpeed = 5;
    private float h;
       // Use this for initialization
       void Start () {
    }
       
       // Update is called once per frame
       void Update ()
       {
           h = Input.GetAxisRaw("Horizontal");
           transform.Translate(Vector3.right * Time.deltaTime * h * moveSpeed);
           if (h != 0)//判断在移动时,转身
           {
               transform.localScale = new Vector3(h > 0 ? 1 : -1, 1, 1);//用Scale=-1来转身
        }
           if (Input.GetKeyDown(KeyCode.Space))
           {
            GetComponent<Rigidbody2D>().AddForce(Vector2.up * 10, ForceMode2D.Impulse);//施加一个向上的力
           }
       }
}

2D效应器,和碰撞器配合使用,让碰撞器具有相应效应

Platform Effector 2D:平台特效,上去不下来,加平台特效,可以调节角度

Buoyancy Effector 2D:浮力效应器

Area Effector 2D:区域效应器,模拟风吹

Point Effector 2D:点效应器

Surface Effector 2D:表面效应器

Unity3D学习笔记(十二):2D模式和异步资源加载

碰撞器需要勾选Is Trigger和Used By Effector,效应器才会有效果

Unity3D学习笔记(十二):2D模式和异步资源加载

Unity3D学习笔记(十二):2D模式和异步资源加载

Distance Joint 2D:模仿关节

Unity3D学习笔记(十二):2D模式和异步资源加载

弹簧关节:有重力,有弹簧的效果

Unity3D学习笔记(十二):2D模式和异步资源加载

和另一个有刚体的游戏物体相连,两个游戏物体之间有一个隐形的弹簧

如果不设置,则默认和世界相连

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这