privateintXbox_One_Controller=0;privateintPS4_Controller=0;voidUpdate(){string[]names=Input.GetJoystickNames();for(intx=0;x
【Unity游戏开发教程】零基础带你从小白到超神30——UI组件和布局的使用
向宇it
#unity基础知识unityui游戏引擎游戏
UIUI设计又称界面设计,是指对软件的人机交互、操作逻辑、界面美观的整体设计,UI就相当于人可以看到的界面,并且可以对UI进行交互。Canvas画布所有的UI组件都在画布的子集里,画布相当于所有UI组件的容器,每当创建一个UI物体时,Canvas都会自动创建,所有的UI元素都必须是Canvas的子物体,和Canvas一同创建的还有一个EventSystem,它是一个基于Input的事件系统,可以对
【制作100个unity游戏之24】unity制作一个3D动物AI生态系统游戏1(附项目源码)
向宇it
#制作100个unity游戏unity游戏3d游戏引擎人工智能
最终效果文章目录最终效果系列目录前言导入AI导航系统导航烘培添加羊源码完结系列目录前言欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第24篇中,我们将探索如何用unity制作一个3D动物AI生态系统游戏,我会附带项目源码,以便你们更好理解它。导入AI导航系统导航系统基础介绍可以看我之前的文章:【Unity游戏开发教程】零基础带你从小白
安洵杯 2023 RE 牢大想你了 WP
Pisces50002
unityc#c语言
可以看到得到的是一个Unity文件从Lazzaro师傅的blog里可以得到经验Unity逆向|Lazzaro工具UnityDll逆向一般的Unity3D游戏的主逻辑都在Assembly-CSarp.dll中,所以需要dll文件逆向/重新打包工具。Unity3D开发的游戏,其核心代码都在这个dll文件中,所以逆向/修改这个dll文件就可以了。ILSpy用于查看dll程序逻辑。ILDASM用于反编译d
Unity游戏开发架构设计指南
CCSBRIDGE
unity游戏引擎
前言在Unity游戏开发中,合理的架构设计对于确保项目的可维护性和可扩展性至关重要。一个良好的架构能够帮助开发者更有效地组织代码,便于团队协作,同时也能够应对项目需求的变化。初步理解游戏架构游戏架构是指在游戏开发过程中,对各种组件(如数据管理、游戏逻辑、用户界面等)的组织和管理方式。一个好的架构设计应该能够使得各个组件高度解耦,便于单独开发和测试,同时也能够容易地进行修改和扩展。架构设计的关键步骤
Unity3D开发之鼠标单双击判断
JayW就是我
unity
在开发游戏和交互式应用程序时,经常需要对用户的鼠标点击进行准确的响应。其中,单击和双击事件的判断是常见需求之一。本文将介绍如何在Unity中优雅地实现鼠标单双击判断,使代码结构清晰、易读、易维护。背景在许多项目中,我们需要监测用户的鼠标点击事件,并根据单击和双击分别触发不同的操作。过去的实现方式可能会显得有些繁琐,而我们将展示一种更为简便的方法,使代码看起来更加清晰。简单而有效的实现首先,让我们看
从编程中理解:退一步海阔天空
TechCreator
心理编程编程心理
编程中,“退一步海阔天空”的理念指的是在面对问题时,有时过于纠结于细节或局部优化,反而会陷入困境。这时,如果能暂时放下手中的具体工作,从更高的层面或者换个角度来审视整个系统的设计和架构,可能会发现更好的解决方案。在Unity游戏开发中,这一原则体现为对代码的模块化、抽象化以及设计模式的应用。让我们通过一个故事来阐述这个概念:在一个虚拟的游戏世界里,开发者小明正在为一款基于Unity引擎的角色扮演游
Unity之做一个最简单的FPS游戏demo
Lazy龙
摸鱼学Unity游戏unity游戏引擎
目录FPS游戏Demo1.新建FPS模板项目⚒️2.装备枪3.设置射击功能4.制造一个子弹预制体5.发射子弹说起来小编学Unity差不多一个月了,都是利用上班摸鱼时间学的(doge.jpg)。今天终于迎来了一直想做的FPS游戏demo。【10分钟制作第一人称射击游戏-Unity游戏开发】小编是根据小破站这个教程学的,好的教程分享给大家,然后在此基础上小编还加了子弹拖尾和开火特效。下面小编以博客的形
Unity游戏开发图片纹理压缩方案
Coding小宇
脚本unity
对纹理的处理是智能的:不论你放入的是PNG,PSD还是TGA,它们都会被自动转换成Unity自己的Texture2D格式。在Texture2D的设置选项中,你可以针对不同的平台,设置不同的压缩格式,如IOS设置成PVRTC4,平台设置成RGBA16等。嗯,非常的智能。但是,在一些进阶的使用中,一些情况是难以满足的。比如,我们NGUI的图集纹理,在Android平台,使用ETC1纹理+Alpha通道
干货:Unity游戏开发图片纹理压缩方案
学习是一种状态
unityshaderunity图片游戏开发压缩
原文链接:http://www.jianshu.com/p/f7c3741f22afUnity3d引擎对纹理的处理是智能的:不论你放入的是PNG,PSD还是TGA,它们都会被自动转换成Unity自己的Texture2D格式。在Texture2D的设置选项中,你可以针对不同的平台,设置不同的压缩格式,如iOS设置成PVRTC4,Android平台设置成RGBA16等。嗯,非常的智能。但是,在一些进阶
Unity游戏开发面试知识点全解读
Unity游戏开发
unity面试游戏引擎
在数字化世界中,Unity游戏开发不仅是一种艺术形式和商业活动,而且已成为推动整个数字娱乐产业创新和进步的重要力量。Unity以其易用性、高效性和灵活性,赢得了全球开发者的青睐,从独立开发者到大型游戏公司都广泛使用。掌握Unity开发技能对进入游戏行业的人至关重要。Unity游戏开发者需要具备扎实的编程基础、深入的游戏设计理念、图形动画技术理解和性能优化能力,这些技能通常在面试中得到检验。本文旨在
Unity 中介者模式 (实例详解)
极致人生-010
unityC#设计模式详解命令模式unityc#中介者模式
文章目录简介实例1:玩家与UI交互实例2:战斗模块中的攻击事件协调实例3:游戏场景中的事件广播实例4:模块间通信-地图导航与角色移动实例5:UI模块间同步-菜单切换与选项状态简介在Unity游戏开发中,中介者(Mediator)模式用于降低多个对象之间的耦合度,通过引入一个中介类来封装和管理对象间的交互。下面我将提供五个简化的代码实例来说明如何在Unity项目中应用中介者模式:实例1:玩家与UI交
Unity Enum位掩码(BitMask)的运用
SlowFeather
unity游戏引擎
UnityEnum位掩码(BitMask)的运用前言项目使用场景代码编写定义技能枚举角色类学习技能检查技能添加并设置脚本运行效果总结感谢前言在Unity游戏开发中,我们经常会面临需要对一组相关的状态进行管理的情况。Enum位掩码是一种有效的方法,可以帮助我们简洁而灵活地处理这类状态。本文将介绍在Unity中如何使用Enum位掩码,并通过一个实际项目的案例来进行详细讲解。项目使用场景假设我们正在开发
Unity 代理模式(实例详解)
极致人生-010
unityC#设计模式详解unity代理模式游戏引擎
文章目录实例1:资源加载代理(AssetLoadingProxy)实例2:网络请求代理(NetworkRequestProxy)实例3:性能优化代理(PerformanceOptimizationProxy)实例4:权限控制代理(AuthorizationControlProxy)实例5:热更新代理(HotReloadProxy)在Unity游戏开发中,代理模式(ProxyDesignPatter
【Unity游戏开发教程】零基础带你从小白到超神23——新版角色动画的具体使用
向宇it
#unity基础知识unity动画游戏引擎
导入动画人物资源前往资源商城购买AdventureCharacter人物资源和BasicMotionsFREE动画资源下载导入拖入角色预览动画给人物绑定默认动画注意,这里我们想学习动画的使用,所以我们就不用资源自带的动画器控制器了,新建ManController控制器拖入绑定控制器编辑控制器绑定两个动画切换拖入新的动画,说话动画创建过渡,连接两个动画
【Unity游戏开发教程】零基础带你从小白到超神29——导航系统
向宇it
#unity基础知识unity游戏引擎
导航系统网络游戏中的自动寻路功能,点击地图上的某个位置,角色自动跑到这个位置RTS和Moba类游戏中鼠标右键点击一个位置,角色自动走向这个位置,并且还具备规避障碍物的能力以上使用的功能就是导航,或者叫寻路主要具备两个特点:以最短路径前往目标规避障碍物打开导航导航面板分为4个部分:解释代理用于对需要进行导航的角色进行分类,默认有一个Humanoid,也就是人类。但是常规情况下,导航网格并不基于这个生
【Unity小技巧】一个脚本实现控制3D远程/近战敌人AI
向宇it
#unity实战unity3d游戏引擎游戏
最终效果文章目录最终效果烘培导航地图配置敌人导航数据简单配置敌人动画敌人AI脚本完结想了解导航的其他内容可以看我这篇文章:【Unity游戏开发教程】零基础带你从小白到超神29——导航系统烘培导航地图选中地面,设置为静态导航点击烘培,可行走区域选中一些障碍物,也设置为静态导航选择为不适合步行重新点击烘培,一些障碍物区域就不可以行走了配置敌人导航数据给敌人加导航组件注意:增大角速度,是为了让敌人旋转更
Unity 桥接模式(实例详解)
极致人生-010
unityC#设计模式详解unity桥接模式c#
文章目录示例1:角色与装备系统示例2:UI控件库示例3:渲染引擎模块示例4:AI决策树算法示例5:物理模拟引擎在Unity游戏开发中,桥接模式(BridgePattern)是一种设计模式,它用于将抽象部分与其实现部分分离,从而允许它们独立变化。这种模式适用于以下场景:当一个类有多个维度的变化,并且希望这些变化可以独立扩展而不影响彼此时。如果直接使用继承来处理多维度变化会导致类爆炸问题,即需要创建大
Unity3D开发之游戏兑换码的分析设计以及生成
Jeno李
U3D
原贴地址:http://gad.qq.com/article/detail/71590101、前言抛开引擎来说,其实对于很多游戏开发里有一个比较常见的模块就是兑换码功能。在入游戏开发坑之初,我也被要求过开发过一个这样的模块,然后我网上搜过好像也没有相关的文章,在这里打算把我个人对游戏兑换码的设计进行阐述,当然只是浅浅的见解,进一步的扩展还要根据项目自身进行,用Unity3D作为开发平台来说明罢了。
Windows平台实现Unity下窗体|摄像头|屏幕采集推送
音视频牛哥
流媒体unityrtmpunity3drtmp推流unity3d推送rtmpunityrtmp推流unity3d采集窗体
技术背景随着Unity3D的应用范围越来越广,越来越多的行业开始基于Unity3D开发产品,如传统行业中虚拟仿真教育、航空工业、室内设计、城市规划、工业仿真等领域。基于此,好多开发者苦于在Unity环境下,没有低延迟的推拉流解决方案,前几年,我们在Unity环境下推出了跨平台低延迟的RTMP|RTSP直播播放器,很好的解决了好多对延迟要求苛刻的使用场景。随着时间的推移,越来越多的开发者联系我们,希
猿学-unity游戏开发之entitas框架
猿学
框架介绍entitas是一个超快、超轻量的c#Entity-Component-System(ECS)框架,专门为Unity引擎设计。提供内部缓存和高速的组件访问,经过精心设计,可以在垃圾收集环境中最优地工作。框架解析要理解框架,就需要知道这四种概念,分别是:Entiy实体、Context环境、Group组、Collector收集器。如图,在一个Context中,会有很多Entity,每个Enti
Unity客户端面试题集锦
Unity游戏开发
面试真题unity算法
正在求职中&近期准备开始求职的小伙伴们看过来~贴心的我,这次又给大家准备了【面试题大礼包】!!Unity游戏开发工程师的面试过程中,我们总能接触到许多眼熟的面试题目,这部分的分数如果不小心丢了,那才是最可惜的!大厂的大门只会早早就在你眼前关上......网上各路面试题随便一搜一大堆,里面难免会有一些重复率高、不够精准的、“岁数太老”的题目!考虑到能方便大家随时查漏补缺,本文一共为大家整理出了20道
Unity3d开发中的特殊文件夹
UnknowWind
unity3d管理
AssetsAssets文件夹是unity项目中放置游戏资源的主文件夹。该文件夹中的内容将直接反应在编辑器的Project视口中。许多系统API基于该文件夹。与脚本编译顺序相关的文件夹在unity开发中,我们可以为自己的项目随意命名文件夹以管理游戏资源,包括代码资源。但unity保留了一些特殊文件夹用来做特殊用途,例如编译顺序。unity的脚本编译有4个阶段(phase),脚本处在哪个编译阶段取决
关于Unity游戏开发场景切换:Time.timeScale的捣乱
米芝鱼
unity学习游戏
在制作场景切换功能的时候,我用的是SceneManager.LoadScene函数,从主界面场景切换到关卡1场景,从关卡1场景切换到关卡2场景都是没有问题的。但是,当我在点击Pause按钮来到暂停界面,点击BackMenu按钮准备回到主界面场景时,只显示了一片空白,场景没有被完全加载。我的代码是这样的:usingSystem.Collections;usingSystem.Collections.
jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque
qiaolevip
每天进步一点点学习永无止境跨域众观千象
XMLHttpRequest cannot load http://v.xxx.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access. test.html:1
mysql 分区查询优化
annan211
java分区优化mysql
分区查询优化
引入分区可以给查询带来一定的优势,但同时也会引入一些bug.
分区最大的优点就是优化器可以根据分区函数来过滤掉一些分区,通过分区过滤可以让查询扫描更少的数据。
所以,对于访问分区表来说,很重要的一点是要在where 条件中带入分区,让优化器过滤掉无需访问的分区。
可以通过查看explain执行计划,是否携带 partitions
MYSQL存储过程中使用游标
chicony
Mysql存储过程
DELIMITER $$
DROP PROCEDURE IF EXISTS getUserInfo $$
CREATE PROCEDURE getUserInfo(in date_day datetime)-- -- 实例-- 存储过程名为:getUserInfo-- 参数为:date_day日期格式:2008-03-08-- BEGINdecla
mysql 和 sqlite 区别
Array_06
sqlite
转载:
http://www.cnblogs.com/ygm900/p/3460663.html
mysql 和 sqlite 区别
SQLITE是单机数据库。功能简约,小型化,追求最大磁盘效率
MYSQL是完善的服务器数据库。功能全面,综合化,追求最大并发效率
MYSQL、Sybase、Oracle等这些都是试用于服务器数据量大功能多需要安装,例如网站访问量比较大的。而sq
pinyin4j使用
oloz
pinyin4j
首先需要pinyin4j的jar包支持;jar包已上传至附件内
方法一:把汉字转换为拼音;例如:编程转换后则为biancheng
/**
* 将汉字转换为全拼
* @param src 你的需要转换的汉字
* @param isUPPERCASE 是否转换为大写的拼音; true:转换为大写;fal
微博发送私信
随意而生
微博
在前面文章中说了如和获取登陆时候所需要的cookie,现在只要拿到最后登陆所需要的cookie,然后抓包分析一下微博私信发送界面
http://weibo.com/message/history?uid=****&name=****
可以发现其发送提交的Post请求和其中的数据,
让后用程序模拟发送POST请求中的数据,带着cookie发送到私信的接入口,就可以实现发私信的功能了。
jsp
香水浓
jsp
JSP初始化
容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,复写jspInit()方法就行了
JSP执行
这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。
当JSP网页完成初始化后
在 Windows 上安装 SVN Subversion 服务端
AdyZhang
SVN
在 Windows 上安装 SVN Subversion 服务端2009-09-16高宏伟哈尔滨市道里区通达街291号
最佳阅读效果请访问原地址:http://blog.donews.com/dukejoe/archive/2009/09/16/1560917.aspx
现在的Subversion已经足够稳定,而且已经进入了它的黄金时段。我们看到大量的项目都在使
android开发中如何使用 alertDialog从listView中删除数据?
aijuans
android
我现在使用listView展示了很多的配置信息,我现在想在点击其中一条的时候填出 alertDialog,点击确认后就删除该条数据,( ArrayAdapter ,ArrayList,listView 全部删除),我知道在 下面的onItemLongClick 方法中 参数 arg2 是选中的序号,但是我不知道如何继续处理下去 1 2 3
jdk-6u26-linux-x64.bin 安装
baalwolf
linux
1.上传安装文件(jdk-6u26-linux-x64.bin)
2.修改权限
[root@localhost ~]# ls -l /usr/local/jdk-6u26-linux-x64.bin
3.执行安装文件
[root@localhost ~]# cd /usr/local
[root@localhost local]# ./jdk-6u26-linux-x64.bin&nbs
MongoDB经典面试题集锦
BigBird2012
mongodb
1.什么是NoSQL数据库?NoSQL和RDBMS有什么区别?在哪些情况下使用和不使用NoSQL数据库?
NoSQL是非关系型数据库,NoSQL = Not Only SQL。
关系型数据库采用的结构化的数据,NoSQL采用的是键值对的方式存储数据。
在处理非结构化/半结构化的大数据时;在水平方向上进行扩展时;随时应对动态增加的数据项时可以优先考虑使用NoSQL数据库。
在考虑数据库的成熟
JavaScript异步编程Promise模式的6个特性
bijian1013
JavaScriptPromise
Promise是一个非常有价值的构造器,能够帮助你避免使用镶套匿名方法,而使用更具有可读性的方式组装异步代码。这里我们将介绍6个最简单的特性。
在我们开始正式介绍之前,我们想看看Javascript Promise的样子:
var p = new Promise(function(r
[Zookeeper学习笔记之八]Zookeeper源代码分析之Zookeeper.ZKWatchManager
bit1129
zookeeper
ClientWatchManager接口
//接口的唯一方法materialize用于确定那些Watcher需要被通知
//确定Watcher需要三方面的因素1.事件状态 2.事件类型 3.znode的path
public interface ClientWatchManager {
/**
* Return a set of watchers that should
【Scala十五】Scala核心九:隐式转换之二
bit1129
scala
隐式转换存在的必要性,
在Java Swing中,按钮点击事件的处理,转换为Scala的的写法如下:
val button = new JButton
button.addActionListener(
new ActionListener {
def actionPerformed(event: ActionEvent) {
Android JSON数据的解析与封装小Demo
ronin47
转自:http://www.open-open.com/lib/view/open1420529336406.html
package com.example.jsondemo;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
impor
[设计]字体创意设计方法谈
brotherlamp
UIui自学ui视频ui教程ui资料
从古至今,文字在我们的生活中是必不可少的事物,我们不能想象没有文字的世界将会是怎样。在平面设计中,UI设计师在文字上所花的心思和功夫最多,因为文字能直观地表达UI设计师所的意念。在文字上的创造设计,直接反映出平面作品的主题。
如设计一幅戴尔笔记本电脑的广告海报,假设海报上没有出现“戴尔”两个文字,即使放上所有戴尔笔记本电脑的图片都不能让人们得知这些电脑是什么品牌。只要写上“戴尔笔
单调队列-用一个长度为k的窗在整数数列上移动,求窗里面所包含的数的最大值
bylijinnan
java算法面试题
import java.util.LinkedList;
/*
单调队列 滑动窗口
单调队列是这样的一个队列:队列里面的元素是有序的,是递增或者递减
题目:给定一个长度为N的整数数列a(i),i=0,1,...,N-1和窗长度k.
要求:f(i) = max{a(i-k+1),a(i-k+2),..., a(i)},i = 0,1,...,N-1
问题的另一种描述就
struts2处理一个form多个submit
chiangfai
struts2
web应用中,为完成不同工作,一个jsp的form标签可能有多个submit。如下代码:
<s:form action="submit" method="post" namespace="/my">
<s:textfield name="msg" label="叙述:">
shell查找上个月,陷阱及野路子
chenchao051
shell
date -d "-1 month" +%F
以上这段代码,假如在2012/10/31执行,结果并不会出现你预计的9月份,而是会出现八月份,原因是10月份有31天,9月份30天,所以-1 month在10月份看来要减去31天,所以直接到了8月31日这天,这不靠谱。
野路子解决:假设当天日期大于15号
mysql导出数据中文乱码问题
daizj
mysql中文乱码导数据
解决mysql导入导出数据乱码问题方法:
1、进入mysql,通过如下命令查看数据库编码方式:
mysql> show variables like 'character_set_%';
+--------------------------+----------------------------------------+
| Variable_name&nbs
SAE部署Smarty出现:Uncaught exception 'SmartyException' with message 'unable to write
dcj3sjt126com
PHPsmartysae
对于SAE出现的问题:Uncaught exception 'SmartyException' with message 'unable to write file...。
官方给出了详细的FAQ:http://sae.sina.com.cn/?m=faqs&catId=11#show_213
解决方案为:
01
$path
《教父》系列台词
dcj3sjt126com
Your love is also your weak point.
你的所爱同时也是你的弱点。
If anything in this life is certain, if history has taught us anything, it is
that you can kill anyone.
不顾家的人永远不可能成为一个真正的男人。 &
mongodb安装与使用
dyy_gusi
mongo
一.MongoDB安装和启动,widndows和linux基本相同
1.下载数据库,
linux:mongodb-linux-x86_64-ubuntu1404-3.0.3.tgz
2.解压文件,并且放置到合适的位置
tar -vxf mongodb-linux-x86_64-ubun
Git排除目录
geeksun
git
在Git的版本控制中,可能有些文件是不需要加入控制的,那我们在提交代码时就需要忽略这些文件,下面讲讲应该怎么给Git配置一些忽略规则。
有三种方法可以忽略掉这些文件,这三种方法都能达到目的,只不过适用情景不一样。
1. 针对单一工程排除文件
这种方式会让这个工程的所有修改者在克隆代码的同时,也能克隆到过滤规则,而不用自己再写一份,这就能保证所有修改者应用的都是同一
Ubuntu 创建开机自启动脚本的方法
hongtoushizi
ubuntu
转载自: http://rongjih.blog.163.com/blog/static/33574461201111504843245/
Ubuntu 创建开机自启动脚本的步骤如下:
1) 将你的启动脚本复制到 /etc/init.d目录下 以下假设你的脚本文件名为 test。
2) 设置脚本文件的权限 $ sudo chmod 755
第八章 流量复制/AB测试/协程
jinnianshilongnian
nginxluacoroutine
流量复制
在实际开发中经常涉及到项目的升级,而该升级不能简单的上线就完事了,需要验证该升级是否兼容老的上线,因此可能需要并行运行两个项目一段时间进行数据比对和校验,待没问题后再进行上线。这其实就需要进行流量复制,把流量复制到其他服务器上,一种方式是使用如tcpcopy引流;另外我们还可以使用nginx的HttpLuaModule模块中的ngx.location.capture_multi进行并发
电商系统商品表设计
lkl
DROP TABLE IF EXISTS `category`; -- 类目表
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `category` (
`id` int(11) NOT NUL
修改phpMyAdmin导入SQL文件的大小限制
pda158
sqlmysql
用phpMyAdmin导入mysql数据库时,我的10M的
数据库不能导入,提示mysql数据库最大只能导入2M。
phpMyAdmin数据库导入出错: You probably tried to upload too large file. Please refer to documentation for ways to workaround this limit.
Tomcat性能调优方案
Sobfist
apachejvmtomcat应用服务器
一、操作系统调优
对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU的频率,保证文件系统的读写速率等。经过压力测试验证,在并发连接很多的情况下,CPU的处理能力越强,系统运行速度越快。。
【适用场景】 任何项目。
二、Java虚拟机调优
应该选择SUN的JVM,在满足项目需要的前提下,尽量选用版本较高的JVM,一般来说高版本产品在速度和效率上比低版本会有改进。
J
SQLServer学习笔记
vipbooks
数据结构xml
1、create database school 创建数据库school
2、drop database school 删除数据库school
3、use school 连接到school数据库,使其成为当前数据库
4、create table class(classID int primary key identity not null)
创建一个名为class的表,其有一