【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏11(附项目源码)

本节最终效果演示

在这里插入图片描述

文章目录

  • 本节最终效果演示
  • 系列目录
  • 前言
    • 选中效果
  • 快捷栏显示对应的手臂工具
  • 源码
  • 完结

系列目录

前言

欢迎来到【制作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是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/373820.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习缝模块怎么描述创新点?(附写作模板+涨点论文)

深度学习缝了别的模块怎么描述创新点、怎么讲故事写成一篇优质论文&#xff1f; 简单框架&#xff1a;描述自己这个领域&#xff0c;该领域出现了什么问题&#xff0c;你用了什么方法解决&#xff0c;你的方法有了多大的性能提升。 其中&#xff0c;重点讲清楚这两点&#xf…

【Qt Design】界面介绍

文章目录 前言Widget Box&#xff08;工具箱&#xff09;对象查看器Qt Design属性编译器sizePolicy内容 信号/槽编辑器资源浏览器ui文件 前言 Widget Box&#xff08;工具箱&#xff09; 提供很多控件 对象查看器 对象查看区域&#xff0c;可以查看主窗口放置对象的列表 …

力扣面试题 05.03. 翻转数位(前、后缀和)

Problem: 面试题 05.03. 翻转数位 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.将十进制数转换为二进制数&#xff08;每次按位与1求与&#xff0c;并且右移&#xff09;&#xff1b; 2.依次求取二进制数中每一位的前缀1的数量和&#xff0c;和后缀1的数量和…

MongoDB的操作和理解

什么是MongoDB? MongoDB&#xff1a;基于分布式文件存储的数据库由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库(nosql)之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。 Mo…

Webshell一句话木马

一、webshell介绍&#xff08;网页木马&#xff09; 分类&#xff1a; 大马&#xff1a;体积大、隐蔽性差、功能多 小马&#xff1a;体积小&#xff0c;隐蔽强&#xff0c;功能少 一句话木马&#xff1a;代码简短&#xff0c;灵活多样 二、一句话木马&#xff1a; &#xff1a;…

Java开发IntelliJ IDEA2023

IntelliJ IDEA 2023是一款强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为Java开发人员设计。它提供了许多特色功能&#xff0c;帮助开发人员更高效地编写、测试和调试Java应用程序。以下是一些IntelliJ IDEA 2023的特色功能&#xff1a; 智能代码编辑器&…

2024年烟花爆竹经营单位主要负责人证模拟考试题库及烟花爆竹经营单位主要负责人理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年烟花爆竹经营单位主要负责人证模拟考试题库及烟花爆竹经营单位主要负责人理论考试试题是由安全生产模拟考试一点通提供&#xff0c;烟花爆竹经营单位主要负责人证模拟考试题库是根据烟花爆竹经营单位主要负责人…

ChatGPT高效提问—prompt基础

ChatGPT高效提问—prompt基础 ​ 设计一个好的prompt对于获取理想的生成结果至关重要。通过选择合适的关键词、提供明确的上下文、设置特定的约束条件&#xff0c;可以引导模型生成符合预期的回复。例如&#xff0c;在对话中&#xff0c;可以使用明确的问题或陈述引导模型生成…

如何使用Python + 百度翻译API 自动大批量免费翻译Excel文件中的外语内容

手里有一个Excel文件,包括了大量的亚马逊德语搜索词(关键词),每个单元格1个,需要翻译为中文。但是文件大小超过了10M,不能使用百度或Google免费的文档功能,如果手工一个个的翻译然后粘贴又太麻烦,于是想到用Python加免费翻译API完成。 一、openpyxl库 用Python编辑处…

【Zookeeper】what is Zookeeper?

官网地址&#xff1a;https://zookeeper.apache.org/https://zookeeper.apache.org/ 以下来自官网的介绍 ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. A…

【产品经理进阶】也许这就是复盘的意义

