赞
踩
2D模式下Texture Type导入默认为Sprite(2D and UI)
小技巧
Pixels Per Unit是什么?(在导入图片的设置中)
Pixels Per Unit就是每个Unity单元格的像素大小为什么把Pixels Per Unit设置那么小?
Pixels Per Unit就是每个Unity单元格的像素大小为什么修改Filter Mode为Point?
对于像素资源来说,point模式可以让它看上去更加干净、清晰。为什么要选择Truecolor?
Compressed模式是压缩格式,体积小,但牺牲质量
Truecolor模式是真彩格式,最大程度上还原图片信息
Sprite Packer有三种打包模式,分别是
① DefaultPackerPolicy
② TightRotateEnabledSpritePackerPolicy
③ TightPackerPolicy
默认的打包方式,也是矩形打包方式。此模式会把所有的小图按照矩形的方式来排列,如果有宽高不一样的图片,他们会自动补齐。
是紧密可选择打包方式,即尽可能的把图片都打包在纹理上,这种方式最节省空间。
是紧密打包方式,也就是尽可能的把图片都打包在纹理上,这种方式要比DefaultPackerPolicy打包的图片更多一点,也更节省空间。
Unity中摄像机的两种类型:透视摄像机(3D 游戏)与正交摄像机(2D游戏)
根据不同设备的分辨率调整正交摄像机的对焦距离,也就是动态调整Unity中Camera的Size值,确保游戏中所有场景元素都在摄像机的观察范围之内。
例子:对于一个800像素 x640像素且单元比例(Pixel to Units)为100像素的游戏场景来说,它的比例值就是场景高度640像素除以单位比例100像素等于6.4
因为一般设置正交摄像机处于游戏场景中央位置,所以它的Size值为比例值 6.4的一半3.2,所以我们要设置摄像机尺寸(Size)为3.2。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PixelPerfectCamera : MonoBehaviour
{
//单位格像素大小
public static float pixelToUnit = 100f;
//比例值
public static float scale = 1f;
//默认分辨率 其他分辨率下,游戏会根据这个分辨率的比例动态的等比例缩放
public Vector2 nativeResolution = new Vector2(1136,640);
//初始化摄像机
void Awake()
{
//创建摄像机变量并获取实例
var camera = GetComponent<Camera>();
//判断是否为正交摄像机
if (camera.orthographic){
//计算比例
scale = Screen.height / nativeResolution.y;
//单位像素比例值
pixelToUnit *= scale;
//给正交摄像机赋值
camera.orthographicSize = (Screen.height / 2) / pixelToUnit;
}
}
}
将代码保存,将脚本文件拖至Main Camera上
小技巧
Quad对象与Plane对象的区别
Quad对象与Plane对象非常类似,但是Quad对象是由两个三角形组成的,而Plane则由一个面组成。我们在2D模式下看Quad对象像一个平面,但是在3D模式下它就是一个立方体。所以不需要关心Quad的Z轴,但需要关心Quad的Position Z的位置,如果把这个参数设置的太大,就会被其他对象遮挡,毕竟Quad是用来创建一个背景地面的。我们可以把Quad的面无限缩放来是硬件2D游戏中所有的美术资源。Paeticles的着色器介绍
下面针对Mobile->Particles的着色器混合模式做一下简要介绍
- Alpha Blended:主要用于半透明效果,类似于玻璃
- Addtive:相加混合模式
- Multiply:相乘混合模式
- Vertexlit Blended:渲染路径模式贴图、纹理、材质的区别
- 纹理是最基本的数据输入单位,游戏领域基本上使用的都是位图
- 贴图(Map)包含另一层含义,就是“映射”。其功能就是把纹理通过UV坐标映射到物体表面。贴图包含除纹理外的其他很多信息。
- 材质是一个数据集,主要功能就是给渲染器提供数据和光照算法。贴图就是其中数据的一部分,根据用途不同,贴图也会被分成不同的类型。
public int textureSize = 128
要制作一个地面循环材质,首先需要计算出需要多少块瓦砾材质才可以填充屏幕的宽度,当然瓦砾的宽度略大于屏幕的宽度,所以我们在计算时需要把块数值正向取整数。需要注意的是pixels per unit(每个单元格的像素)值,在计算循环背景载体宽度时需要使用这个值,同时我们还需要考虑到摄像机为了自适应做的变焦比例值(scale),所以在计算尺寸的时候一定要除以这个值,否则就会出现误差。
我们会使用一些简单的数学方法来计算出循环背景载体的宽度来适应所有的屏幕分辨率(因为我们这个循环背景只是一个循环地面,所以不需要考虑高度)。
把TileBackground脚本拖至Quad对象上,单机运行按钮
具体代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TileBackground : MonoBehaviour {
//单位格像素值
public static float pixelToUnit = 100f ;
//瓦砾材质的尺寸
public int textureSize = 128 ;
// Use this for initialization
void Start () {
//计算当前屏幕分辨率需要几块瓦砾来填充
var newWidth = Mathf.Ceil(Screen.width/(textureSize * PixelPerfectCamera.scale)) ;
//计算出了new width的值,为Quad赋值的Vector3的X值为newWidth乘以textureSize,
//再除以pixelToUnit,Y值保持1,因为地面没有在Y方向上的拉伸,Z值也是1
//Quad的宽高比例值
transform.localScale = new Vector3((newWidth * textureSize)/pixelToUnit,1,1);
//材质中的Tiling的X、Y值就等于material texture scale的X、Y值
//所以把newWidth和newHeight的值赋给Vector3的X、Y即可
//为瓦砾材质块数赋值
GetComponent<Renderer>().material.mainTextureScale = new Vector3(newWidth, 1, 1);
}
}
小技巧
图形尺寸运算原理
这里需要注意的是所有美术图片资源的内存计算都是2ⁿ,所有材质一般都是16、32、64、128这样的尺寸。所以如果需要修改背景尺寸,清保持2ⁿ,这样可以大幅提升图像运算效率,节约系统损耗。初始化方法的选择
Awake()方法运行优先级高于Start()方法,所以这里使用Start()方法初始化方法确保所有的初始化参数都正确再运行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。