- 快速指南:修复《七日死》游戏启动故障,应对unityplayer.dll文件缺失
Cathy_919
游戏
要解决《七日死》游戏中unityplayer.dll文件缺失导致的启动失败问题,你可以遵循以下步骤进行快速修复:1.重新安装游戏:最直接的方法是卸载《七日死》,然后从官方或可靠的平台重新下载安装包进行安装。安装过程中通常会自动包含所有必需的DLL文件。2.手动复制DLL文件:访问Unity官方网站或其它可信资源,下载与游戏版本匹配的unityplayer.dll文件。找到游戏的安装目录,通常位于C
- unity3d引擎缓存优化技术_unity3d优化总结篇
weixin_39732991
unity3d引擎缓存优化技术
转自http://www.unitymanual.com/thread-21597-1-1.html此总结由自己经验及网上收集整理优化内容包括:1.代码方面;2.函数使用方面;3.ngui注意方面;4.数学运算方面;5.内存方面;6.垃圾回收方面等等...本着相互交流共同进步的原则好了,总结如下:1.尽量避免每帧处理,可以每隔几帧处理一次比如:[C#]纯文本查看复制代码functionUpdate
- 【Unity优化】优化Android平台拖动地图表现
留待舞人归
unityandroid游戏引擎
一、Android平台上拖动不平滑的现象团队使用的热更新框架还是比较老的ToLua,拖动地图的逻辑,实现的方案是,在地图上放置一个合适大小的Image组件作为RaycastTarget的对象,统一接受和处理跟地图拖动相关的逻辑。在C#层专门建立一个DragManager作为拖动事件管理器,其内部实现了IDragHandler,IPointerDownHandler,IPointerUpHandle
- 【Unity3D杂谈】记一次优化shader性能的过程
留待舞人归
unity游戏引擎游戏
一、问题描述我们的手游的主场景主要由一系列的2D图片的SpriteRenderer组成,有一片大的水面背景,有一个shader去实现了水颜色渐变和波纹的效果。在岛上有很多建筑物。按理论上,有更多建筑的区域应该渲染压力更大,而纯水面的地方应该只有一个shader在渲染。但是经测试发现,在一个低端的Android手机上(大约千元的三星手机)上,发现将相机拖动到只有背景海面的区域,帧率也会明显下降,明显
- Unity3D_Align With View 和Align View to Selected 相关用法
米酒老花生
unity3dunity3dAlignWithView
如果你不知道AlignWithView和AlignViewtoSelected入口在哪看截图1,MoveToView这个用法比较简单,就是把你选中的游戏对象移动到视图的中心点2,AlignWithView这个用法就要把普通游戏对象和Camera分开来说了选中普通的游戏对象:会移动游戏对象,直到游戏对象的中心点和视图的中心点对齐选中Camera:会移动Camera,直到Camera的中心點和視圖的中
- unity3D学习笔记之三:全局光照
watl0
UnityUnity
本文整理自Unity全球官方网站,原文:UNITY5-LIGHTINGANDRENDERING(文章较长,请耐心阅读)简介全局光照,简称GI,是一个用来模拟光的互动和反弹等复杂行为的算法,要精确的仿真全局光照非常有挑战性,付出的代价也高,正因为如此,现代游戏会先一定程度的预先处理这些计算,而非游戏执行时实时运算。同一场景里:没有照明(左),只有直接光源(中),和有间接光源的全局光照(右)的表现,注
- Unity3D-启动unity事件,切换平台监听
米酒老花生
unity3d
1,启动unity监听,针对unity启动监听,可以做些版本检测,以及平台切换监听,可以做些自己想做的操作[InitializeOnLoad],添加这个标示,标示在unity启动的时候会执行这个脚本unity官方给的解释是:RunningEditorScriptCodeonLaunchSometimesitisusefultobeabletorunsomeeditorscriptcodeinapr
- unity 保存实例到新预制,保存实例到原预制
米酒老花生
unityc#Prefab
保存预制,很简单的功能,但是走了弯路,记录一下吧privatevoidSavePrefab(Transformroot){ PrefabInstanceStatusstatus=PrefabUtility.GetPrefabInstanceStatus(Root.gameObject); if(status==PrefabInstanceStatus.NotAPrefab) { //如
- unity光照技术
TheAI
简介全局光照,简称GI,是一个用来模拟光的互动和反弹等复杂行为的算法,要精确的仿真全局光照非常有挑战性,付出的代价也高,正因为如此,现代游戏会先一定程度的预先处理这些计算,而非游戏执行时实时运算。同一场景里:没有照明(左),只有直接光源(中),和有间接光源的全局光照(右)的表现,注意颜色如何在不同的表面进行光的”反弹”,产生更真实的结果。在本文中,我们会描述全局光照如何在Unity里运作,带领你通
- Unity 光照技术小结
布尔君de二次方
Unity3D
原文自Unity全球官方网站,原文:UNITY5-LIGHTINGANDRENDERING简介全局光照,简称GI,是一个用来模拟光的互动和反弹等复杂行为的算法,要精确的仿真全局光照非常有挑战性,付出的代价也高,正因为如此,现代游戏会先一定程度的预先处理这些计算,而非游戏执行时实时运算。同一场景里:没有照明(左),只有直接光源(中),和有间接光源的全局光照(右)的表现,注意颜色如何在不同的表面进行光
- Unity性能优化
我不Gay
Unityunity性能优化图片优化性能
1.Texture的长宽的大小最好是2次冥,2、4、8、16、32、64、128、256、512、1024、2048,如果不是由2次冥组成的贴图,那么图形将会多占用一些显卡的内存,读取贴图时也会变慢。2.MipMaps,使用MipMaps的贴图会多占用百分之33的内存,但是可以大幅度提升效能,在UI的贴图下不使用MipMap。MipMap的缺点会占用额外的内存,因为mipmap会根据摄像机的远距渲
- unity加载场景后光照变暗
frankxixu
手游开发unity游戏引擎
关于unity加载场景后光照变暗的问题最近在做场景的加载功能时,发现加载新的场景后整个场景的光照都变暗,但是如果是直接运行当前场景的话就不会,后来才发现原来是选择的光照是realtime实时光照,在一开始的场景时,它的灯光是已经渲染好了,但重新加载的时候灯光并没有进行渲染,因此需要烘培一下,保存光照贴图信息。打开需要烘焙的场景,选择window窗口下的Rendering里的lighting,然后在
- Unity 贴图拷贝与性能对比
牙膏上的小苏打2333
Unityunity贴图
CooooopyGetPixelsGetRawTextureDataRenderTextureGraphics.CopyTexture性能对比GetPixelsvarpixels=tex.GetPixels();tex2.SetPixels(pixels);tex2.Apply();GetRawTextureDatavarpixels=tex.GetRawTextureData();tex2.Lo
- Unity中Test和TestMeshPro的区别
宇导
unityui
首先介绍一下什么是TestMeshPro:TestMeshPro是一个第三方插件,后被Unity收购后,它是Unity中文字渲染的终极解决方案。1.UGUI的Text使用了一张字体贴图,Unity把所有需要显示的字符放到了一张图集中,字符的形状是通过像素定义的。当我们放大时,像素不够用就会出现文字变模糊的情况。2.TextMeshPro的Text使用了SignedDistanceField技术去渲
- Unity坐标系规范化四元数
薛文旺
图形学unity游戏引擎图形渲染3d
Unity坐标系规范化四元数inlinefloatMagnitudeSqr(glm::quatq)//模长平方{returnDot(q,q);//q.x*q.x+q.y*q.y+q.z*q.z+q.w*q.w;}inlinefloatMagnitude(glm::quatq)//模长{returnglm::sqrt(MagnitudeSqr(q));}inlineglm::quatNormaliz
- Unity立体几何 点到直线距离计算
随风吹笛
unity3D学习unityunity3d点到直线点到面距离
Unity是一款3D引擎,设计一款3D游戏时,经常会涉及到3D的运算,比如两点之间的距离,向量的一些操作等。Unity已经封装好了一些常用函数在Vector3和Plane类中,如两点之间的距离,向量之间的夹角,向量的投影计算等。这里说一下的是点到直线的距离,根据投影及勾股定理计算。//////点到直线距离//////点坐标///直线上一个点的坐标///直线上另一个点的坐标///publicstat
- Unity:CritterAI与Recast Navigation寻路
真像大白阿
KBEngineUnity3dunity服务器导航
Unity的导航信息,可以在客户端使用,也可以导出NavMesh信息后,在服务器端进行加载几何映射,实现在服务器端进行导航,例如KBEngine,摸索了几天,把整个流程搞清楚,CritterAI可以简单的实现,在KBEngine的论坛中找到了管理员转载的该文章,讲述了详细的CritterAI和Unity寻路。UnityUnity中为一个GameObject添加导航信息首先,需要为GameObjec
- 【Unity】GUI(一)
学号1024
Unity游戏开发
GUI概念UI(userinterface)是用户与软件交互不可缺少的一部分,它包括图形化的部分和非图形化的部分(如键盘和鼠标),但现在人们谈到UI首先想到的是图形化交互界面(GUI,graphicaluserinterface,可以说,狭义上的UI即为GUI)。在游戏中,GUI包括文本和按钮等元素。UnityGUI模式Unity的GUI系统有两种模式,一种是immediatemode,另一种是r
- unity打出apk包在模拟器上运行一段时间后卡顿卡死
[email protected]
游戏开发unityandroid
笔者在开发unity游戏时,打出的apk包在模拟器上跑一段时间后卡顿卡死。具体情况为,用安卓模拟器跑游戏,然后用电脑跑其他比较耗cpu的应用,一段时间后游戏帧数逐渐降低,直到0.000几帧,相当于游戏卡死。废话不多说了,直接上货:当安卓平台开启这个功能(平滑游戏帧数)后,在模拟器上当cpu被其他应用吃了时,游戏会逐渐卡死,关闭这个选项即可。
- Unity编辑器的扩展:IMGUI
dghpxuv1568
游戏uiruntime
IMGUI介绍所有关于Editor的相关UI,包括Inspector、Hierarchy、Window、Game视图上动态创建的那些半透明UI、还有Scene视图上可添加的辅助显示UI,叫做IMGUI,全称ImmediateModeGUI。该名字来源于两类型的UI系统:immediate和retained。retained:当你设置好各种组件如Text、Button等的信息,或修改它们的相关属性后
- Unity5.0新特性------动画的StateMachineBehaviours状态机
星际行走
Unity
Statemachinebehaviours可以挂载在AnimatorController里面的动画状态上。把这个脚本挂在动画状态上,可以很清楚的知道状态控制器在执行什么状态。下面的AnimationStateCb类即继承自StateMachineBehaviour在inspector中点击AddBehaviour,选择新建脚本,就会自动继承自StateMachineBehaviour。State
- Crowd 批量添加用户(Postman 数据驱动)
叨叨软件测试
背景最近公司大量新员工入职,需要批量创建Crowd用户、设置密码、分配应用组等机械性重复工作(主要还是懒~),故把这个加餐任务分配给刚来的测试同学去研究。一是:让他了解下Postman的数据驱动,RESTfulapi的相关基础知识;二是:考察下新员工独立完成任务的能力;三是我比较懒~。Crowdapi添加用户https://community.atlassian.com/t5/Answers-De
- Unity中 .asmdef文件的作用
炉石不传说
Unity2017.3已经发布,其中一大新功能是:程序集定义文件(AssemblyDefinitionFile),下面文中我们就简称ADF得益于此功能,开发者可以在一个文件夹中自定义程序集。定义明晰的依赖关系,可以确保脚本更改后,只会重新生成必需的程序集,减少编译时间。项目越大脚本越多,编译时间必然会越长。在进行项目迭代时,这很容易制约效率,因此设置好程序集定义文件可以提高工作效率,减少脚本编译的
- unity中的动态绑定、赋值等
hhsass
unity游戏引擎
1.动态给游戏对象赋值//声明私有变量GameObjectobj;//在Strart事件中:obj=GameObject.Find("obj_name");2.动态给UI组件赋值以及绑定响应事件这里以Slider为例,Button,Toggle和Text之类的也一样//虽然直接声明我们的slider对象是一个Slider类的实例很方便地可以调用Slider的用法,但是无法动态地初始化(其实是我不会
- Unity 反射绑定UI
_wwzzxx
unity
ui的名称和定义的字段名要保持一致usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Reflection;usingUnityEngine;usingUnityEngine.EventSystems;usingUnityEngine.UI;publiccl
- Unity的Mvc模式的Model层的数据绑定
丢了玉的宝玉
unitymvcc#
设计模式:“#委托事件”数据绑定的构成;绑定源绑定目标绑定对象绑定源用于绑定的数据源,可以是任意类的实例,绑定源是数据的提供者或发送者。它可以是一个变量、属性、字段、方法或其他对象。绑定源负责维护数据的状态,并在数据发生更改时通知绑定目标。在Unity中,绑定源可以是游戏对象的组件或脚本中的变量。``用来绑定的基类;//////实现INotifyPropertyChanged接口来协助数据源进行绑
- Unity TimeLine 数据绑定
依旧im
Unityunity
恢复丢失的timeline绑定数据在使用Timline的过程中经常会发生绑定的信息丢失了的情况。一般交付给我们的资源是美术制作好的timeline动画我们并不知道绑定的节点对应物体。所以非常有必要。做一个绑定数据的记录工具。而且我们也需要对资源打包处理,在把资源做成AB包时,场景中的绑定信息也会丢失。这时就需要我们要动态的加载绑定信息。上代码。TimeLineWinEditor:主要负责创建记录文
- Unity3D 如何提升游戏运行效率详解
Thomas_YXQ
游戏Unity3D架构游戏开发Unity
前言在Unity3D中提升游戏运行效率是一个重要的方面,特别是在开发复杂或高性能需求的游戏时。以下将详细探讨几种常见的优化策略,包括技术详解和示例代码(当适用时)。对惹,这里有一个游戏开发交流小组,大家可以点击进来一起交流一下开发经验呀!1.优化渲染性能1.1使用合适的纹理压缩和格式技术详解:使用适当的纹理压缩可以显著减少内存使用和GPU负担。Unity支持多种纹理压缩格式,如ETC2、PVRTC
- Unity3D UI Toolkit数据动态绑定详解
Thomas_YXQ
uijava开发语言Unity游戏开发前端c#
前言在Unity3D中,ComputeShader是一种强大的工具,用于在GPU上执行并行计算任务,这些任务通常涉及大量的数据处理,如图像处理、物理模拟等。然而,由于GPU的并行特性,ComputeShader中的线程(也称为工作项)之间默认是不进行同步的。这意味着每个线程都是独立运行的,且无法直接访问其他线程的数据或执行状态,除非通过特定的机制进行通信。对惹,这里有一个游戏开发交流小组,大家可以
- C# 第十四弹 —————— 扩展方法
qq_29241013
C#学习C#C#
关键字this,这是一个很实用的方法,尤其是Unity3D中更为实用哦。继续举个栗子,eg:classTest{privatedoubled1;privatedoubled2;privatedoubled3;publicTest(doubled1,doubled2,doubled3){this.d1=d1;this.d2=d2;this.d3=d3;}publicdoubleSum(){retur
- 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