Unity3D-VR《静夜诗》3-开始按钮与开始文本信息

2023-11-15

凝视确认了开始按钮后,开始信息文本对象是和开始按钮对象将会一起消失的,应该把这样的可视对象都放到有个容器对象(父对象)中,在程序中只要设置容器对象消失了,其子对象也就一起消失了。

1.开始按钮及开始信息文本UI对象的设计

为实现开始文本显示及开始按钮凝视触发功能,在场景中设计UI对象如下:
在这里插入图片描述

1.1容器对象PanelBeginUI

通过Create | UI | Panel 添加容器对象,并命名PanelBeginUI,设置属性如上图。位置大小根据需要设定,这里给的仅是参考,设置旋转使得对象的Z方向朝前,否则文字会反方向显示的,背景图片在资源目录下有的。

1.2开始信息文本TextBegin

通过Create | UI | Text 添加文本对象,并命名TextBegin,设置属性如下。

在这里插入图片描述

1.3开始按钮BtnBegin

通过Create | UI | Button 添加按钮对象,并命名BtnBegin,设置属性如下。
在这里插入图片描述
因为按钮对象要凝视交互的,所以要为按钮对象添加盒子碰撞器,其大小能包住按钮对象即可,按钮对象的Image属相设置的图片在提供的资源目录中有的。

按钮对象下还有一个子对象Text,把它的默认显示文本改为“开始”。

接下来我们事先开始按钮的交互凝视功能。

2.开始按钮实现凝视触发

如果你已经理解前面宝剑交互对象的凝视转圈事件触发的代码,就可以类似的编写开始按钮事件触发的脚本了。参考ReticleTrigger_for_DispayTextTip脚本,新建脚本ReticleTrigger_for_ButtonStartPlay.cs,参考代码如下:

public class ReticleTrigger_for_ButtonStartPlay : MonoBehaviour {
	private VRReticleTriggerItem vrReticleTriggerItem;//处理准星精度条触发的类变量
	private void Awake ()
	{   //要保证对象也有VRReticleTriggerItem脚本
		vrReticleTriggerItem = GetComponent<VRReticleTriggerItem> () ?? gameObject.AddComponent<VRReticleTriggerItem>() ; 
	}

	//对象使能(激活)时调用
	private void OnEnable()
	{	//订阅事件
		vrReticleTriggerItem.OnTrigger += HandleTrigger;
	}

	//对象不使能(不激活)时调用
	private void OnDisable()
	{	//去掉订阅的事件,与OnEnable的语句对应
		vrReticleTriggerItem.OnTrigger -= HandleTrigger;
	}

	//准星凝视进度条满了后,要触发的事件代码
	void HandleTrigger ()
	{  //设置当前对象父对象不活动(不可见,不可交互)
        this.transform.parent.gameObject.SetActive(false); 
        Debug.Log("你触发了开始按钮");//后续程序逻辑可在这里继续编码
	}
}

把脚本ReticleTrigger_for_ButtonStartPlay挂在开始按钮BtnBegin对象上,试着运行。

测试:
准星凝视在按钮上,出现转圈进度条,凝视触发后,开始信息文本及按钮对象不见了,控制台提示“你触发了开始按钮”。

问题
仔细观测项目的实现要求,发现准心凝视开始按钮时,按钮的背景会变成另一种颜色,根据提供的资源,在资源目录下还有一个图片文件btn_Long-button.png是作为开始按钮刚凝视时显示用的图片,一旦凝视中止开始按钮的背景恢复为原来的图片即btn_black-button.png。这又如何实现呢?
实现思路
记得VRReticleTriggerItem脚本吗?目前它只提供OnTrigger事件供使用者订阅,为了实现凝视时的背景图片切换,我们希望VRReticleTriggerItem提供OnOVer、OnOut事件的订阅,以便在ReticleTrigger_for_ButtonStartPlay脚本中能捕捉到凝视移入移出的事件。修改后的VRReticleTriggerItem脚本参考如下:

public class VRReticleTriggerItem : MonoBehaviour {    
    //添加可订阅的事件变量
    public event Action OnOver;//凝视移入
    public event Action OnOut;//凝视移出
 
    //准星凝视移入对象上时调用   
    private void HandleOver()
    {
        if (OnOver!=null)
            OnOver();
    }

    //准星凝视移出对象时调用
    private void HandleOut()
    {
        isTrigger = false;
        timer = 0;
        imageProgressBar.fillAmount = 0f;//进度条填充置0 

        if (OnOut!=null)
            OnOut();
    }
}

这样VRReticleTriggerItem脚本具有订阅OnOver、OnOut事件的功能了,继续编辑ReticleTrigger_for_ButtonStartPlay脚本。完成后的参考代码如下(留意代码中的注释):