目录 简介 复盘 内容情况 1. 华为流程体系入门课 2. 产品经理进阶课 3. BLM 战略方法论进阶课 4. IPD 进阶 100 例专栏 作者简介 简介 随着春节的临近&#xff0c;所有人都开始了一场奔赴。 春节对于国人是含有一种情感的。 更大的意义在于他的这种辞旧迎新的承接性…

IDEA创建SpringBoot+Mybatis-Plus项目

IDEA创建SpringBootMybatis-Plus项目 一、配置Maven apache-maven-3.6.3的下载与安装&#xff08;详细教程&#xff09; 二、创建SpringBoot项目 在菜单栏选择File->new->project->Spring Initializr&#xff0c;然后修改Server URL为start.aliyun.com&#xff0c…

centos 7.6 安装 openldap 2.5.17

centos 7.6 安装ldap 1、下载ldap2、安装ldap2.1、官方参考文档2.2、安装前准备2.2.1、安装gcc2.2.2、安装Cyrus SASL 2.1.272.2.3、安装OpenSSL 1.1.12.2.3.1、下载openssl 3.02.2.3.2、安装依赖包2.2.3.3、编译安装openssl 3.0 2.2.3、安装libevent 2.1.82.2.4、安装libargon…

【webpack】优化提升

webpack优化提升 安装webpack相关内容向下兼容游览器-babel/polyfill进一步优化babel/polyfill模块联邦-共享模块如何提升构建性能通用环境下1&#xff0c;webpack更新到最新版本2&#xff0c;将loader应用于最少数量的必要模块3&#xff0c;引导&#xff08;每个额外的loader/…

如何正确理解和获取S参数

S参数是网络参数&#xff0c;定义了反射波和入射波之间的关系&#xff0c;给定频率的S参数矩阵指定端口反射波b的矢量相对于端口入射波a的矢量&#xff0c;如下所示&#xff1a; bS∙a 在此基础上&#xff0c;如下图所示&#xff0c;为一个常见的双端口网络拓扑图&#xff1a;…

Mysql索引优化建议

1&#xff0c;最左前缀法则 如果为一张表创建了多列的组合索引&#xff0c;要遵守最左前缀法则。就是指查询从索引的最左前列开始并且不要跳过索引中的列。&#xff08;因为Mysql的InnoDB引擎的索引树是一个按顺利排序存储的数据结构&#xff08;BTREE&#xff09;&#xff0c…

Java-并发高频面试题-2

接着之前的Java-并发高频面试题 7. synchronized的实现原理是怎么样的&#xff1f; 首先我们要知道synchronized它是解决线程安全问题的一种方式&#xff0c;而具体是怎么解决的呢&#xff1f;主要是通过加锁的方式来解决 在底层实现上来看 是通过 monitorenter、monitorexit…

goland中快捷关键词forr、main等不生效的问题记录

平时用的较多的一些快捷关键词&#xff0c;如forr会提示range循环并通过回车可自动打出来&#xff0c;main会提示main函数并通过回车可自动打出来&#xff0c;这种快捷处理能极大的提高编码效率。 但由于之前更改了一些配置&#xff0c;可能有的被覆盖失效了&#xff0c;重新修…

第1节、电路连接【51单片机+L298N步进电机系列】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍如何搭建一个51单片机L298N步进电机控制电路&#xff0c;所用材料均为常见的模块&#xff0c;简单高效的方式搭建起硬件环境。 一、硬件清单 ①51单片机模块 ②恒流模块 ③开关电源 ④L298N模…

7.0 Zookeeper 客户端基础命令使用

zookeeper 命令用于在 zookeeper 服务上执行操作。 首先执行命令&#xff0c;打开新的 session 会话&#xff0c;进入终端。 $ sh zkCli.sh 下面开始讲解基本常用命令使用&#xff0c;其中 acl 权限内容在后面章节详细阐述。 ls 命令 ls 命令用于查看某个路径下目录列表。…