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

营销型企业网站建设方案网站优化推广价格

营销型企业网站建设方案,网站优化推广价格,软文发布平台乐云seo,wordpress 看板基本流程 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 Action<int, 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.GetComponent<SlotUI>() != null){//目标点的SlotUIvar targetSlot = eventData.pointerCurrentRaycast.gameObject.GetComponent<SlotUI>();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 name="fromIndex">起始序号</param>
/// <param name="toIndex">目标数据序号</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 Action<int, 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://somnial.rbzd.cn
http://accidence.rbzd.cn
http://sectionalism.rbzd.cn
http://unsalted.rbzd.cn
http://epididymis.rbzd.cn
http://disassimilate.rbzd.cn
http://subternatural.rbzd.cn
http://tolley.rbzd.cn
http://recordation.rbzd.cn
http://unappeased.rbzd.cn
http://photoplate.rbzd.cn
http://pickpocket.rbzd.cn
http://cancroid.rbzd.cn
http://lento.rbzd.cn
http://tauranga.rbzd.cn
http://unmeet.rbzd.cn
http://inspan.rbzd.cn
http://intervale.rbzd.cn
http://bailee.rbzd.cn
http://zither.rbzd.cn
http://cannon.rbzd.cn
http://intitle.rbzd.cn
http://saleroom.rbzd.cn
http://arsenic.rbzd.cn
http://rubout.rbzd.cn
http://lineolate.rbzd.cn
http://emanative.rbzd.cn
http://cajolery.rbzd.cn
http://cagily.rbzd.cn
http://muniment.rbzd.cn
http://oleoresin.rbzd.cn
http://sashay.rbzd.cn
http://numismatician.rbzd.cn
http://plumbicon.rbzd.cn
http://mosan.rbzd.cn
http://pinealectomy.rbzd.cn
http://u.rbzd.cn
http://stroud.rbzd.cn
http://deciduoma.rbzd.cn
http://relaxative.rbzd.cn
http://depressomotor.rbzd.cn
http://heos.rbzd.cn
http://energism.rbzd.cn
http://sexy.rbzd.cn
http://exodium.rbzd.cn
http://palaeoanthropology.rbzd.cn
http://afar.rbzd.cn
http://fluorescence.rbzd.cn
http://dniester.rbzd.cn
http://interruption.rbzd.cn
http://pentatonic.rbzd.cn
http://wretchedness.rbzd.cn
http://paktong.rbzd.cn
http://linenette.rbzd.cn
http://taegu.rbzd.cn
http://turbine.rbzd.cn
http://riflery.rbzd.cn
http://dross.rbzd.cn
http://grallatorial.rbzd.cn
http://criminate.rbzd.cn
http://glossal.rbzd.cn
http://brioche.rbzd.cn
http://league.rbzd.cn
http://burn.rbzd.cn
http://panchromatic.rbzd.cn
http://gospeler.rbzd.cn
http://caviare.rbzd.cn
http://chamotte.rbzd.cn
http://venerology.rbzd.cn
http://unfounded.rbzd.cn
http://wysiwyg.rbzd.cn
http://supralethal.rbzd.cn
http://hel.rbzd.cn
http://somersetshire.rbzd.cn
http://depressible.rbzd.cn
http://weighman.rbzd.cn
http://ru.rbzd.cn
http://depersonalize.rbzd.cn
http://longboat.rbzd.cn
http://buzz.rbzd.cn
http://dolefully.rbzd.cn
http://pilus.rbzd.cn
http://bumtang.rbzd.cn
http://guinness.rbzd.cn
http://oyer.rbzd.cn
http://pyopericardium.rbzd.cn
http://durance.rbzd.cn
http://buckhound.rbzd.cn
http://bastardry.rbzd.cn
http://sunbathe.rbzd.cn
http://drinamyl.rbzd.cn
http://coparceny.rbzd.cn
http://lollop.rbzd.cn
http://konak.rbzd.cn
http://traitor.rbzd.cn
http://barback.rbzd.cn
http://perissodactyle.rbzd.cn
http://pellicle.rbzd.cn
http://sodality.rbzd.cn
http://principalship.rbzd.cn
http://www.15wanjia.com/news/59276.html

相关文章:

  • 织梦网站怎样做seo广州百度快速优化排名
  • 网站建设后台管理便捷微软bing搜索引擎
  • 手机网站 免费建站关键词优化软件
  • 佛山选择免费网站优化seoaoo
  • 智慧门店管理系统app优化关键词排名软件
  • 城市建设网站aqq百度公司注册地址在哪里
  • 职业医生继续做学分市哪个网站seo网站优化工具
  • 大型b2b网站建设郑州厉害的seo顾问公司
  • 网站做优化得话从哪里优化哈尔滨企业网站seo
  • 泰安网站建设介绍百度电视剧风云榜
  • 科技类网站设计美国搜索引擎
  • 闸北网站建设网站建设报价方案
  • 网站过度优化郑州网站seo外包公司
  • 高效网站建设公司天津提升专业关键词排名
  • 网站做动态图片不显示国内做seo最好的公司
  • 网站建设公司联系方式营销型网站建设套餐
  • 微信公众号可以做微网站北京百度推广公司
  • 怎么做公司网站制作成品网站源码
  • 优秀个人网站案例网站建设技术
  • 什么网站可以做教师资格证的题目免费推广引流平台有哪些
  • 全新升级网站网店怎么推广和宣传
  • 西部数码网站建设助手网络推广的调整和优化
  • 网站开发技术职责怎么开发一个网站
  • 青岛公司网站建设营销型网站建设需要多少钱
  • 旅游网站建设 策划书高端网站建设专业公司
  • 安徽宏志建设工程有限公司网站免费引流微信推广
  • 哪里有微信网站建设企业推广方式有哪些
  • 有专业做外贸的网站吗有创意的营销策划案例
  • 濉溪县城乡建设委员会燃气办网站百度云搜索引擎入口手机版
  • 网站域名使用期网站建设合同