Skip to content

Instantly share code, notes, and snippets.

@tsubaki
Last active September 4, 2019 02:00
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tsubaki/3b42f1c7a65ac899e4bb0b9fd555eba4 to your computer and use it in GitHub Desktop.
Save tsubaki/3b42f1c7a65ac899e4bb0b9fd555eba4 to your computer and use it in GitHub Desktop.
StandardShaderの描画をFadeにする
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(Collider))]
[RequireComponent(typeof(Renderer))]
public class Click2Fade : MonoBehaviour
{
// フェードにかかる時間
[SerializeField, Range(0.1f, 0.3f)]
float fadeTime = 0.2f;
// trueでCutout処理による擬似的な透過(影アリ)、falseでアルファによる透過(影ナシ)
[SerializeField]
bool transparentCutout = false;
// オブジェクトをクリックした際に呼ばれるコールバック(要Collider)
IEnumerator OnMouseDown()
{
//再度のクリックで呼ばれないようにColliderを停止
GetComponent<Collider> ().enabled = false;
// Materialをインスタンス化し、レンダリングモードを切替
// 参考:http://blog.csdn.net/yaoyutian/article/details/72462147
var material = GetComponent<Renderer> ().material;
if (transparentCutout) {
material.SetOverrideTag ("RenderType", "TransparentCutoff");
material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.AlphaTest;
} else {
material.SetOverrideTag ("RenderType", "Transparent");
material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent;
}
material.SetInt ("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
material.SetInt ("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
material.SetInt ("_ZWrite", 0);
material.DisableKeyword ("_ALPHATEST_ON");
material.EnableKeyword ("_ALPHABLEND_ON");
material.DisableKeyword ("_ALPHAPREMULTIPLY_ON");
// FadeTimeの時間をかけてアルファを0にするタスクを作成
// タスクが完了するまで待つ
float endTime = Time.timeSinceLevelLoad + fadeTime;
var color = new Color (1, 1, 1, 1);
var task = new WaitWhile (() => {
var diff = endTime - Time.timeSinceLevelLoad;
if( diff > 0) {
color.a = diff / fadeTime;
material.SetColor("_Color",color);
return true;
}else{
return false;
}
});
yield return task;
// 透明になったので、インスタンス化したMaterialとObjectを破棄
Destroy (material);
Destroy (gameObject);
}
}
@tsubaki
Copy link
Author

tsubaki commented Jul 28, 2017

animation 95

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment