本节最终效果演示
文章目录
- 本节最终效果演示
- 系列目录
- 前言
- 选中效果
- 快捷栏显示对应的手臂工具
- 源码
- 完结
系列目录
前言
欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第23篇中,我们将探索如何制作一个类似于七日杀和森林的生存游戏。
本篇内容会比较多,我会分几篇来实现,感兴趣的可以关注一下,以免错过内容更新。
本节主要实现了快捷栏选中和切换显示手臂的功能。
选中效果
修改EquipSystem,实现选中和取消选中状态切换
public GameObject selectedItem; // 当前选中物品
public int selectedNumber = -1;//当前选中索引
private void Update()
{
// 遍历数字1到7
for (int i = 1; i <= 7; i++)
{
// 检查是否按下对应的数字键
if (Input.GetKeyDown(KeyCode.Alpha0 + i))
{
// 调用SelectQuickSlot方法,传递当前数字作为参数
SelectQuickSlot(i);
}
}
}
public void SelectQuickSlot(int number)
{
// 如果该物品已经选中则取消选中物品
if(selectedNumber == number){
selectedItem.GetComponent<InventoryItem>().isSelected = false;
selectedItem = null;
selectedNumber = -1;
return;
}
// 如果该快捷栏格子已满,则选中该格子
if (CheckIfSlotIsFull(number) == true)
{
selectedNumber = number;
// 如果已经有选中的物品则取消所有的选中物品
if (selectedItem != null)
{
selectedItem.GetComponent<InventoryItem>().isSelected = false;
}
// 选中当前快捷栏格子中的物品
selectedItem = GetSelectedItem(number);
selectedItem.GetComponent<InventoryItem>().isSelected = true;
}
}
// 获取指定快捷栏格子中的物品
private GameObject GetSelectedItem(int slotNumber)
{
return quickSlotsList[slotNumber - 1].transform.GetChild(0).gameObject;
}
// 检查指定的快捷栏格子是否有物品
private bool CheckIfSlotIsFull(int slotNumber)
{
if (quickSlotsList[slotNumber - 1].transform.childCount > 0)
{
return true;
}
else
{
return false;
}
}
修改InventoryItem,实现物品选中禁止拖拽功能,且开启关闭物品背景颜色提示框
[Header("是否选中")]
public bool isSelected;
void Update()
{
if (isSelected)
{
gameObject.GetComponent<DragDrop>().enabled = false;
transform.Find("Background").gameObject.SetActive(true);
}
else
{
gameObject.GetComponent<DragDrop>().enabled = true;
transform.Find("Background").gameObject.SetActive(false);
}
}
快捷栏显示对应的手臂工具
修改EquipSystem
[Header("手臂配置")]
public GameObject armHolder;//手臂位置
public GameObject selectedArmModel;//当前选中的手臂
public List<GameObject> armList = new List<GameObject>();//手臂列表
//。。。
private void PopulateSlotList()
{
//。。。
// 遍历工具界面下的所有子物体
foreach (Transform child in armHolder.transform)
{
// 将子对象添加到slotList列表中
armList.Add(child.gameObject);
}
}
public void SelectQuickSlot(int number)
{
// 如果该物品已经选中则取消选中物品
if(selectedNumber == number){
//。。。
SetNotEquippedModel();
return;
}
// 如果该快捷栏格子已满,则选中该格子
if (CheckIfSlotIsFull(number) == true)
{
//。。。
SetEquippedModel(selectedItem);
}
}
//切换手臂装备
private void SetEquippedModel(GameObject selectedItem)
{
if(!selectedItem) return;
string name = selectedItem.GetComponent<InventoryItem>().thisName;
armList.ForEach(arm =>
{
if(arm.name == name + "_Arm"){
arm.SetActive(true);
selectedArmModel = arm;
}else{
arm.SetActive(false);
}
});
}
//关闭手臂装备
private void SetNotEquippedModel()
{
selectedArmModel.SetActive(false);
}
配置参数
配置几个手臂模型预制体,记得默认隐藏,模型就自行去找和制作了,我也没找到免费的
效果
源码
源码不出意外的话我会放在最后一节
完结
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,以便我第一时间收到反馈,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
好了,我是向宇
,https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~