IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity自定义输入方式(通过可视化面板进行输入) -> 正文阅读

[游戏开发]Unity自定义输入方式(通过可视化面板进行输入)

去年某个时间段做VR功能预研,利用Pico一体机做开发,当时通过Unity内置Inputfield组件实现外部输入,该组件貌似是调用系统内置输入方式,Pico一体机那个时候的输入方式简则是蛋疼得很,因为一调用该输入法就是双目模式,这就算了,更难受的是输入法贴到眼睛上了,根本不好使,偶尔还有穿透。当时就有了想法自定义一套输入方式,奈何一直没时间,最近遇到一个项目必须要用到自定义的,所以就简单的搞了一套将就用着。上代码先:
1:输入面板代码

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;

using UnityEngine;
using UnityEngine.UI;

using static UnityEngine.UI.GridLayoutGroup;

[RequireComponent(typeof(GridLayoutGroup))]
public class PanelInput : MonoBehaviour
{
    public delegate void DlAction(string input);
    public static event DlAction e_InputAction;
    public List<string> zimuli = new List<string>();
    public Font toChange;
    // Start is called before the first frame update
    void Start()
    {
        GridLayoutGroup group= GetComponent<GridLayoutGroup>();
        group.padding = new RectOffset(50, 50, 50, 50);
        group.spacing = new Vector2(20,20); 
        group.constraint = Constraint.FixedRowCount;
        group.constraintCount = 4;
        //添加字母到列表中。
        for (char i = 'A'; i <= 'Z'; i++)
            zimuli.Add(i.ToString());
        for (int i = 0; i < zimuli.Count; i++)
        {
            //此处为预制,也可以直接new一个空物体在添加组件,这里因为觉得太丑添加了个背景,然后做了个预制,虽然还是很丑
            GameObject item = Instantiate(Resources.Load<GameObject>("letterItem"),transform);
            item.name = zimuli[i].ToString();
            item.GetComponentInChildren<Text>().text = zimuli[i]; 
            item.GetComponentInChildren<Text>().font = toChange;
            item.GetComponentInChildren<Text>().color = Color.black; 
            item.AddComponent<Button>().onClick.AddListener(() => { OnClickBtn(item.name); }) ; 
        } 
    }

    private void OnClickBtn(string name)
    {
        gameObject.SetActive(false);
        e_InputAction(name);
    }

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

2:查询面板代码:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;

using UnityEngine;
using UnityEngine.UI;

using static UnityEngine.UI.GridLayoutGroup;

[RequireComponent(typeof(GridLayoutGroup))]
public class PanelInput : MonoBehaviour
{
    public delegate void DlAction(string input);
    public static event DlAction e_InputAction;
    public List<string> zimuli = new List<string>();
    public Font toChange;
    // Start is called before the first frame update
    void Start()
    {
        GridLayoutGroup group= GetComponent<GridLayoutGroup>();
        group.padding = new RectOffset(50, 50, 50, 50);
        group.spacing = new Vector2(20,20); 
        group.constraint = Constraint.FixedRowCount;
        group.constraintCount = 4;
        //添加字母到列表中。
        for (char i = 'A'; i <= 'Z'; i++)
            zimuli.Add(i.ToString());
        for (int i = 0; i < zimuli.Count; i++)
        {
            //此处为预制,也可以直接new一个空物体在添加组件,这里因为觉得太丑添加了个背景,然后做了个预制,虽然还是很丑
            GameObject item = Instantiate(Resources.Load<GameObject>("letterItem"),transform);
            item.name = zimuli[i].ToString();
            item.GetComponentInChildren<Text>().text = zimuli[i]; 
            item.GetComponentInChildren<Text>().font = toChange;
            item.GetComponentInChildren<Text>().color = Color.black; 
            item.AddComponent<Button>().onClick.AddListener(() => { OnClickBtn(item.name); }) ; 
        } 
    }

    private void OnClickBtn(string name)
    {
        gameObject.SetActive(false);
        e_InputAction(name);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}
[Serializable]
public class PersonData 
{
    /// <summary>
    /// 工号
    /// </summary>
    public int Id { get; set; }
    /// <summary>
    /// 姓名
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    /// 年龄
    /// </summary>
    public int Age { get; set; }
    /// <summary>
    /// 职位
    /// </summary>
    public string Occupation { get; set; }
    /// <summary>
    /// 所在部门
    /// </summary>
    public string Department { get; set; }
    /// <summary>
    /// 个人荣誉
    /// </summary>
    public string Honor { get; set; }
    public PersonData(int id ,string name ,int age,string occ,string det,string honnor) 
    {
        Id = id;
        Name = name;
        Age = age;
        Occupation = occ;
        Department = det;
        Honor = honnor; 
    }
}

3:场景面板设置:然后对应的节点挂上上面的两个脚本;
在这里插入图片描述
4:最后效果,大致原理差不多,要更好点的就是完善下输入的资源以及美化面板!在这里插入图片描述

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:58:02  更:2022-02-28 15:59:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 16:25:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码