// ***********************************************************************
// Assembly : Game
// Author : Kimch
// Created : 2020-09-29
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
//
//
// ***********************************************************************
using System.Collections;
using System.Collections.Generic;
using G;
using UnityEngine;
public class GhostItem : MonoBehaviour
{
//持续时间
public float duration;
//销毁时间
public float deleteTime;
public MeshRenderer meshRenderer;
void Update()
{
float tempTime = deleteTime - Time.time;
if (tempTime <= 0)
{//到时间就销毁
GameObject.Destroy(this.gameObject);
}
else if (meshRenderer.material)
{
float rate = tempTime / duration;//计算生命周期的比例
Color cal = meshRenderer.material.GetColor("_RimColor");
cal.a *= rate;//设置透明通道
meshRenderer.material.SetColor("_RimColor", cal);
}
}
}
public class GhostShadow : MonoBehaviour
{
//持续时间
public float duration = 2f;
//创建新残影间隔
public float interval = 0.1f;
//边缘颜色强度
[Range(-1, 2)]
public float intension = 1;
public Color color;
public SkinnedMeshRenderer meshRender;
//X-ray
public Shader ghostShader;
private float _lastTime = 0;
private Vector3 _lastPos = Vector3.zero;
public EntityMainPlayer cha;
void Update()
{
//人物有位移才创建残影
if (/*!cha.isDashing ||*/ _lastPos == this.transform.position)
{
return;
}
_lastPos = this.transform.position;
if (Time.time - _lastTime < interval)
{//残影间隔时间
return;
}
_lastTime = Time.time;
if (meshRender == null)
return;
Mesh mesh = new Mesh();
meshRender.BakeMesh(mesh);
GameObject go = new GameObject();
go.hideFlags = HideFlags.HideAndDontSave;
GhostItem item = go.AddComponent();//控制残影消失
item.duration = duration;
item.deleteTime = Time.time + duration;
MeshFilter filter = go.AddComponent();
filter.mesh = mesh;
MeshRenderer meshRen = go.AddComponent();
meshRen.material = new Material(ghostShader);
meshRen.material.SetFloat("_Intension", intension);//颜色强度传入shader中
meshRen.material.SetColor("_RimColor", color);//颜色强度传入shader中
go.transform.localScale = meshRender.transform.localScale;
go.transform.position = meshRender.transform.position;
go.transform.rotation = meshRender.transform.rotation;
item.meshRenderer = meshRen;
}
}