public class ReticleTrigger_for_ButtonStartPlay : MonoBehaviour {
	private Sprite normalImage;//原来的精灵图片
	public Sprite overImage;//准星经过时精灵图片	 
	private VRReticleTriggerItem vrReticleTriggerItem;//处理准星精度条触发的类变量
	private void Awake ()
	{   //要保证对象也有VRReticleTriggerItem脚本
         vrReticleTriggerItem = GetComponent<VRReticleTriggerItem> () ?? gameObject.AddComponent<VRReticleTriggerItem>() ;		
         normalImage = GetComponent<Image> ().sprite;//保存原来的精灵图片
	}

	//对象使能(激活)时调用
	private void OnEnable()
	{
		//订阅事件		
		vrReticleTriggerItem.OnTrigger += HandleTrigger;
        vrReticleTriggerItem.OnOver += HandleOver;
        vrReticleTriggerItem.OnOut += HandleOut;
    }

	//对象不使能(不激活)时调用
	private void OnDisable()
    {   //去掉订阅的事件
		vrReticleTriggerItem.OnTrigger -= HandleTrigger;
        vrReticleTriggerItem.OnOver -= HandleOver;
		vrReticleTriggerItem.OnOut  -= HandleOut;		
	}

	//准星移出对象时调用
	void HandleOut ()
	{
		this.gameObject.GetComponent<Image> ().sprite = normalImage;
	}

	//准星在对象上时调用
	void HandleOver ()
	{
		this.gameObject.GetComponent<Image> ().sprite = overImage;
	}

	//准星凝视进度条满了后,要触发的事件代码
	void HandleTrigger ()
	{   //设置当前对象父对象不活动(不可见,不可交互)
        this.transform.parent.gameObject.SetActive(false); 
        Debug.Log("你触发了开始按钮");
    }
}

保存代码后在开始按钮BtnBegin的属性面板中设置变量overImage对应的图片值。

测试:

  • 凝视在开始按钮时,出现凝视转圈,背景图片也切换了
  • 凝视移出按钮后转圈进度条消失,背景图片也恢复为原来的图片
  • 凝视转圈完成触发后,开始信息文本和按钮消失了。

提示

请同学们掌握访问父对象的方法,比如像这样调用父对象的函数SetActive(),说明如下:

this.transform  // 获取当前对象的Transform组件,返回的是Transform类型。
this.transform.parent //获取当前对象的Transform组件的父组件,返回的也是Transform类型。
this.transform.parent.gameObject //获取父组件所在的游戏对象,返回的是GameObject类型。
this.transform.parent.gameObject.SetActive(false) //设置父对象不活动。

