背包系统脚本
cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;
using UnityEngine.InputSystem;
public class 背包系统背包 : MonoBehaviour
{
public GameObject 左手手柄; // 左手控制器
public GameObject 右手手柄; // 右手控制器
public GameObject 父物体;
public Transform 背包父物体;
public 背包系统_背包对象 背包对象;
public int 背包格子数量 = 16;
public enum 物品类型
{
无 = 0,香蕉,易拉罐,衣服,水瓶,电池,鱼骨,香烟,饭盒,针管,饭,药品,纸
}
public InputActionReference R扳机;
public InputActionReference L扳机;
public InputActionReference B按键;
public List<背包系统_背包对象> 所有背包对象 = new List<背包系统_背包对象>();
public void GaiBeiBaoShu(int GeZiShu)
{
for(int fFor = 0; fFor < GeZiShu; fFor++) {
所有背包对象.Add(Instantiate(背包对象, 背包父物体));
所有背包对象[所有背包对象.Count - 1].gameObject.SetActive(true);
}
}
void Start()
{
GaiBeiBaoShu(背包格子数量);
}
void Update()
{
if (R扳机.action.WasPressedThisFrame() || L扳机.action.WasPressedThisFrame())
{
RaycastHit hit;
if (Physics.Raycast(右手手柄.transform.position, 右手手柄.transform.forward, out hit))
{
if (hit.collider.GetComponent<背包系统_可拾取物品>())
{
if (hit.collider.GetComponent<背包系统_可拾取物品>().拾取物品类型 != 物品类型.无)
{
for (int fFor = 0; fFor < 所有背包对象.Count; fFor++)
{
if (所有背包对象[fFor].这个物品类型 == 物品类型.无)
{
所有背包对象[fFor].这个物品类型 = hit.collider.GetComponent<背包系统_可拾取物品>().拾取物品类型;
所有背包对象[fFor].背包放置数量 = hit.collider.GetComponent<背包系统_可拾取物品>().数量;
break;
}
}
}
Destroy(hit.collider.gameObject);
}
}
}
// 当背部按键被按下时
if (B按键.action.WasPressedThisFrame())
{
// 切换背包的显示和隐藏
父物体.SetActive(!父物体.activeSelf);
}
}
}
脚本解析
这个脚本实现了一个基本的背包系统,包括背包格子的实例化、物品的拾取和销毁,以及背包的显示和隐藏。下面是对代码的详细讲解和代码思路:
背包系统背包类:
- 这个类是背包系统的核心,负责处理背包的逻辑。
- 它有一个
Start
方法,用于在游戏开始时初始化背包,以及一个Update
方法,用于在游戏运行时处理背包的交互逻辑。
背包格子数量:
- 这个变量定义了背包中格子的数量。
- 在
Start
方法中,通过循环创建背包格子,并将其添加到所有背包对象列表中。
背包父物体:
- 这个变量定义了背包中所有物品格子的父对象。
- 在
GaiBeiBaoShu
方法中,使用这个父对象来实例化背包格子。
所有背包对象:
- 这是一个列表,用于存储背包中的所有物品格子。
- 在
GaiBeiBaoShu
方法中,创建新的背包物品槽实例,并将其添加到所有背包对象列表中。
GaiBeiBaoShu方法:
- 这个方法用于初始化背包,通过循环创建背包格子,并将其添加到所有背包对象列表中。
- 在
Start
方法中,调用这个方法来实例化背包中的物品槽。
Update方法:
- 这个方法是Unity中的生命周期方法,它会在每一帧被调用。
- 在这个方法中,当玩家按下左右手控制器的扳机键时,会从右手控制器发射射线。
- 如果射线击中了带有背包系统_可拾取物品脚本的物体,它会遍历背包中的物品,找到一个空的格子,然后将拾取物品的类型和数量赋值给这个背包格子,并销毁被拾取的物品。
背部按键处理:
- 当背部按键被按下时,会切换背包的显示和隐藏。
物品类型枚举:
- 这个枚举定义了背包中可以存放的物品类型。
- 在
Update
方法中,用于检查拾取物品的类型是否为空。
背包系统_背包对象类:
- 假设这个类已经实现,用于存储背包中的物品类型和数量。
- 在
Update
方法中,用于将拾取物品的类型和数量赋值给背包格子。
##### **背包系统_可拾取物品类**:
* 假设这个类已经实现,用于定义可拾取物品的逻辑。
* 在`Update`方法中,用于检查拾取物品
背包内对象脚本
cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.InputSystem;
using System;
public class 背包系统_背包对象 : MonoBehaviour
{
public GameObject 物体;
public 背包系统背包.物品类型 这个物品类型;
public int 背包放置数量 = 0;
public Sprite[] 物品贴图;
public Image 贴图显示;
void Start()
{
}
// Update is called once per frame
void Update()
{
物体.gameObject.SetActive(背包放置数量>0);
贴图显示.sprite = 物品贴图[(int)这个物品类型];
}
}
这个脚本提供了一个基本的框架,用于表示背包中的一个物品格子。可以根据需要添加更多的功能,例如显示物品的详细信息、控制物品的放置数量等。
背包系统_背包对象类:
- 这个类是背包系统中用于表示一个具体的背包物品格子的类。
- 它包含了一些公共的属性和方法,用于在Unity编辑器中配置和控制这个物品格子。
GameObject物体:
- 这个属性是一个游戏对象,它代表背包中的物品。
- 在
Update
方法中,通过SetActive
方法来控制这个物品是否应该在场景中显示。
背包系统背包.物品类型 这个物品类型:
- 这个属性是一个枚举类型,它定义了背包中物品的类型。
- 在
Update
方法中,通过这个属性来设置物品的类型。
int背包放置数量:
- 这个属性定义了当前物品格子中放置的物品数量。
- 在
Update
方法中,通过这个属性来控制物品是否应该在场景中显示。
Sprite[ ]物品贴图:
- 这个属性是一个Sprite数组,它包含了不同类型物品的贴图。
- 在
Update
方法中,通过这个属性来设置物品的贴图。
Image贴图显示:
- 这个属性是一个Image组件,它用于在场景中显示物品的贴图。
- 在
Update
方法中,通过这个属性来设置显示的物品贴图。
Start方法:
- 这个方法是Unity中的生命周期方法,它会在游戏开始时被调用。
- 在这个方法中,可以进行一些初始化工作,例如设置物品的默认状态。
Update方法:
- 这个方法是Unity中的生命周期方法,它会在每一帧被调用。
- 在这个方法中,会根据背包放置数量来控制物品的显示状态,并根据物品类型来设置显示的贴图。
可拾取物品脚本
cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class 背包系统_可拾取物品 : MonoBehaviour
{
public 背包系统背包.物品类型 拾取物品类型;
public int 数量 = 1;
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
这个脚本是背包系统中的一部分,负责表示一个可拾取的物品。
背包系统_可拾取物品类:
- 这个类是背包系统中用于表示一个可拾取的物品的类。
- 它定义了物品的类型和数量,以及与背包系统交互的逻辑。
背包系统背包.物品类型 拾取物品类型:
- 这个属性是一个枚举类型,它定义了背包中物品的类型。
- 它允许您在Unity编辑器中为不同的物品类型指定不同的拾取物品类型。
- 例如,如果一个物品的类型是"香蕉",那么它的拾取物品类型可能是"香蕉"。
int数量:
- 这个属性定义了当前物品的数量。
- 它允许您在Unity编辑器中为每个物品指定一个数量。
- 例如,一个物品可能有1个、2个或更多数量。