摄像机区域的架构改动
This commit is contained in:
96
Assets/Sprite Shaders Ultimate/Scripts/SpriteSheetSSU.cs
Normal file
96
Assets/Sprite Shaders Ultimate/Scripts/SpriteSheetSSU.cs
Normal file
@@ -0,0 +1,96 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace SpriteShadersUltimate
|
||||
{
|
||||
/// <summary>
|
||||
/// Attach this to sprite renderers or images with a sprite shaders ultimate material.
|
||||
/// Enable Sprite Sheet Fix and let this component update the Sprite Sheet Rect variable.
|
||||
/// </summary>
|
||||
public class SpriteSheetSSU : MonoBehaviour
|
||||
{
|
||||
public bool updateChanges = false;
|
||||
|
||||
SpriteRenderer spriteRenderer;
|
||||
Image image;
|
||||
Sprite lastSprite;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
//References:
|
||||
spriteRenderer = GetComponent<SpriteRenderer>();
|
||||
image = GetComponent<Image>();
|
||||
|
||||
//Instantiate Image:
|
||||
if(image != null && GetComponent<InstancerSSU>() == null)
|
||||
{
|
||||
image.material = Instantiate<Material>(image.material);
|
||||
}
|
||||
|
||||
//Update Rect:
|
||||
UpdateSpriteRect();
|
||||
|
||||
//Disable if updateChanges is disabled.
|
||||
if(updateChanges == false)
|
||||
{
|
||||
enabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
void LateUpdate()
|
||||
{
|
||||
if((spriteRenderer != null && lastSprite != spriteRenderer.sprite) || (image != null && lastSprite != image.sprite))
|
||||
{
|
||||
UpdateSpriteRect();
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateSpriteRect()
|
||||
{
|
||||
if (spriteRenderer != null)
|
||||
{
|
||||
lastSprite = spriteRenderer.sprite;
|
||||
}
|
||||
else if (image != null)
|
||||
{
|
||||
lastSprite = image.sprite;
|
||||
}
|
||||
|
||||
if (lastSprite != null)
|
||||
{
|
||||
if (spriteRenderer != null)
|
||||
{
|
||||
if(spriteRenderer.HasPropertyBlock())
|
||||
{
|
||||
MaterialPropertyBlock mpb = new MaterialPropertyBlock();
|
||||
spriteRenderer.GetPropertyBlock(mpb);
|
||||
mpb.SetVector("_SpriteSheetRect", GetSheetVector(lastSprite));
|
||||
spriteRenderer.SetPropertyBlock(mpb);
|
||||
}
|
||||
else
|
||||
{
|
||||
spriteRenderer.material.SetVector("_SpriteSheetRect", GetSheetVector(lastSprite));
|
||||
}
|
||||
}
|
||||
else if (image != null)
|
||||
{
|
||||
image.materialForRendering.SetVector("_SpriteSheetRect", GetSheetVector(lastSprite));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static Vector4 GetSheetVector(Sprite sprite)
|
||||
{
|
||||
Rect rect = sprite.rect;
|
||||
Texture text = sprite.texture;
|
||||
float width = text.width;
|
||||
float height = text.height;
|
||||
Vector2 minVector = rect.min;
|
||||
Vector2 maxVector = rect.max;
|
||||
|
||||
return new Vector4(minVector.x / width, minVector.y / height, maxVector.x / width, maxVector.y / height);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user