- Unity SuperScrollView插件:高效列表视图解决方案
Bobby陈兴博
本文还有配套的精品资源,点击获取简介:UnitySuperScrollView是一个为UGUI设计的高效、全面的滚动视图插件,用于创建复杂的高性能列表视图。它支持高度的自定义化,优化了性能以应对大量数据,并提供了丰富的示例和易用的API。该插件兼容Unity新版本,并通过扩展接口支持二次开发,适用于游戏、应用等多种数据展示场景。1.UnitySuperScrollView2.4.2功能概述1.1S
- Unity UGUI GraphicRaycaster.Raycast详解
上班摸鱼君
unity游戏引擎
一、源码//////对当前Canvas上的所有可交互UI图形执行射线检测,判断是否被点击或触碰。//////指针事件的数据(包含鼠标位置、触摸点等)///用于存储命中的UI元素结果列表publicoverridevoidRaycast(PointerEventDataeventData,ListresultAppendList){//如果Canvas不存在,则无法进行任何UI检测,直接返回if(c
- ugui unity 图片缩放循环_unity ugui缩放+移动
weixin_39636245
uguiunity图片缩放循环
本文仅仅记录自己在工作中踩到的ugui的坑。并讲述如何填的坑。干货罗列在前,不愿意看的,拿东西走人,自己研究:RectTransformm_Rectm_Rect.localPositionm_Rect.rect(m_Rect.rect.widthm_Rect.rect.height)m_Rect.pivotm_Rect.sizeDelta关于ugui的排版方面,刚上手的时候,觉得:哎哟!不错,这个
- 课程目录:腾讯混元3D × Unity3D全流程开发
速易达网络
数字媒体专业课程游戏3d
结合腾讯混元3D与Unity3D的设计课程,可构建一套覆盖“AI辅助创作→模型优化→引擎集成→实战开发”的全链路学习体系。以下是系统化的课程框架及资源推荐:一、基础入门:双工具核心操作Unity3D基础界面与工作流:场景搭建、物体操作(移动/旋转/缩放)、摄像机与灯光系统15组件系统:粒子特效(火焰/雨雪)、物理引擎(刚体/碰撞体)、UGUI界面开发35脚本编程:C#语法基础(变量/函数/类)、事
- UGUI - EventTrigger
春种一粒粟秋收一粒米
Unityunity
A操作会导致B事,这就是个Entry(EventTrigger.Entry),我希望C对象上会发生这种事,只需要把这个Entry与C对象进行绑定(triggers.add(Entry))即可鼠标连点五次privatevoidClickTest(){//multipleClick代表发生点击操作后会发生MultiClick这件事,这是个事件EventTrigger.EntrymultipleClic
- FairyGUI学习
future1412
学习unity游戏ui
DrawCall优化知识点一DrawCall是什么?DC就是CPU通知GPU进行一次渲染的命令如果DC次数较多会导致游戏卡顿我们可以通过打图集,将小图合并成大图,将本应n次的DC变成1次DC来提高性能知识点二FairyGUI和UGUI以及NGUI的DrawCall优化异同相同点:3种UI都是通过打图集来优化DC不同点:UGUI和NGUI的UI元素层级会影响DC的数量,我们拼UI时,要注意不同图集的
- 【Python】英文字符频率统计
百万年薪天才少女
pythonpython
忽略大小写以降序形式输出!!!!!!重要的两句!!!!!!:items=list(f.items())##f为字典,字典转列表items.sort(key=lambdax:x[1],reverse=True)###以第二列排序完整代码:s="wopqjfioI'''765456789UGLFFDUUTKMUUGuigqefhowdjioueyrtuwfevsjcabxhniuwqdoefpoqlk
- Mask篇 (含引导层、不规则遮罩)
海尔辛
Unityunity性能优化ui
UnityUI性能优化终极指南—Mask篇(含引导层、不规则遮罩)什么是Mask?Mask是UGUI组件,限制子元素的可视区域原理:Alpha测试+遮罩裁剪(Stencil/AlphaClip)用途:滚动列表、引导层、Popup窗口裁剪、半透明遮罩背景种类:Mask(软裁剪,基于AlphaCutoff)RectMask2D(矩形硬裁剪,基于ViewportRect)总结:Mask=限制UI显示范围
- 【Unity教程】UGUI中如何动态生成精灵的几种方法
BuladeMian
Unity#Unity教程代码分析UGUIUnity资料Unity精灵代码分析Unity教程UnityUnity经验Unity精灵UGUI
sprite.create()的方法在这篇文章中【Unity&UGUI】动态改变精灵物体的图片本篇文章主要说sprite.Load()方法是如何新建精灵的---1.2D精灵物体的创建这几行代码是创建2D精灵的主要代码,这几个代码都在start()函数中//TransformEGO=Resources.Load("EmptyGO",typeof(Transform))asTransform;//go
- [特殊字符] Unity 性能优化终极指南 — Text / TextMeshPro 组件篇
海尔辛
Unityunity性能优化游戏引擎
UGUIText组件的不当使用及其性能瓶颈与优化在UnityUGUI系统中,Text组件(或其升级版TextMeshPro)是显示文本信息的核心元素。然而,如果不当使用,它极易成为UI性能瓶颈的罪魁祸首,尤其是在预制体、属性设置和代码方法调用上。1.UGUIText组件的性能瓶颈分析UGUIText组件的性能开销主要来源于以下几个方面:网格重建(MeshRegeneration):每次文本内容、字
- 【Unity】 UGUI基础控件的使用介绍
灵境引路人
unity基础unityui游戏引擎
UGUI基础控件的使用一、基本介绍二、UI控件介绍1.Text(文本)2.Image(图片)3.Button(按钮)4.InputField(输入框)5.Toggle(开关)6.Slider(滑动条)7.ScrollBar(滚动条)8.DropDown(下拉列表)9.Panel(面板)10.ScrollRect(滚动视图)一、基本介绍Unity中的UGUI(UnityGraphicalUserIn
- Unity中Websocket的简单使用
weixin_34274029
网络游戏python
首先我们需要一个websocket服务器,之前的博文中有做Tomcat架设简单Websocket服务器用的时候打开就行了,先不管它Unity中新建场景建UI(UGUI)有一个连接按钮Button一个信息输入框InputField一个发送按钮Button一个断开按钮Button一个消息显示框Text场景中建一个GameObject,在上面加个脚本,就叫WSMgr好了用到了BestHTTP这个插件us
- Unity3D UGUI性能消耗和管理详解
Clank的游戏栈
开发语言
前言在Unity3D游戏开发中,用户界面(UI)的性能和效率对于提升游戏整体体验和流畅性至关重要。UGUI(Unity'sGraphicalUserInterfaceSystem)作为Unity官方的UI系统,为开发者提供了强大而灵活的界面开发工具。然而,随着UI复杂度的增加,性能问题也逐渐显现。本文将从技术层面详细解析Unity3DUGUI的性能消耗点,并探讨相应的管理和优化策略。对惹,这里有一
- duxapp 2025-01-13 更新 支持小程序配置文件
少恭写代码
小程序
CLI支持小程序配置文件,将配置文件project.config.json,放在项目配置文件夹下,会自动合并到小程序的配置文件中用这个可以给每个项目指定自己的appid,不然每次编译不同的项目都要手动修改APPID基础库修复H5端Swpier无法切换到第一个不触发change事件的bugUI库修复TabBar组件在H5端是用switch方法的时候会刷新页面的问题
- Unity学习日记2 #UI基础篇
努力学习游戏开发
Unityunity学习ui
Unity基础之UI已经被淘汰的GUIUGUIEventSystemRectTransformCanvas组件CanvasScaler组件GraphicRaycaster组件TextImageRawImageButtonToggleDropDownInputFieldSliderScrollBarScrollViewNGUI已经被淘汰的GUI//要在生命周期GUI中调用,由于在生命周期调用频率过高
- Unity解决UI拖拽偏移问题的多种方法
被代码折磨的狗子
unity3dunity3d
使用UI拖动事件(OnDrag)拖拽ui时,位置偏移,效果图:想要实现效果方法一:最简单的方法,代码中有相应解释usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;usingUnityEngine.EventSystems;//UGUI拖动图片,脚本挂在Image上
- Unity开发UGUI Button 动态绑定带参数方法
黄小月的爹地
C#unity3dunity
我有3个按钮,它们的功能相似,在被点击时需要为一个字段赋不同的值,分别是0,1,2。我在一个脚本里通过委托的方式为这三个按钮的OnClick事件添加带有不同参数的委托,代码如下。usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;publicclass:MonoBe
- 【Unity3D插件】XCharts插件完全教程《全网最全》-专栏文章目录
恬静的小魔龙
#Unity3D之插件#XCharts插件unity编辑器
推荐阅读CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。一、前言最近在做图表类需求功能的时候,发现了一款强大的Unity3D插件,也就是XCharts图表插件,功能强大,支持多种图表。官方介绍:一款基于UGUI的功能强大、简单易用的数据可视化图表插件。支持折线图、饼
- UGUI-- InputField 文本输入控件
Go_Accepted
#Unity--UIunityUGUI
1、InputField是什么输入字段组件,是UGUI中用于处理玩家文本输入相关交互的关键组件默认创建的InputField由3个对象组成:父对象——IntputField组件依附对象以及同时在其上挂载了一个Image作为背景图子对象——文本显示组件(必备)、默认显示文本组件(必备)2、InputField参数(1)Interactable:是否接受输入(2)Transition:响应用户输入的过
- unity3d 重要框架,如 ugui、ngui、timeline、behavior designer、urp 等
微醺欧耶
c#
Unity3D提供了许多重要的框架和工具集,帮助开发者快速实现游戏功能。这些框架各有特点,适用于不同的场景。以下是对常见的Unity框架(UGUI、NGUI、Timeline、BehaviorDesigner、URP)的详细分析,包括涉及的知识点和代码示例。一、UGUI1.概述UGUI(UnityGraphicalUserInterface)是Unity内置的UI系统,基于GameObject和组
- UGUI Super ScrollView 插件
何盼思Kit
UGUISuperScrollView插件UGUISuperScrollView.zip项目地址:https://gitcode.com/open-source-toolkit/a55fe简介本仓库提供了一个强大的UGUISuperScrollView插件资源文件,包含两个版本:UGUISuperScrollView2.4.3UGUISuperScrollView2.5.3UGUISuperScr
- 探索无限可能:Unity3D UGUI Super ScrollView v2.4.4 插件推荐
咎尉裕Lilah
探索无限可能:Unity3DUGUISuperScrollViewv2.4.4插件推荐SuperScrollviewForUGUI-main.zip项目地址:https://gitcode.com/open-source-toolkit/960e9项目介绍在现代游戏和应用开发中,高效处理大量列表项是一个常见且重要的需求。无论是展示排行榜、商品列表,还是其他需要滚动显示的内容,开发者都希望能够在性能
- Unity UGUI深度优化
权心
TA技术美术-优化篇Unity开发unity优化游戏开发UGUI优化UGUIShaderDrawcall
UnityUGUI深度优化指南:实战技巧与避坑手册一、性能分析进阶(定位隐藏的性能黑洞)1.深度诊断工具链FrameDebugger:逐帧分析DrawCall生成过程,定位合批失败点(如Mask分割、材质穿插)MemoryProfiler:检测图集内存占用,发现未压缩纹理或重复图集(案例:某项目因重复打包相同按钮图集浪费12MB内存)UIDebugger:追踪Rebuild触发源,识别频繁更新的T
- Unity学习笔记之——ugui的性能优化
Summer_3416
unity学习笔记
在Unity中UI优化的核心问题就是重绘和批处理之间的平衡一、Canvas优化要点1.优化原因:(1)Unity为了性能优化,会合并Canvas下的所有元素;(2)如果把所有面板放到一个Canvas下,会造成重绘Redraw(反复绘制);下面列出了Unity中导致Canvas变脏的地方:·设置顶点脏——SetVerticesDirty,如RectTransform、Image中各种参数修改等;·设
- 【Unity3D小技巧】Unity3D中实现对InputField的自定义输入限制实例
恬静的小魔龙
#Unity3D之实用功能及技巧unity编辑器游戏引擎
推荐阅读CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。一、前言InputField是UGUI的文本输入框,自带的有输入类型控制。一共有以下几种类型:类型功能
- UGUI中的InputField下的placeholder的作用?
砍柴喂马
这两个都是文本输入信息,那么为什么要分为两个呢,有什么作用呢?经过尝试我们就会发现,其实Placeholder的作用是用来输入提示信息的。当text下没有输入内容的时候,我们自己设定的提示信息就会出现在输入框中来提示我们此处应该输入什么,以致于不使我们迷惑。当在text中输入信息后,提示信息默认就会不显示了。当此处为空时,又会出现此提示信息。所以这个Placeholder的作用就是用来制作提示信息
- Unity3D中UI层级改变详解
Thomas_YXQ
uiUnity3D架构Unity游戏开发
在Unity3D开发中,UI层级的调整是常见的需求,它直接关系到用户界面(UI)元素的显示顺序。在Unity的UI系统中,主要使用UGUI(Unity'sGraphicalUserInterface)来实现界面布局和元素展示。本文将详细讲解Unity3D中如何改变UI层级的技术方法以及给出具体的代码实现。对惹,这里有一个游戏开发交流小组,大家可以点击进来一起交流一下开发经验呀!技术详解1.层级设置
- YIUI Unity UI框架安装与使用教程
翟培任Lame
YIUIUnityUI框架安装与使用教程YIUIUnity3DUGUIFramework项目地址:https://gitcode.com/gh_mirrors/yi/YIUI1.项目目录结构及介绍YIUI项目的目录结构如下:YIUI/├──YIUIFramework/│├──Assets/││├──Scripts/││├──Resources/││├──Scenes/││├──Shaders/││
- unity中的双击按钮检测和长按按钮的检测
头号理想
游戏效果unity
之前我写过关于UGUI的接口的几篇博客地址1地址2之后今天使用上边的知识来实现一下按钮的双击和按钮长按的检测其实我们的思路就是每次按下检测按下时间如果长按时间超过某一特定的值那么我们判定长按至于双击的检测我们是当第一次按下之后抬起开始计时在特定值之前我们如果检测到按下第二次我们判定双击按钮usingUnityEngine;usingUnityEngine.Events;usingUnityEngi
- unity3d:ugui 长按按钮
四夕立羽
UGUIUnity3d技术笔记unity3dugui长按按钮
usingUnityEngine;usingSystem.Collections;usingUnityEngine.EventSystems;usingUnityEngine.Events;publicclassRepeatButton:MonoBehaviour,IPointerDownHandler,IPointerUpHandler,IPointerExitHandler{publicboo
- java杨辉三角
3213213333332132
java基础
package com.algorithm;
/**
* @Description 杨辉三角
* @author FuJianyong
* 2015-1-22上午10:10:59
*/
public class YangHui {
public static void main(String[] args) {
//初始化二维数组长度
int[][] y
- 《大话重构》之大布局的辛酸历史
白糖_
重构
《大话重构》中提到“大布局你伤不起”,如果企图重构一个陈旧的大型系统是有非常大的风险,重构不是想象中那么简单。我目前所在公司正好对产品做了一次“大布局重构”,下面我就分享这个“大布局”项目经验给大家。
背景
公司专注于企业级管理产品软件,企业有大中小之分,在2000年初公司用JSP/Servlet开发了一套针对中
- 电驴链接在线视频播放源码
dubinwei
源码电驴播放器视频ed2k
本项目是个搜索电驴(ed2k)链接的应用,借助于磁力视频播放器(官网:
http://loveandroid.duapp.com/ 开放平台),可以实现在线播放视频,也可以用迅雷或者其他下载工具下载。
项目源码:
http://git.oschina.net/svo/Emule,动态更新。也可从附件中下载。
项目源码依赖于两个库项目,库项目一链接:
http://git.oschina.
- Javascript中函数的toString()方法
周凡杨
JavaScriptjstoStringfunctionobject
简述
The toString() method returns a string representing the source code of the function.
简译之,Javascript的toString()方法返回一个代表函数源代码的字符串。
句法
function.
- struts处理自定义异常
g21121
struts
很多时候我们会用到自定义异常来表示特定的错误情况,自定义异常比较简单,只要分清是运行时异常还是非运行时异常即可,运行时异常不需要捕获,继承自RuntimeException,是由容器自己抛出,例如空指针异常。
非运行时异常继承自Exception,在抛出后需要捕获,例如文件未找到异常。
此处我们用的是非运行时异常,首先定义一个异常LoginException:
/**
* 类描述:登录相
- Linux中find常见用法示例
510888780
linux
Linux中find常见用法示例
·find path -option [ -print ] [ -exec -ok command ] {} \;
find命令的参数;
- SpringMVC的各种参数绑定方式
Harry642
springMVC绑定表单
1. 基本数据类型(以int为例,其他类似):
Controller代码:
@RequestMapping("saysth.do")
public void test(int count) {
}
表单代码:
<form action="saysth.do" method="post&q
- Java 获取Oracle ROWID
aijuans
javaoracle
A ROWID is an identification tag unique for each row of an Oracle Database table. The ROWID can be thought of as a virtual column, containing the ID for each row.
The oracle.sql.ROWID class i
- java获取方法的参数名
antlove
javajdkparametermethodreflect
reflect.ClassInformationUtil.java
package reflect;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.Modifier;
import javassist.bytecode.CodeAtt
- JAVA正则表达式匹配 查找 替换 提取操作
百合不是茶
java正则表达式替换提取查找
正则表达式的查找;主要是用到String类中的split();
String str;
str.split();方法中传入按照什么规则截取,返回一个String数组
常见的截取规则:
str.split("\\.")按照.来截取
str.
- Java中equals()与hashCode()方法详解
bijian1013
javasetequals()hashCode()
一.equals()方法详解
equals()方法在object类中定义如下:
public boolean equals(Object obj) {
return (this == obj);
}
很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们知道,String 、Math、I
- 精通Oracle10编程SQL(4)使用SQL语句
bijian1013
oracle数据库plsql
--工资级别表
create table SALGRADE
(
GRADE NUMBER(10),
LOSAL NUMBER(10,2),
HISAL NUMBER(10,2)
)
insert into SALGRADE values(1,0,100);
insert into SALGRADE values(2,100,200);
inser
- 【Nginx二】Nginx作为静态文件HTTP服务器
bit1129
HTTP服务器
Nginx作为静态文件HTTP服务器
在本地系统中创建/data/www目录,存放html文件(包括index.html)
创建/data/images目录,存放imags图片
在主配置文件中添加http指令
http {
server {
listen 80;
server_name
- kafka获得最新partition offset
blackproof
kafkapartitionoffset最新
kafka获得partition下标,需要用到kafka的simpleconsumer
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.
- centos 7安装docker两种方式
ronin47
第一种是采用yum 方式
yum install -y docker
 
- java-60-在O(1)时间删除链表结点
bylijinnan
java
public class DeleteNode_O1_Time {
/**
* Q 60 在O(1)时间删除链表结点
* 给定链表的头指针和一个结点指针(!!),在O(1)时间删除该结点
*
* Assume the list is:
* head->...->nodeToDelete->mNode->nNode->..
- nginx利用proxy_cache来缓存文件
cfyme
cache
user zhangy users;
worker_processes 10;
error_log /var/vlogs/nginx_error.log crit;
pid /var/vlogs/nginx.pid;
#Specifies the value for ma
- [JWFD开源工作流]JWFD嵌入式语法分析器负号的使用问题
comsci
嵌入式
假如我们需要用JWFD的语法分析模块定义一个带负号的方程式,直接在方程式之前添加负号是不正确的,而必须这样做:
string str01 = "a=3.14;b=2.71;c=0;c-((a*a)+(b*b))"
定义一个0整数c,然后用这个整数c去
- 如何集成支付宝官方文档
dai_lm
android
官方文档下载地址
https://b.alipay.com/order/productDetail.htm?productId=2012120700377310&tabId=4#ps-tabinfo-hash
集成的必要条件
1. 需要有自己的Server接收支付宝的消息
2. 需要先制作app,然后提交支付宝审核,通过后才能集成
调试的时候估计会真的扣款,请注意
- 应该在什么时候使用Hadoop
datamachine
hadoop
原帖地址:http://blog.chinaunix.net/uid-301743-id-3925358.html
存档,某些观点与我不谋而合,过度技术化不可取,且hadoop并非万能。
--------------------------------------------万能的分割线--------------------------------
有人问我,“你在大数据和Hado
- 在GridView中对于有外键的字段使用关联模型进行搜索和排序
dcj3sjt126com
yii
在GridView中使用关联模型进行搜索和排序
首先我们有两个模型它们直接有关联:
class Author extends CActiveRecord {
...
}
class Post extends CActiveRecord {
...
function relations() {
return array(
'
- 使用NSString 的格式化大全
dcj3sjt126com
Objective-C
格式定义The format specifiers supported by the NSString formatting methods and CFString formatting functions follow the IEEE printf specification; the specifiers are summarized in Table 1. Note that you c
- 使用activeX插件对象object滚动有重影
蕃薯耀
activeX插件滚动有重影
使用activeX插件对象object滚动有重影 <object style="width:0;" id="abc" classid="CLSID:D3E3970F-2927-9680-BBB4-5D0889909DF6" codebase="activex/OAX339.CAB#
- SpringMVC4零配置
hanqunfeng
springmvc4
基于Servlet3.0规范和SpringMVC4注解式配置方式,实现零xml配置,弄了个小demo,供交流讨论。
项目说明如下:
1.db.sql是项目中用到的表,数据库使用的是oracle11g
2.该项目使用mvn进行管理,私服为自搭建nexus,项目只用到一个第三方 jar,就是oracle的驱动;
3.默认项目为零配置启动,如果需要更改启动方式,请
- 《开源框架那点事儿16》:缓存相关代码的演变
j2eetop
开源框架
问题引入
上次我参与某个大型项目的优化工作,由于系统要求有比较高的TPS,因此就免不了要使用缓冲。
该项目中用的缓冲比较多,有MemCache,有Redis,有的还需要提供二级缓冲,也就是说应用服务器这层也可以设置一些缓冲。
当然去看相关实现代代码的时候,大致是下面的样子。
[java]
view plain
copy
print
?
public vo
- AngularJS浅析
kvhur
JavaScript
概念
AngularJS is a structural framework for dynamic web apps.
了解更多详情请见原文链接:http://www.gbtags.com/gb/share/5726.htm
Directive
扩展html,给html添加声明语句,以便实现自己的需求。对于页面中html元素以ng为前缀的属性名称,ng是angular的命名空间
- 架构师之jdk的bug排查(一)---------------split的点号陷阱
nannan408
split
1.前言.
jdk1.6的lang包的split方法是有bug的,它不能有效识别A.b.c这种类型,导致截取长度始终是0.而对于其他字符,则无此问题.不知道官方有没有修复这个bug.
2.代码
String[] paths = "object.object2.prop11".split("'");
System.ou
- 如何对10亿数据量级的mongoDB作高效的全表扫描
quentinXXZ
mongodb
本文链接:
http://quentinXXZ.iteye.com/blog/2149440
一、正常情况下,不应该有这种需求
首先,大家应该有个概念,标题中的这个问题,在大多情况下是一个伪命题,不应该被提出来。要知道,对于一般较大数据量的数据库,全表查询,这种操作一般情况下是不应该出现的,在做正常查询的时候,如果是范围查询,你至少应该要加上limit。
说一下,
- C语言算法之水仙花数
qiufeihu
c算法
/**
* 水仙花数
*/
#include <stdio.h>
#define N 10
int main()
{
int x,y,z;
for(x=1;x<=N;x++)
for(y=0;y<=N;y++)
for(z=0;z<=N;z++)
if(x*100+y*10+z == x*x*x
- JSP指令
wyzuomumu
jsp
jsp指令的一般语法格式: <%@ 指令名 属性 =”值 ” %>
常用的三种指令: page,include,taglib
page指令语法形式: <%@ page 属性 1=”值 1” 属性 2=”值 2”%>
include指令语法形式: <%@include file=”relative url”%> (jsp可以通过 include