SQL 语句:
是在所有的数据库中都是通用,但是在不同的数据库中的关键字和数据类型上会存在一定的区别;
SQL 语句:
是在所有的数据库中都是通用,但是在不同的数据库中的关键字和数据类型上会存在一定的区别;
localhost 、127.0.0.1 都表示本机;
如何在mySql 存储数据:
1,mySql可以创建多个库,dataBase 每个库下面可以创建多个表(表格)table通过表格存储我们的数据
什么是表 Table (表,行,列,格子)表里有表头 表头表示这个表有哪些列,在mySql中需要先定义表头 相当于是什么数据
MySQL Connectors :指的是不同语言中与SQL的交互,而MySQL就是由SQL接口、解析器、优化器、缓存、存储引擎组成的。
MySQL Workbench :相当于一个GUI的记录工具,可以进行可视化的操作
MySQL Server 配置:配置MySQL Server所监听的端口号,用户名及密码 ,
Samples and Examples 配置实例:用于学习的的配置实例;
Config Type: 安装环境配置 ---------Development Machine :开发环境-------------ServerComper: 服务器环境-------
MySQL 存在一个默认的超级管家员,
用户命为:Root ,安装时候设置的密码及为Root用的密码;
MySQL 的安装过程大部分只需要默认安装即可,但相对于其中的超级管理员需要进行密码设置,因为是学习期间 默认设置密码和 账号都为 root 即可;
其中的理论知识只需要对其进行了解,使实践来支持理论知识 ;
游戏服务器 GameServer:
??? ???
与上节的webServer 相似
1,正常情况下是无法直接访问数据库服务器的
2,web服务器相当于没有仅做数据处理的计算机,把性能全部集中在处理数据上;
3,负载均衡?
4,关于ip与端口号
小bug:多次加载会重复添加,需要在加载前清理inventory。
购买时可能背包满了放不下
public void BuyItem(Item item)
{
if (player.ConsumeCoin(item.BuyPrice)==true)
{
if (Knapsack.Instance.StoreItem(item)==false)
{
player.EarnCoin(item.BuyPrice);
}
}
}
角色面板有物品时,可以直接交换位置
public void PutOn(ItemUI itemUI)
{
foreach (EquipmentSlot slot in slotsArray)
{
if (slot.IsRightItem(itemUI.Item))
{
if (slot.transform.childCount > 0)
{
ItemUI currentItemUI = slot.transform.GetChild(0).GetComponent<ItemUI>();
itemUI.Exchange(currentItemUI);
}
else
{
slot.StoreItem(itemUI.Item);
Destroy(itemUI.gameObject);
}
InventoryManager.Instance.HideToolTip();
break;
}
}
}
扩展的写法
物品,讲的太啰嗦了
事件bool值默认为false
Tween tween = transform.DOLocalMoveX(300,0.5f)
动画的事件回调:
tween.OnComplete(function)
动画的缓动函数设置
tween.SetEase(Ease.InOutBounce)
动画循环次数
tween.SetLoops(-1, LoopType.Incremental)
(1)拖动文件夹等价于拖动 .unitypackage文件
(2)StreamingAssets文件夹中的内容打包时不会放入包中
2018的Prefab模块被魔改了,老师的这种方式会出现断言错误,可以通过下面的方式进行加载
[MenuItem("离线数据/生成所有UI离线数据")]
public static void AllUICreate()
{
string[] allPath = AssetDatabase.FindAssets("t:Prefab", new[] { "Assets/GameData/Prefabs/UGUI" });
for (int i = 0; i < allPath.Length; i++)
{
//转明文路径
string path = AssetDatabase.GUIDToAssetPath(allPath[i]);
EditorUtility.DisplayProgressBar("生成所有UI离线数据", "Prefab:" + path, i * 1.0f / allPath.Length);
//1.新版获得对象
GameObject obj = PrefabUtility.LoadPrefabContents(path);
if (obj == null)
{
continue;
}
//调用修改数据的方法
CreateUIData(obj);
//2.新版本需要保存并释放引用
PrefabUtility.SaveAsPrefabAsset(obj, path);
PrefabUtility.UnloadPrefabContents(obj);
}
Debug.Log("所有UI离线数据生成成功");
EditorUtility.ClearProgressBar();
}
一个物体参照 世界坐标 原点 —— 世界坐标
一个物体参照 3d物体 原点 —— 局部坐标
世界坐标 转换 局部坐标 参照 3d物体坐标
局部坐标 转换 世界坐标 参照 世家坐标原点
把012围成一个圈,不管自身玩家在几号位,把它转到下面就行了,保持:1在0的右边,2在1的右边,0在2的右边。
感觉先排序,再判断2是否存在,会更有助于理解,所以我是这样写得:
public void ResetPostion(int myUserId)
{
LeftPlayerId = -1;
RightPlayerId = -1;
if (enterOrderUserIdList[0] == myUserId)
{
RightPlayerId = enterOrderUserIdList[1];
if (enterOrderUserIdList.Count == 3) { LeftPlayerId = enterOrderUserIdList[2]; }
}
else if (enterOrderUserIdList[1] == myUserId)
{
LeftPlayerId = enterOrderUserIdList[0];
if (enterOrderUserIdList.Count == 3) { RightPlayerId = enterOrderUserIdList[2]; }
}
else if (enterOrderUserIdList[2] == myUserId)
{
RightPlayerId = enterOrderUserIdList[0];
if (enterOrderUserIdList.Count == 3) { LeftPlayerId = enterOrderUserIdList[1]; }
}
}
DrallCall就是一个命令,发起方是CPU,接收方式GPU,减少DrallCall其实就是减少程序在进行图像化处理阶段,发送命令所占用的时间,从而更加快速的进行图像渲染。发送命令占用时间比例过高在整个可视化程序中展现出来的就是程序图像卡顿严重。
减少DrallCall:将摄像机上的Rendering path,由deferred修改为forward。
当服务器关闭的时候,调整所有用户的在线状态为非在线