JSON文件解析类下的数据引用问题及解决方法

2023-10-23 12:58

本文主要是介绍JSON文件解析类下的数据引用问题及解决方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在做塔防游戏项目的时候遇到一个问题,就是JSON文件的信息解析过来后发现只要炮塔对敌怪攻击其减血作会作用在所有的敌怪上,这样逻辑就不对了;

找了许多方法,最后做一下总结:

1. 引入ICloneable接口,将所有的敌怪的所属信息复制克隆

2. 不实用类的方法实现,替换成结构体(因为结构体是值类型存储的)

using UnityEngine;
using System.Collections.Generic;//引入泛型命名空间
using System.Collections;
using System;/// <summary>
/// 定义解析JSON文件的脚本
/// </summary>
public static class DataPath{//将JSON文件的路径定义成string类型public static string TOWER_PATH = "DataTables/towerjson";//json文件的路径public static string ENEMY_PATH = "DataTables/enemyjson";
}/// <summary>
/// 所有炮塔的数据
/// </summary>
[Serializable]//序列化用于将脚本内容序列化显示出来
/// <summary>
/// 声明TowerDataAble类用于存储炮塔的数据表类
/// </summary>
public class TwerDataTable{//用集合表示可以通过索引访问的对象的列表,可提供对列表进行 索引修改的权限//将Tower类做为List集合的泛型类型传入进来,用来索引json文件的中的数据public List<TowerData> allTowers; 
}/// <summary>
/// 炮塔的数据
/// </summary>
[Serializable]
/// <summary>
/// 声明类,用来表示字段和json中的信息对应关系
/// </summary>
public class TowerData{public int id;//编号public string name;//炮塔名称public string prefabName;//预制体的名称public float price;//价格public float damage;//攻击力public string fxPrefab;//
}[Serializable]
/// <summary>
/// 因为敌怪的血量是单个独立的,但此处所用来存储信息的是Class类,类是属于引用类型,
/// 所以要引入Icloneable接口,用以实现将信息克隆的效果
/// </summary>
public class EnemyDataTable: ICloneable{public List<EnemyData> allEnemys;public object Clone(){return MemberwiseClone ();}
}[Serializable]
public class EnemyData: ICloneable{public int id;//编号public float hp;//当前血量public float maxHp;//最大血量public float moveSpeed;//public float money;//死亡掉落的金钱public object Clone(){return this.MemberwiseClone ();}
}

 

这篇关于JSON文件解析类下的数据引用问题及解决方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/267969

相关文章

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert