Last active
September 4, 2019 02:00
-
-
Save tsubaki/3b42f1c7a65ac899e4bb0b9fd555eba4 to your computer and use it in GitHub Desktop.
StandardShaderの描画をFadeにする
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
Author
tsubaki
commented
Jul 28, 2017
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment