VRTK_HeadsetCollisionFade脚本简析(VRTK_v3.3.0版)

当检测到眼镜即Camera的碰撞事件时,启动眼镜视图的淡入淡出。
PlayArea对象上挂在此脚本;

参数:

    public float timeTillFade = 0f;//等待淡入的时间
    public float blinkTransitionSpeed = 0.1f;//碰撞时的闪烁速度
    public Color fadeColor = Color.black;//指定颜色
    public VRTK_PolicyList targetListPolicy;//类
    public VRTK_HeadsetCollision headsetCollision;    //类   
    public VRTK_HeadsetFade headsetFade;//类

protected修饰的方法:

OnEnable()
获取这两个类:headsetFade headsetCollision
headsetCollision注册两个事件
OnDisable()
headsetCollision移除两个事件

事件绑定的方法:

OnHeadsetCollisionDetect(): 里面执行 Invoke("StartFade", timeTillFade);
OnHeadsetCollisionEnded(): 里面执行CancelInvoke("StartFade");
headsetFade.Unfade(blinkTransitionSpeed);

StartFade() 开始颜色变黑,调用的VRTK_HeadsetFade类里的Fade方法
ValidTarget() 返回bool值,判断碰撞后是否需要颜色变黑

    // Headset Collision Fade|Presence|70030
     namespace VRTK
   {
  using UnityEngine;
/// <summary>
/// Initiates a fade of the headset view when a headset collision event is detected.
/// </summary>
/// <remarks>
/// **Required Components:**
///  * `VRTK_HeadsetCollision` - A Headset Collision script to determine when the HMD has collided with valid geometry.
///  * `VRTK_HeadsetFade` - A Headset Fade script to alter the visible colour on the HMD view.
///
/// **Script Usage:**
///  * Place the `VRTK_HeadsetCollisionFade` script on any active scene GameObject.
/// </remarks>
/// <example>
/// `VRTK/Examples/011_Camera_HeadSetCollisionFading` has collidable walls around the play area and if the user puts their head into any of the walls then the headset will fade to black.
/// </example>
[AddComponentMenu("VRTK/Scripts/Presence/VRTK_HeadsetCollisionFade")]
public class VRTK_HeadsetCollisionFade : MonoBehaviour
{
    [Header("Collision Fade Settings")]

    [Tooltip("The amount of time to wait until a fade occurs.")]
    public float timeTillFade = 0f;//等待淡入的时间
    [Tooltip("The fade blink speed on collision.")]
    public float blinkTransitionSpeed = 0.1f;//碰撞时的闪烁速度
    [Tooltip("The colour to fade the headset to on collision.")]
    public Color fadeColor = Color.black;//碰撞后的颜色
    [Tooltip("A specified VRTK_PolicyList to use to determine whether any objects will be acted upon by the Headset Collision Fade.")]
    public VRTK_PolicyList targetListPolicy;//指定的VRTK_PolicyList类,用于确定耳机冲突是否会对任何对象起作用

    [Header("Custom Settings")]

    [Tooltip("The VRTK Headset Collision script to use when determining headset collisions. If this is left blank then the script will need to be applied to the same GameObject.")]
    public VRTK_HeadsetCollision headsetCollision;//确定耳机碰撞的类 determining headset collisions
    [Tooltip("The VRTK Headset Fade script to use when fading the headset. If this is left blank then the script will need to be applied to the same GameObject.")]
    public VRTK_HeadsetFade headsetFade;//负责褪色的类

    protected virtual void OnEnable()
    {
        headsetFade = (headsetFade != null ? headsetFade : FindObjectOfType<VRTK_HeadsetFade>());
        headsetCollision = (headsetCollision != null ? headsetCollision : FindObjectOfType<VRTK_HeadsetCollision>());

        if (headsetFade == null)
        {
            VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_FROM_GAMEOBJECT, "VRTK_HeadsetCollisionFade", "VRTK_HeadsetFade", "the same or child"));
            return;
        }

        if (headsetCollision == null)
        {
            VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_FROM_GAMEOBJECT, "VRTK_HeadsetCollisionFade", "VRTK_HeadsetCollision", "the same or child"));
            return;
        }

        headsetCollision.HeadsetCollisionDetect += new HeadsetCollisionEventHandler(OnHeadsetCollisionDetect);
        headsetCollision.HeadsetCollisionEnded += new HeadsetCollisionEventHandler(OnHeadsetCollisionEnded);
    }

    protected virtual void OnDisable()
    {
        if (headsetCollision != null)
        {
            headsetCollision.HeadsetCollisionDetect -= new HeadsetCollisionEventHandler(OnHeadsetCollisionDetect);
            headsetCollision.HeadsetCollisionEnded -= new HeadsetCollisionEventHandler(OnHeadsetCollisionEnded);
        }
    }

    protected virtual void OnHeadsetCollisionDetect(object sender, HeadsetCollisionEventArgs e)
    {
        if (ValidTarget(e.collider))
        {
            Invoke("StartFade", timeTillFade);
        }
    }

    protected virtual void OnHeadsetCollisionEnded(object sender, HeadsetCollisionEventArgs e)
    {
        if (ValidTarget(e.collider))
        {
            CancelInvoke("StartFade");
            headsetFade.Unfade(blinkTransitionSpeed);
        }
    }

    protected virtual void StartFade()
    {
        headsetFade.Fade(fadeColor, blinkTransitionSpeed);
    }

    protected virtual bool ValidTarget(Collider target)
    {
        return (target != null && !(VRTK_PolicyList.Check(target.gameObject, targetListPolicy)));
    }
}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349