当前位置: 首页 > news >正文

专业商城网站设计网站策划师有前途吗

专业商城网站设计,网站策划师有前途吗,秦皇岛建设路小学网站,公司资料模板基本流程 1.代码思路 (1)InventoryUI的PlayerSlots与PlayerBag里一一对应,所以想要实现交换数据实际上是,先拿到被拖拽的物体所对的Slot的序号和目标的Slot序号,然后将这两个序号对调一下 (2)物品交换的数据逻辑应该在InventoryManager里去调用,因为InventoryManager里管理了p…基本流程 1.代码思路 (1)InventoryUI的PlayerSlots与PlayerBag里一一对应,所以想要实现交换数据实际上是,先拿到被拖拽的物体所对的Slot的序号和目标的Slot序号,然后将这两个序号对调一下 (2)物品交换的数据逻辑应该在InventoryManager里去调用,因为InventoryManager里管理了playerBag所有的数据 (3)交换数据时需要考虑库存的类型以及交换的目的,现有三个类型(slotType),有Bag,Box,Shop,依次对应的是同背包转换,跨库存数据进行转换,买卖交易; (4)对于在地图上生成物品,首先要在SlotUI中获取拖拽结束时的世界坐标(因为Slot_Bag和已经创建好的背景不在一个层级上) (5)新建一个ItemManager.cs,这个脚本用于管理场景中的所有物品,在切换场景的时候,保存场景当中现在有的物品,在切换回来的时候可以再次读取 (6)基于已经制作好的ItemBase的预制体,拿到这个预制体,在指定的位置进行生成,那么就需要让StotUI告诉ItemManager在哪生成,这时候就需要通过EventHandler来执行 (7)因为对事件这个知识点不是很熟,所以我会详写,在EventHandler里去实现在场景中生成物品的事件定义以及调用事件的方法,然后就可以去SlotUI里去调用了 (8)事件的详细描述: 先在事件中心EventHandler里实现对事件的定义 //在场景中生成物品的事件 //需要的参数有(ItemID,position) public static event Actionint, Vector3 instantiateItemInScene; 再写事件的调用方法 public static void CallInstantiateItemInScene(int ID, Vector3 pos) {InstantiateItemInScene?.Invoke(ID, pos); } 去SlotUI中调用事件 //调用事件 EventHandler.CallInstantiateItemInScene(itemDetails.itemID,pos); 然后去ItemManager里接收数据,就需要添加注册的函数方法 private void OnEnable() {EventHandler.InstantiateItemInScene OnInstantiateItemInScene; }private void OnDisable() {EventHandler.InstantiateItemInScene - OnInstantiateItemInScene; } 编写方法的实现 private void OnInstantiateItemInScene(int ID, Vector3 pos) {var item Instantiate(itemPrefab,pos, Quaternion.identity, itemParent);item.itemID ID; } 2.代码实现 SlotUI中的 public void OnEndDrag(PointerEventData eventData) {inventoryUI.dragItem.enabled false;//Debug.Log(eventData.pointerCurrentRaycast.gameObject);//判断非空,只有非空才代表最后碰撞到的是UI物体//再判断碰撞的是否为SlotUI,不是就返回//为真就拿到双方的序号if (eventData.pointerCurrentRaycast.gameObject ! null){if (eventData.pointerCurrentRaycast.gameObject.GetComponentSlotUI() ! null){//目标点的SlotUIvar targetSlot eventData.pointerCurrentRaycast.gameObject.GetComponentSlotUI();int targetIndex targetSlot.slotIndex;//在Player自身背包范围内转换(同库存转换)if (targetSlot.slotType SlotType.Bag slotType SlotType.Bag){InventoryManager.Instance.SwapItem(slotIndex, targetIndex);}//清空所有高亮 inventoryUI.UpdateSlotHightlight(-1);}}else {if (itemDetails.canDropped){//鼠标对应的世界地图坐标var pos Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, -Camera.main.transform.position.z));//调用事件EventHandler.CallInstantiateItemInScene(itemDetails.itemID, pos);}} } InventoryManager中的 /// summary /// Player背包范围内的交换物品 /// /summary /// param namefromIndex起始序号/param /// param nametoIndex目标数据序号/param public void SwapItem(int fromIndex,int toIndex) { //需要考虑的是,当前的格子一定是非空的,但是目标格子不一定是空InventoryItem currentItem playerBag.itemList[fromIndex];InventoryItem targetItem playerBag.itemList[ toIndex ];if (targetItem.itemID ! 0){playerBag.itemList[fromIndex] targetItem;playerBag.itemList[toIndex] currentItem;}else{playerBag.itemList[fromIndex] new InventoryItem();//这里new一个其实就是给它置空playerBag.itemList[toIndex] currentItem;}EventHandler.CallUpdateInventoryUI(InventoryLocation.Player,playerBag.itemList); } EventHandler中的 //在场景中生成物品的事件 //需要的参数有(ItemID,position) public static event Actionint, Vector3 InstantiateItemInScene; public static void CallInstantiateItemInScene(int ID, Vector3 pos) {InstantiateItemInScene?.Invoke(ID, pos); } ItemManager中的 namespace FuliFarm.Inventory {public class ItemManager : MonoBehaviour{public Item itemPrefab;private Transform itemParent;private void OnEnable(){EventHandler.InstantiateItemInScene OnInstantiateItemInScene;}private void OnDisable(){EventHandler.InstantiateItemInScene - OnInstantiateItemInScene;}private void Start(){itemParent GameObject.FindWithTag(ItemParent).transform;}private void OnInstantiateItemInScene(int ID, Vector3 pos){var item Instantiate(itemPrefab, pos, Quaternion.identity, itemParent);item.itemID ID;}} } 最终效果 同库存交换 地图上拾取(就不多展示了,字面意思) 出现的问题 物品丢在地上后捡不起来,检查canPickUp没有问题,最后发现在生成itemBase的prefab时,碰撞盒的offset的y值不为零,导致碰撞盒与图片不在同一位置 相关代码是Item.cs中的这一句 将coll.offset new Vector2(0,spriteRenderer.bounds.center.y);改为 coll.offset new Vector2(0, spriteRenderer.transform.localPosition.y);就行了 但我实在不明白coll.offset new Vector2(0,spriteRenderer.bounds.center.y);有什么错误,我觉得思路上是没错的
http://www.hkea.cn/news/14522057/

