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"。
背景还有待改进,未来希望能把物体放置在背景上,自定义背景以及层次,无限循环。
文章目录
关闭
共有 0 条评论