思考:

  • 如果凝视在开始按钮,按钮变大些,凝视移出恢复原来大小,如何实现呢?
  • 凝视在开始按钮时,不用默认的转圈进度条,用按钮背景作为水平进度条,又如何实现呢?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity3D-VR《静夜诗》3-开始按钮与开始文本信息 的相关文章

  • 【UGUI】2D头顶血条制作

    前言 近期因为需要制作玩家和敌人头顶的2D血条 查找了很多博客 发现很多都拘束于Canvas的渲染模式必须要设定为ScreenSpace Overlay 还有应该是版本原因 我的是unity2019 1 11f1 用RecttTransfo
  • Unity Animator 动画没切换

    恶魔射手 Survival Shooter 项目 有两个动画 一个是静止时的Idle 一个是走路时候的Move 如下图 设置好动画状态机后发现按方向键后还是Idle 没反应 而一直按着方向键后呢又动起来了 最后找到了真相 原来选中了 Has
  • 蒙特卡洛积分、重要性采样、低差异序列

    渲染公式 渲染的目标在于计算周围环境的光线有多少从表面像素点反射到相机视口中 要计算总的反射光 每个入射方向的贡献 必须将他们在半球上相加 为入射光线 与法线 的夹角 为方便计算可以使用法线向量和入射向量 单位化 的乘积表示 对于基于图像的
  • 【Unity&C#&随机数】随机数

    一个简单的随机数获得 0或1 使用了这样的代码 想要获得0或者1 if Input anyKeyDown float i 1 if i 1 i Random Range 0 Rang i i lt 0 5 0 1 Debug Log Cou
  • Unity动画控制器animator.CrossFade

    需要特别注意 1 CrossFade虽然可以不用任何逻辑来链接而直接跳转 但是CrossFade只能覆盖其他动画 当当前动画播放完毕而没有跳出这个动画时再次调用CrossFade将会失败 造成动画依旧停在原位 参数animator Cros
  • Unity中按钮检测鼠标状态

    改方法主要是用于按钮检测鼠标的进入 滑出 点击 抬起 长按 长按停止 1 先将下面这个脚本挂载到需要检测鼠标状态的按钮上 using System Collections using System Collections Generic u
  • unity中创建询问弹出窗口

    在开发过程中进程会遇到需要弹出一个窗口询问用户是否进行的操作 今天就来制作一个这样弹出窗口 然后根据弹出窗口的选择内容不同进行不同的操作 本例中主要是为了删除一个数据 而在删除数据操作前需要得到用户的一个确认操作 这里面主要用到了Notif
  • unity后台加密时间锁

    前言 在做一些项目的时候 有些不良甲方在给完项目后会有不给尾款的情况 之前都是加一些水印啥的 感觉不是很方便 第一不美观 第二如果甲方给完尾款后还得重新打包去水印 然后又做过一个本地的时间锁 等到时间 程序直接退出 但是感觉还是不方便 有时
  • Unity旋转以及万向锁问题

    我之前研读了一些关于unity旋转相关的博客 一直想抽个时间写个总结 但是由于实习太忙一直没有写 趁着今天请了假晚上有时间把这段时间一些学习心得写出来 Unity inspector面板中的Rotation 在unity中 想必大家最先接触
  • unity dots jobSystem 记录

    Looking for a way to get started writing safe multithreaded code Learn the principles behind our Job System and how it w
  • 【转载】【Unity】WebSocket通信

    1 前言 Unity客户端常用的与服务器通信的方式有socket http webSocket 本文主要实现一个简单的WebSocket通信案例 包含客户端 服务器 实现了两端的通信以及客户端向服务器发送关闭连接请求的功能 实现上没有使用U
  • 解读 | VR体验式教育的优势 让教育触手可及

    大家好 我是极智视界 欢迎关注我的公众号 获取我的更多前沿科技分享 邀您加入我的知识星球 极智视界 星球内有超多好玩的项目实战源码和资源下载 链接 https t zsxq com 0aiNxERDq 很多孩子过多地沉浸在所谓的 传统教育
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • U3D游戏开发中摇杆的制作(UGUI版)

    在PC端模拟摇杆 实现玩家通过控制摇杆让玩家移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine using Unity
  • U3D游戏开发中摇杆的制作(NGUI版)

    在PC端模拟摇杆 实现控制摇杆让玩家或者物体移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine public clas
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发常见操作梳理之小地图的制作

    游戏中一般存在小地图系统 实际上就是设置一个新的摄像机放置在玩家的正上方 然后在小地图上显示新摄像机看见的东西就可以了 在小地图上一般存在放大地图和缩小地图的按钮可以方便放大和缩小地图 这些操作是如何实现的呢 接下来直接上核心代码 usin
  • 游戏开发之常见操作梳理——武器装备商店系统(NGUI版)

    游戏开发中经常出现武器商店 接下来为你们带来武器装备商店系统的具体解决办法 后续出UGUI Json版本 敬请期待 武器道具的具体逻辑 using System Collections using System Collections Ge
  • 游戏开发常用实践操作之按动任意键触发

    接下来一些笔记会对于一些大大小小的实践操作进行记录 希望对你有所帮助 在游戏中 我们经常会遇到一些按动任意键触发的操作 接下来展示核心代码 以下是对于Unity中的操作 使用的UI是NGUI 对于核心操作没有影响 你可以自己置换 void
  • 游戏开发常见操作系列之敌人系统的开发一(U3D)

    在开发游戏的过程中 我们常常会出现一些敌人攻击我们玩家 并且实现掉血以及死亡的现象 敌人还会源源不断地生成 这是怎么制作的呢 接下来为大家提供方法 其中使用了NGUI 后续会更新其它方法 敬请期待 使用HUDText实现扣血时显示文本 直接

