2024-04-08 NO.6 Quest3 自定义交互事件

文章目录

  • [1 交互事件------更改 Cube 颜色](#1 交互事件——更改 Cube 颜色)
  • [2 交互事件------创建 Cube](#2 交互事件——创建 Cube)
    • [2.1 非代码方式](#2.1 非代码方式)
    • [2.2 代码方式](#2.2 代码方式)

在开始操作前,我们导入上次操作的场景,相关介绍在 《2024-04-08 NO.5 Quest3 手势追踪进行 UI 交互-CSDN博客》 文章中。

1 交互事件------更改 Cube 颜色

(1)在场景中创建一个方块 Cube,修改其缩放大小。

(2)在 Button 上添加脚本 "Interactable Unity Event Wrapper",并关联如下引用。

  • Interactable View <-- "Poke Interactable" 脚本。

(3)在 When Hover() 中添加事件,并关联上 Cube 物体。选择 MeshRenderer > Material material。并将材质球 Red 进行关联。

(4)同样的方式对 When Select() 进行操作,关联 Blue 材质。对 When Unselect() 关联 Default-Material。

​ 此时运行程序,即可点击按钮实现更改 Cube 颜色的功能。

2 交互事件------创建 Cube

2.1 非代码方式

​ 首先复制一份按钮。

(1)创建如下脚本 ItemSpawner.cs。

csharp 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ItemSpawner : MonoBehaviour
{
    public GameObject spawnObj;
    public Transform  spawnPoint;

    // Start is called before the first frame update
    void Start() { }

    // Update is called once per frame
    void Update() { }

    public void SpawnItem() {
        Object.Instantiate(spawnObj, spawnPoint.position, spawnPoint.rotation);
    }
}

(2)将 ItemSpawner.cs 挂载到 Button (2) 上。同时创建一个空物体,用于决定新 Cube 的生成位置,并赋值相关引用。

(3)在 "Interactable Unity Event Wrapper" 脚本中,新建 When Select() 事件,关联 "ItemSpawner" 脚本,选择 ItemSpawner > SpawnItem。

​ 此时运行程序,即可点击按钮实现创建新 Cube 的功能。

2.2 代码方式

​ 将 ItemSpawner.cs 脚本内容改为如下即可。

csharp 复制代码
using System.Collections;
using System.Collections.Generic;
using Oculus.Interaction;
using UnityEngine;

public class ItemSpawner : MonoBehaviour
{
    public GameObject spawnObj;
    public Transform  spawnPoint;

    private InteractableUnityEventWrapper _eventWrapper;

    // Start is called before the first frame update
    void Start() {
        _eventWrapper = GetComponent<InteractableUnityEventWrapper>();
        _eventWrapper.WhenSelect.AddListener(SpawnItem);
    }

    // Update is called once per frame
    void Update() { }

    public void SpawnItem() {
        Object.Instantiate(spawnObj, spawnPoint.position, spawnPoint.rotation);
    }
}
相关推荐
烂蜻蜓11 小时前
C 语言命令行参数:让程序交互更灵活
c语言·开发语言·交互
大千UI工场17 小时前
UI设计中的交互技巧:如何让按钮更有反馈感?
ui·交互
江上清风山间明月3 天前
一周掌握Flutter开发--9. 与原生交互(下)
flutter·交互·原生·methodchannel
chen_song_4 天前
WebRTC的ICE之TURN协议的交互流程中继转发Relay媒体数据的turnserver的测试
算法·音视频·webrtc·交互·媒体
Julian.zhou5 天前
MCP服务:五分钟实现微服务治理革命,无缝整合Nacos/Zookeeper/OpenResty
人工智能·微服务·zookeeper·交互·openresty
计算机毕设定制辅导-无忧学长5 天前
HTML 与 JavaScript 交互:学习进程中的新跨越(一)
javascript·html·交互
豆芽8196 天前
基于Web的交互式智能成绩管理系统设计
前端·python·信息可视化·数据分析·交互·web·数据可视化
Hello.Reader6 天前
基于 WebAssembly 的 Game of Life 交互实现
交互·wasm
Julian.zhou7 天前
从Manus到OpenManus:AI智能体技术如何重塑未来生活场景?
人工智能·自然语言处理·生活·交互
承前智7 天前
基于Hbuilder X的uni-app连接OneNET云平台及AI交互 实战指南(二)——获取数据流模型的数据
uni-app·交互