上海东方渔人码头电子沙盘单机版
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

77 lines
1.8 KiB

using UnityEngine;
using System.Collections;
/**
* Handles the bullet hole decals:
* - Sets a random frame
* - Fades the material according to the defined lifetime
* - Optionally rotates the decal
*
* (c) 2015, Jean Moreno
**/
[RequireComponent(typeof(MeshFilter))]
public class WFX_BulletHoleDecal : MonoBehaviour
{
static private Vector2[] quadUVs = new Vector2[]{new Vector2(0,0), new Vector2(0,1), new Vector2(1,0), new Vector2(1,1)};
public float lifetime = 10f;
public float fadeoutpercent = 80;
public Vector2 frames;
public bool randomRotation = false;
public bool deactivate = false;
private float life;
private float fadeout;
private Color color;
private float orgAlpha;
void Awake()
{
color = this.GetComponent<Renderer>().material.GetColor("_TintColor");
orgAlpha = color.a;
}
void OnEnable()
{
//Random UVs
int random = Random.Range(0, (int)(frames.x*frames.y));
int fx = (int)(random%frames.x);
int fy = (int)(random/frames.y);
//Set new UVs
Vector2[] meshUvs = new Vector2[4];
for(int i = 0; i < 4; i++)
{
meshUvs[i].x = (quadUVs[i].x + fx) * (1.0f/frames.x);
meshUvs[i].y = (quadUVs[i].y + fy) * (1.0f/frames.y);
}
this.GetComponent<MeshFilter>().mesh.uv = meshUvs;
//Random rotate
if(randomRotation)
this.transform.Rotate(0f,0f,Random.Range(0f,360f), Space.Self);
//Start lifetime coroutine
life = lifetime;
fadeout = life * (fadeoutpercent/100f);
color.a = orgAlpha;
this.GetComponent<Renderer>().material.SetColor("_TintColor", color);
StopAllCoroutines();
StartCoroutine("holeUpdate");
}
IEnumerator holeUpdate()
{
while(life > 0f)
{
life -= Time.deltaTime;
if(life <= fadeout)
{
color.a = Mathf.Lerp(0f, orgAlpha, life/fadeout);
this.GetComponent<Renderer>().material.SetColor("_TintColor", color);
}
yield return null;
}
}
}