您的位置:首页 > 房产 > 家装 > 河南建设信息网一体化平台_qq推广引流怎么做_seo优化的网站_排名优化公司电话

河南建设信息网一体化平台_qq推广引流怎么做_seo优化的网站_排名优化公司电话

2025/1/5 8:14:57 来源:https://blog.csdn.net/benben044/article/details/144859381  浏览:    关键词:河南建设信息网一体化平台_qq推广引流怎么做_seo优化的网站_排名优化公司电话
河南建设信息网一体化平台_qq推广引流怎么做_seo优化的网站_排名优化公司电话

1、目标

在Scene中创建道具,角色靠近道具能够自动获取道具的信息。

ps:unity核心用法:

  • SerializeField:序列化某一个字段
  • Create -> Prefab Variant得到衍生预制体。
  • SingletonMonobehaviour:单例模式类,使用xx.Instance可获取实例
  • Dictionary.TryGetValue()方法:try and getvalue,成功返回true,否则为false

2、创建Item基础预制体

在Scripts -> Item下创建Item.cs脚本

using UnityEngine;public class Item : MonoBehaviour
{[SerializeField]private int _itemCode;private SpriteRenderer spriteRenderer;public int ItemCode { get { return _itemCode; } set { _itemCode = value; } }private void Awake(){spriteRenderer = GetComponentInChildren<SpriteRenderer>();  // SpriteRenderer组件在子对象中}private void Start(){if(ItemCode != 0){Init(ItemCode);}}public void Init(int ItemCodeParam){}}

在Hierarchy -> Scene1_Farm中创建Items空物体,在此物体下再创建Item空物体。

添加Box Collider 2D组件和Item脚本,属性如下:

在Hierarchy -> Scene1_Farm -> Items -> Item下再创建ItemSprite空物体,挂载Sprite Renderer组件信息如下:

在Assets -> Prefabs下新建Item目录。

然后将Hierarchy中的Item对象拖到Assets -> Prefabs -> Item目录下得到预制体。该预制体为最基础的预制体,后续会根据该基础预制体生成其他道具预制体

此时,可以删除Hierarchy中的Item对象。

3、生成道具预制体

在Prefabs下新建Commodity目录,用于放置corn等道具预制体。

右击Prefabs -> Item下的Item预制体,Create -> Prefab Variant得到衍生预制体,命名为Corn。

并将该Corn预制体放到Commodity目录下。

接着给Corn添加Sprite:双击Corn后,在Hierarchy中点击ItemSprite,在Sprite Renderer中选择Sweetcorn图片。

然后再点击Hierarchy中的Corn,在Box Collider 2D中点击Edit Collider,调整碰撞检测的区域。

点击Assets -> Prefabs -> Commodity -> Corn,在Item中修改Item Code为10002。

以同样的方式在Commodity中添加Parsnip预制体,其Item Code为10007。

再以同样的方式在Commodity中添加Pumpkin预制体,其Item Code为10001。

现在,Commodity就有了3个道具的预制体。

4、Scene中放置道具

拖到道具预制体到Scene界面中,并将对象都统一移到Items目录下。

5、创建Inventory管理器

在Assets -> Scripts 下创建Inventory目录,并在其下创建InventoryManager.cs脚本。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class InventoryManager : SingletonMonobehaviour<InventoryManager>
{private Dictionary<int, ItemDetails> itemDetailsDictionary;[SerializeField] private SO_ItemList itemList = null;private void Start(){CreateItemDetailsDictionary();}/// <summary>/// Populates the itemDetailsDictionary from the scriptable object items list/// </summary>private void CreateItemDetailsDictionary(){itemDetailsDictionary = new Dictionary<int, ItemDetails>();foreach (ItemDetails itemDetails in itemList.itemDetails) {itemDetailsDictionary.Add(itemDetails.itemCode, itemDetails);}}/// <summary>/// Returns the itemDetails (from the SO_ItemList) for the itemCode, or null if the item doesn't exist/// </summary>/// <param name="itemCode"></param>/// <returns></returns>public ItemDetails GetItemDetails(int itemCode) {ItemDetails itemDetails;if(itemDetailsDictionary.TryGetValue(itemCode, out itemDetails)){return itemDetails;}else{return null;}}
}

在PersistentScene中创建InventoryManager物体,同时将Assets -> ScriptableObjectAssets中的so_ItemList拖入ItemList的变量。

6、给Player添加感知脚本

在Assets -> Scripts -> Player下创建脚本ItemPickup.cs,其代码如下:

using UnityEngine;public class ItemPickup : MonoBehaviour
{private void OnTriggerEnter2D(Collider2D collision){Item item = collision.GetComponent<Item>();if(item != null){// Get item detailsItemDetails itemDetails = InventoryManager.Instance.GetItemDetails(item.ItemCode);// Print item description to consoleDebug.Log(itemDetails.itemDescription);}}
}

然后,将该脚本挂到Player对象下。

运行程序,当Player在道具中穿过时,Console会显示对应道具的信息:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com