Unity记录7.1-界面-基本UI使用与背景的添加

汇总:Unity 记录

开源地址:asd123pwj/asdGame

摘要:UI组件的简单使用以及背景的添加。

跟随角色的坐标文本-2023/09/18

  • 创建Text时,发现只有Text Mesh Pro,且创建后出现了两个弹窗,引导我导入assets。

    • 所以我看了下里面的文档,2016版,有点老,但是版本是最新的release,3.0.6,2021。
    • 略读了一遍,感觉没有什么有用的信息,只是介绍了一下文本相关的功能。
  • 下面是跟随角色的坐标文本实现,由GPT提供,实现的过快...

private void Start(){
    character = GameObject.FindGameObjectWithTag("Player").transform; 
    _tilemap_system = GameObject.FindGameObjectWithTag("Tilemap").GetComponent<TilemapSystem>();
}

private void Update(){
    if (character != null && positionText != null){
        Vector3 screen_pos = Camera.main.WorldToScreenPoint(character.position);
        screen_pos.y += 2f;
        Vector3Int map_xy = _tilemap_system._mapping_worldXY_to_mapXY(character.position, _tilemap_system._tilemap_modify);
        positionText.text = $"pos: ({map_xy.x}, {map_xy.y})";
        positionText.rectTransform.position = screen_pos;
    }
}

按钮-2023/09/19

  • 这个也挺简单的,初始化的时候添加一下触发函数_on_button_click()即可。
    • 效果是,点击并松开后,函数触发一次。
_button.onClick.AddListener(_on_button_click); 

题外话-搜索对象-2023/09/19

  • 我发现Unity的GameObject.Find可以找到指定名称的,所以我把之前所有在inspector里面拖动的全改成了Find,并专门实现了一个类来处理。
using UnityEngine;

public class HierarchySearch : MonoBehaviour{
    GameObject _input;
    GameObject _system;
    GameObject _canvas;
    void Start(){
        _input = GameObject.Find("Input");
        _system = GameObject.Find("System");
        _canvas = GameObject.Find("Canvas");
    }

    void Update(){

    }

    public T _searchInit<T>(string type){
        if (type == "system") return (T)(object)_system.GetComponent<T>();
        else if (type == "input") return (T)(object)_input.GetComponent<T>();
        return default;
    }

    public T _searchInit<T>(string type, string name){
        if (type == "system") return (T)(object)_system.transform.Find(name).GetComponent<T>();
        else if (type == "input") return (T)(object)_input.transform.Find(name).GetComponent<T>();
        else if (type == "canvas") return (T)(object)_canvas.transform.Find(name).GetComponent<T>();
        return default;
    }
}

输入框及其与按钮的交互-2023/09/19

  • 创建一个InputField (TMP),然后找到对应GameObject,获得其.text属性即可。
  • 通过按钮打印输入框的内容如下。
void _init_button_event(){
    _button = _hierarchy_search._searchInit<Button>("canvas", "Button");
    _button.onClick.AddListener(_on_button_click);
    _input_field = _hierarchy_search._searchInit<TMP_InputField>("canvas", "InputField (TMP)");
}

void _on_button_click(){
    Debug.Log(_input_field.text);
}

开关-2023/09/20

  • 可以监听切换,属性isOn为其状态。
_toggle.onValueChanged.AddListener(_on_toggle_changed);

void _on_toggle_changed(bool isOn){
    Debug.Log(_toggle.isOn);
}

滑块-2023/09/20

  • 能设置最大值最小值,能设置是否为整数。
_slider.onValueChanged.AddListener(_on_slider_changed);

void _on_slider_changed(float value){
    Debug.Log(_slider.value);
}

ScrollView-2023/09/20

  • 有水平和垂直滚动条的显示框,在内部的Viewport-Content中添加Text组件,可以显示文本。
  • Content需要同时添加一个Content Size Fitter组件,并将Horizontal Fit和Vertical Fit设为"Preferred Size",以另ScrollView的滚动条自动适应内部大小。
  • 下面实现,点击按钮后,将ScrollView的文字更改为输入框的文字。
_scroll_view = _hierarchy_search._searchInit<ScrollRect>("canvas", "Scroll View");
_input_field = _hierarchy_search._searchInit<TMP_InputField>("canvas", "InputField (TMP)");
_button.onClick.AddListener(_on_button_click);

void _on_button_click(){
    _scroll_view.GetComponentInChildren<TMP_Text>().text = _input_field.text;
    Debug.Log(_input_field.text);
}

下拉菜单

  • 通过直接修改options属性,或者先清空后添加的方式,来修改下拉菜单的选项内容。
_dropdown = _hierarchy_search._searchInit<TMP_Dropdown>("canvas", "Dropdown");
// 直接修改
_dropdown.options = new List<TMP_Dropdown.OptionData>{new ("mwhls.top"), new ("panwj.top")};
// 先清空再修改
_dropdown.ClearOptions();
_dropdown.AddOptions(new List<TMP_Dropdown.OptionData>{new ("mwhls.top"), new ("panwj.top")});

_dropdown.onValueChanged.AddListener(_on_dropdown_changed);

void _on_dropdown_changed(int index){
    Debug.Log(_dropdown.options[index].text);
}

滚动条-2023/09/20

  • 滚动条和ScrollView内部的垂直/水平滚动条是一个东西,暂时没东西用到它,不搞。

仪表盘-2023/09/20

  • 应该是给UI分层用的,创建了一个默认仪表盘后,会盖住后面的其它UI,无法点击。
  • 目前用不上,不搞。

总结-2023/09/20

  • 初步使用了一下各UI,应该够后续的调试了,更进阶的以后再说。

背景-2024/05/10

  • 参考了这篇文章:[Unity]3D场景的背景图实现的两种方式

  • 但我目前碰到的没有那么麻烦,只是背景图片增加上去后不会随着GameObject变大而已。

    • 解决的办法是把GameObject的Rect Transform改为stretch。
  • 简述一下背景添加的流程,

    • 创建一个Canvas,其Render Mode改为"Screen Space - Camera",并对应设置Render Camera为主相机,然后调低"Order in Layer"。
    • 在Canvas下创建一个Image,其Rect Transform改为"stretch"。
  • 以及原来的UI也对应调一下,覆盖在背景和游戏对象上。

    • 更改UI的Render Mode改为"Screen Space - Camera",并对应设置Render Camera为主相机,然后调高"Order in Layer"。
  • 背景还有待改进,未来希望能把物体放置在背景上,自定义背景以及层次,无限循环。

版权声明:
作者:MWHLS
链接:https://mwhls.top/5007.html
来源:无镣之涯
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>
文章目录
关闭
目 录