SRPG游戏开发(三十六)第八章 游戏中的数据 - 六 运行时对象(Runtime Object)

返回总目录

第八章 游戏中的数据(Data in Game)

在之前的章节中,我们进行地图对象的生成,移动等操作。

这一章本来可以进行战斗的编写,不过数据缺失是一个问题。

所以这一章我们先来建立一些数据,以及如何编辑它们,是否需要生成配置文件等。



六 运行时对象(Runtime Object)

之前建立的数据几乎都是静态数据,而实际在游戏中,我们要创建一些类来使用它们。

在数据上,我们来创建一些类。在之前应该注意:

  • 角色(role)在SRPG中分为独有人物,和一系列的杂兵。当然还包括职业;

  • 物品(item)存在不同分类;

  • 移动消耗(Move Consumption)、人物(character)和职业(class)只是静态数据的代理。


1 移动消耗、人物与职业(Move Consumption, Character and Class)

在实际游戏中,移动消耗、人物与职业数据是不存在变化的,我们只需要读取它(只读属性)。

两种方式(以人物为例):

  • 其一,内部直接使用静态数据

    namespace DR.Book.SRPG_Dev.Models
    {
         
        public class Character
        {
         
            private CharacterInfo m_Info;
    
            // 类似这样的只读属性
            public int id
            {
         
                get {
          return m_Info.id; }
            }
    
            // 其它只读属性
    
            public Character(CharacterInfo info)
            {
         
                this.m_Info = info;
            }
        }
    }
    
  • 其二,内部不使用静态数据,外部读取静态数据后创建

    namespace DR.Book.SRPG_Dev.Models
    {
         
        public class Character
        {
         
            // 类似这样的只读属性
            public int id {
          get; private set;}
    
            // 其它只读属性
    
            public Character(int id /* 其它读取属性 */)
            {
         
                this.id = id;
    
                // 读取其它属性
            }
    
            public Character(CharacterInfo info)
            {
         
                this.id = info.id;
    
                // 读取其它属性
            }
        }
    }
    

当然你也可以不在构造函数中进行,而是自己写一个读取函数(例如Load)。

这里我们不再过多的阐述,以下是移动消耗完整的类,人物与职业也可以参考它。

完整的移动消耗的类:

using UnityEngine;

namespace DR.Book.SRPG_Dev.Models
{
   
    using DR.Book.SRPG_Dev.Maps;

    public class MoveConsumption
    {
   
        private MoveConsumptionInfo m_Info;

        public ClassType classType
        {
   
            get {
    return m_Info.classType; }
        }

        public float this[TerrainType terrainType]
        {
   
            get
            {
   
                if (terrainType == TerrainType.MaxLength)
                {
   
                    Debug.LogError("MoveConsumption -> TerrainType can not be MaxLength.");
                    return 255f;
                }
                return m_Info.consumptions[terrainType.ToInteger()];
            }
        }

        public MoveConsumption(MoveConsumptionInfo info)
        {
   
            this.m_Info = info;
        }
    }
}

2 运行时数据(Runtime Data)

在写其他的类之前,我们都知道一些数据是随着游戏进程而动态变化的(例如经验值,等级等)。

增加保存这些数据的变量是必须的,这里我把这些变量单独建立一个类来存储:

using System;
using System.Reflection;
using UnityEngine;

namespace DR.Book.SRPG_Dev.Models
{
   
    [Serializable]
    public abstract class RuntimeData<T> : IRuntimeData<T> where T : RuntimeData<T>, new()
    {
   
        public virtual T Clone()
        {
   
            T clone = new T();
            CopyTo(clone);
            return clone;
        }

        public virtual void CopyTo(T data)
        {
   
            if (data == null
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值