・マスク用イメージを利用して、スクラッチしているエフェクトを再現する
・オブジェクト作成
・Unmaskをインポート
https://github.com/mob-sakai/UnmaskForUGUI
参考サイト
https://kan-kikuchi.hatenablog.com/entry/UnmaskFor...
・コード
まずは分岐なしで試す => ずっとマスクが動く
分岐を作って、タップ時のみに制御を変える
using UnityEngine;
public class ScratchEffect : MonoBehaviour {
[Header("スクラッチ用のMaskPrefab")]
public GameObject maskPrefab;
[Header("生成されたMaskPrefabの配置位置")]
public Transform maskPlace;
private float scaleX = 0.01f; // マスクのXの大きさ
private float scaleY = 0.005f; // マスクのYの大きさ
private bool isPressed = false; // タップ判定の検出用
void Update() {
var mousePos = Input.mousePosition;
mousePos.z = 10;
mousePos = Camera.main.ScreenToWorldPoint(mousePos);
// マウスのポジションをViewPointに変換(-1 ~ 1の間)
Vector3 pos = Camera.main.WorldToViewportPoint(mousePos);
//if (isPressed == true) {
GameObject maskImage = Instantiate(maskPrefab, mousePos, Quaternion.identity);
maskImage.transform.parent = maskPlace;
maskImage.transform.localScale = new Vector3(scaleX, scaleY, 1);
//}
//if (Input.GetMouseButtonDown(0)) {
// isPressed = true;
//} else if (Input.GetMouseButtonUp(0)) {
// isPressed = false;
//}
}
}
・ヒエラルキーの整理
・プレファブ化
・タップに合わせてエフェクトを生成する
空のゲームオブジェクトを1つ作成し、名前を「ScratchEffectGenerator」に変更します。
同名のスクリプトをアタッチし、インスペクターを確認します。アサイン情報が抜けているので、こちらを修正します。
MaskPrefabはスクラッチしたエフェクト用のゲームオブジェクトです。すでにプレファブ化してあるMaskPrefabをアサインします。
もしもスクラッチしたを一定時間後に破棄し、再度スクラッチが行えるようにするには
MaskPrefabに以下のスクリプトをアタッチし、時間で破壊されるようにします。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DestroyMaskObject : MonoBehaviour
{
public float destroyTime;
void Start()
{
Destroy(this.gameObject, destroyTime);
}
}
MaskPlaceは、上記のMaskPrefabが生成される位置です。ヒエラルキー上に複数並ぶことになりますので、この位置に生成し、フォルダ代わりに使います。
ここにはヒエラルキーにある、同名のゲームオブジェクトをアサインします。
・ヒエラルキーの構成
・実行時のサンプル動画
https://gyazo.com/cbb6cce2ed98aa6fb654edd8924b1b0e