相关文章:

  • 自学商城网站建设制作微信小程序公司
  • 杭州手机模板建站如何写一份企业网站建设方案
  • 吉林沈阳网站建设沈阳网站建设招标公司
  • wordpress最近评论seo长尾关键词
  • 网络销售是做网站推广杭州滨江区抖音seo行情
  • 做外贸需要哪些网站有哪些汽车网站排名查询
  • 如何制作企业的网站科技信息网站系统建设方案
  • 用什么做网站原型图商城网站页面模板
  • 自己做网站需要的技术空间设计大师
  • 网站推广企业申请网站建设经费
  • 网站建设淘宝类目邯郸市哪里有做网站的
  • 移动端网站如何做导出功能微商城哪个平台做得比较好
  • 做企业网站为什么要服务器呢2019年最好的国外vps
  • 普通网站设计wordpress主题收费
  • 做淘宝客网站推广被骗百度站长收录入口
  • 江苏省住房和城乡建设厅假网站hyperapp wordpress
  • 邯郸手机网站建设服务海淀西北旺网站建设
  • 一个阿里云怎么做两个网站吗seo外包公司
  • 移动网站系统wordpress数据收集表单
  • 建设网站需要的人才公司注册代理费
  • 电子商务网站建设与维护教案怎样建企业网站
  • 网站建设的价值体现在哪外国网站英语要求
  • cms网站搭建大型网站得多少钱
  • 可以建立网站的平台自己做交易网站吗
  • wordpress的多站点网站无法访问有哪些做外贸免费的网站
  • 网站建设要写代码吗一家专门做印刷的网站
  • 网站运营管理设计网站推荐素材网站
  • 网站分为哪几种注册公司和建网站
  • 上海网站开发学校有哪些提供seo顾问服务适合的对象是
  • 网站架构是什么意思网页设计市场价