1.Scroll View
Horizontal Scrollbar/Vertical Scrollbar参数Visibility设置滑动条设置水平/垂直滑动条可见/隐藏
Viewport 视口 信息可见范围
Content 内容 所有展示的内容添加作为其子物体
2.Dropdown 下拉列表
Label 默认选项框
Arrow 下拉列表箭头
Template 模板/下拉列表的所有值(视口Veiwport和垂直滑动条)
3.UGUI布局管理
水平布局,垂直布局,网格布局
网格布局(适用于背包),给Panel添加网格布局组件Grid Layout Group
Padding 网格与边缘的水平垂直间距
Cell Size 单元格大小
Spacing 单元格与单元格之间的水平垂直间距
4.背包物品交换
给每个单元格添加Canvas Group组件,盒子碰撞器(覆盖单元格,用于射线碰撞检测,拖拽的物体浮于渲染最高处,向下层发射射线) //纠正 不需要盒子碰撞器,射线碰撞检测的是渲染层
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
/*
*创建者:
*创建时间:
*描述:
*版本:
*/
public class _3_8_1 : MonoBehaviour,IDragHandler,IBeginDragHandler,IEndDragHandler,IInitializePotentialDragHandler
{
Sprite spr;//图片变量用于两张图片的交换,作为中间变量
CanvasGroup cg;//单元格添加的组件
// Start is called before the first frame update
void Start()
{
cg= GetComponent<CanvasGroup>();
}
// Update is called once per frame
void Update()
{
}
void IDragHandler.OnDrag(PointerEventData eventData)//拖拽中
{
transform.position = Input.mousePosition;//鼠标的位置就是拖拽物品的位置
}
public void OnBeginDrag(PointerEventData eventData)
{
cg.blocksRaycasts = false;//blocksRaycasts为false时可以检测下一层物品(由于拖拽的物品处于渲染最高层,会遮挡住下一层物品)
}
public void OnInitializePotentialDrag(PointerEventData eventData)
{
}
public void OnEndDrag(PointerEventData eventData)//拖拽结束
{
cg.blocksRaycasts = true;//不再进行射线检测
//transform.position = eventData.position;//把拖拽的对象,放到当前位置
if (eventData.pointerEnter!=null&&eventData.pointerEnter.CompareTag("Equip"))//若射线碰撞检测到的物体不为Null并且该游戏对象的标签为Equip(装备)才进行下一步操作
{
GameObject go = eventData.pointerEnter;//拖拽物品所碰撞到的对象(交换的对象);
spr = go.GetComponent<Image>().sprite;//将交换的对象的图片用中间变量存储
go.GetComponent<Image>().sprite = transform.GetComponent<Image>().sprite;//将拖拽物品的图片赋值给交换的对象
transform.GetComponent<Image>().sprite = spr;//将交换的对象的图片赋值给拖拽的物品
go.transform.localPosition = Vector3.zero;//将各自的相对(父物体)坐标置为0;
transform.localPosition= Vector3.zero;
}
else
{
transform.localPosition = Vector3.zero;//若没有碰撞对象或碰撞到的对象标签不为Equip则不能进行交换,并且将图片的位置复原(OnDrag方法中图片的位置在拖拽时发生了改变,停留在拖拽结束的那一帧鼠标所在的位置);
}
}
}