1 前言
选中物体消融特效中基于 Shader 实现了消融特效,本文将基于 Shader Graph 实现消融特效,两者原理一样,只是表达方式不同,另外,选中物体消融特效中通过 discard 丢弃片元,本文通过 alpha 测试丢弃片元。
Shader Graph环境搭建、简单应用详见→Shader Graph简介。
本文完整资源见→Unity3D消融特效。
2 消融特效实现
创建 Unlit Shader Graph,重命名为 DissolveEffect,编辑如下。
其中,Alpha 测试需要在 Graph Settings 中开启,如下。
为实现点击消失效果,需要编写脚本如下。
DieController.cs
using UnityEngine;
public class DieController : MonoBehaviour {
private RaycastHit hit; // 碰撞信息
private void Start() {
hit = new RaycastHit();
}
private void Update() {
if (Input.GetMouseButtonUp(0)) {
GameObject hitObj = GetHitObj();
if (hitObj != null) {
服务器托管网 GameObject rootObj = GetRootObj(hitObj);
rootObj.AddComponent();
}
}
}
private GameObject GetHitObj() { // 获取屏幕射线碰撞的物体
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit)) {
return hit.collider.gameObject;
}
return null;
}
private GameObject GetRootObj(GameObject obj) { // 获取根对象
while (obj.transform.parent != null && obj.layer == obj.transform.parent.gameObject.layer) {
obj = obj.transform.parent.gameObject;
}
return obj;
}
}
DissolveEffect.cs
using UnityEngine;
[DisallowMultipleComponent] // 不允许在同一对象上挂载多个该组件
public class DissolveEffect : MonoBehaviour {
private Renderer[] renderers; // 渲染器
private Material dissolveMat; // 消融材质
private float burnSpeed = 0.25f; // 燃烧速度
private float burnAmount = 0; // 燃烧量, 值越大模型镂空的越多
private void Awake() {
dissolveMat = Resources.Load("DissolveMat");
renderers = GetComponentsInChildren();
}
private void OnEnable() {
foreach (Renderer renderer in renderers) {
Material[] materials = renderer.sharedMaterials;
Material[] dissolveMaterials = new Material[materials.Length];
for (int i = 0; i = 1f) {
Destroy(gameObject);
}
服务器托管网}
private void SetTexture(Material oldMaterial, Material newMaterial) { // 设置材质
if (oldMaterial.HasTexture("_MainTex")) {
Texture texture = oldMaterial.GetTexture("_MainTex");
newMaterial.SetTexture("_MainTex", texture);
}
}
private void SetColor(Material oldMaterial, Material newMaterial) { // 设置颜色
Color color = Color.white;
if (oldMaterial.HasColor("_Color")) {
color = oldMaterial.GetColor("_Color");
}
newMaterial.SetColor("_Color", color);
}
}
运行效果如下。
声明:本文转自【Unity3D】消融特效。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: ISay obj=(ISay)Class.forName(args[0]).newInstance(); obj.say();
class mainClass { public static void main(String[] args) { System.out.println(args[0]); try{ ISay obj=(ISay)Class.forName(args[0])…