游戏服务器 GameServer:
??? ???
与上节的webServer 相似
游戏服务器 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。
当服务器关闭的时候,调整所有用户的在线状态为非在线
1.Entity
2.Context
3.Group
4.Matcher
5.Collector
6.Systems
这章真的懵逼...
setautokill
playforward
主要讲了这俩函数的意思
一个是保证不被杀死动画
一个是可以一直执行动画
play只能被执行一次
0,1,2,3
4,5,6,7
8,9,10,11
看到本节,怎么觉得讲错了呢?.....1上边应该是5?奇怪!