随机推荐

  • LocalDateTime和Date得转换

    Java8 LocalDateTime获取时间戳 毫秒 秒 LocalDateTime与String互转 Date与LocalDateTime互转 LocalDateTime获取时间戳 毫秒 秒 LocalDateTime与String互转
  • vue3中JSX结合h()函数的用法简记

    vue3中JSX结合h 函数的用法简记 1 起因 为了实现表单设计通过左侧拖拽展示不同的组件 且这些组件内都渲染着一个公用的文本方法 删除和复制的功能 封装成一个组件CopyDelete 于是用到了如何通过h 函数将CopyDelete插入
  • 改变antd-mobile中Modal的进入方式

    增加属性maskTransitionName 和 transitionName maskTransitionName zoom transitionName zoom zoom样式是 scale 0 2 scale 1 参考文档
  • XML语言

    XML XML是可扩展的标记语言 标记语言 通过标签来描述数据的一门语言 标签有时我们也将其称之为元素 可扩展 标签的名字是可以自定义的 XML文件是由很多标签组成的 而标签名是可以自定义的 xml学习网站https www w3schoo
  • p51 thinkpad 拆解_ThinkPad P51自己加装内存操作图解

    把全部螺丝拧松之后 从缺口发力 分别沿着两个方向逐步拉开盖板 最终把整个盖板拆下来 第二步 拆键盘螺丝 打开大盖板之后 还有三个键盘螺丝要拆 具体位置如图所示 图片看不清的话 注意查看螺丝附近的标记 看到是键盘标记的就拆下来就对了 这是三根
  • 安装 jupyter 和 numpy,并运行jupyter,完成numpy的不少于10道的基础练习,熟悉矩阵运算。

    文章目录 一 安装Anaconda 1 在Anaconda Navigator中无法打开jupyter 二 使用jupyter notebook完成编程 1 引入库 2 基础练习 三 总结 四 引用 一 安装Anaconda 在官方网站即可
  • 微信小程序组件的传参

    父子关系 1 父向子传参 子组件 通过 properties 声明要从父组件中接收的数据 组件的属性列表 properties tabId String 父组件 通过自定义属性的形式传递数据 以子组件中定义的 key 为属性名 以要传递的数
  • 等保2.0二级安全要求

    第二级安全保护能力 应能够防护免受来自外部小型组织的 拥有少量资源的威胁源发起的恶意攻击 一般的自然灾害 以及其他相当危害程度的威胁所造成的重要资源损害 能够发现重要的安全漏洞和处置安全事件 在自身遭到损害后 能够在一段事件内恢复部分功能
  • Android中字母大小写切换的快捷键

    1 选中要切换到字母 eclipse ctrl shift x 转为大写 ctrl shift y 转为小写 2 Androidstudio字母大小写切换用一下方法或直接使用快捷键 大小写转换 Cmd Shift U Ctrl Shift
  • 使用Docker-compose部署redis主从

    废话少说 直接来上docker compose yaml文件 切记格式 version 2 networks myweb external name mysql docker compose myweb services redis mas
  • ICLR 2022最佳论文解读

    微信公众号 圆圆的算法笔记 持续更新NLP CV 搜推广干货笔记和业内前沿工作解读 后台回复 交流 加入 圆圆的算法笔记 交流群 回复 时间序列 多模态 迁移学习 NLP 图学习 表示学习 元学习 等获取各个领域干货算法笔记 今天给大家介绍
  • Nginx配置详情

    Nginx1 16 0安装详见 CentOS7 3编译安装LNMP之 一 Nginx 1 16 0安装 本文以nginx1 16 0编译安装版为例 目录如下 usr local nginx nginx的安装目录 usr local ngin
  • “logits”到底是个什么意思?

    1 什么是logits 说到Logits 首先要弄明白什么是Odds 在英文里 Odds的本意是指几率 可能性 它和我们常说的概率又有什么区别呢 在统计学里 概率 Probability 描述的是某事件A出现的次数与所有事件出现的次数之比
  • Map双列集合的四种遍历方式

    Map双列集合的四种遍历方式 第一种 键找值遍历方式 通过keySet 方法可以获取到所有键组成的Set集合 public Set
  • 关于Streamspot中StreamHash的介绍

    原文 Fast Memory efficient Anomaly Detection in Streaming Heterogeneous Graphs 在阅读这篇文章时 我对于文中所提到的StreamHash方法特别费解 在重复阅读了好几
  • 解决SwipeRefreshLayout和ViewPager滑动冲突的三种方案

    一篇文章读懂android事件消费 事件分发 事件拦截Android 源码分析事件分发机制 事件消费 事件拦截解决SwipeRefreshLayout和ViewPager滑动冲突的三种方案 在SwipeRefreshLayout的内部包一个
  • 论坛系统数据库设计

    论坛系统数据库设计 1 引言 2 QQ 摆烂式 设计 2 1数据表设计猜测 2 2分析增删查改实现方法 2 3分析QQ 摆烂式 的优缺点 2 4改进方法 3 盖楼式 设计 3 1数据表设计猜测 3 2数据表设计优化 4 推荐设计 1 引言
  • Matlab----下载和安装教程

    Matlab 下载 文件中有以下文件 Matlab 安装 步骤1 打开安装软件 步骤2 运行安装软件 在matlab 2018的文件夹下找到setup 选中右键以管理员身份运行 步骤3 选择使用文件安装密钥 然后点击下一步 步骤4 是否接收
  • 【1day】复现金和协同管理平台任意文件读取漏洞

    注 该文章来自作者日常学习笔记 请勿利用文章内的相关技术从事非法测试 如因此产生的一切不良后果与作者无关 目录 一 漏洞描述 二 影响版本 三 资产测绘 四 漏洞复现 一 漏洞
  • Unity3D-VR《静夜诗》3-开始按钮与开始文本信息

    Unity3D VR 静夜诗 3 开始按钮与开始文本信息 1 开始按钮及开始信息文本UI对象的设计 1 1容器对象PanelBeginUI 1 2开始信息文本TextBegin 1 3开始按钮BtnBegin 2 开始按钮实现凝视触发 凝视