马上注册,加入CGJOY,让你轻松玩转CGJOY。
您需要 登录 才可以下载或查看,没有帐号?立即注册
×
神降:死亡游戏 之 创建工程和定义Actor类 一个游戏开始都是先从一个工程开始的!!当然,小编也不例外哦!!先让我创建一个工程吧!!(这个过程就不用说了吧!) 工程创建完毕后,就是要对工程文件进行规划了,小编的工程目录如下: Altas:存放图集 Resource:用来存放非加载资源 Resources:用来存放加载资源 Scenes:存放场景 Script:存放脚本 UntiyVS:额 忽略了 用VS的同学肯定会有 首先我在做游戏的时候,首先想到的创建主角,那么我就先来创建角色!! 假设说,我要写一个Actor演员类,是不是应该先写一个Actor类来定义英雄和怪物共有的公共属性,然后在第一个heroActor类来继承Actor类,定义英雄独有属性,然后在定义yuanfengActor类继承heroActor类来编写元风独有属性,然后定义一个MonsterActor类继承Actor ,在写bossActor 和nomalMonsterActor来继承MonsterActor来写怪物的独有属性。结构图如图: 但小编上一章就说过,小编水平有限,所以不这么写了(有兴趣的童鞋自己尝试哈!)。 首先在Script文件夹下创建一个文件夹,名为 其实是Actor(演员呗!) 在Actor下创建脚本Actor 创建这个Actor的作用呢就是在整个游戏中除了NPC以外,都挂载这个脚本。 而这个脚本主要定义什么呢? 不如我们先想想我们主角都有什么呢? 先往小里想: 速度肯定会有吧!血量也会有吧!还得需要一个ID来对游戏中演员进行唯一的标识吧! 另外血量肯定会有当前血量和最大血量吧!万一玩家死亡,还得设置一个属性来表明玩家已经死亡了吧!! 另外既然我们游戏中所有的演员都用同一个脚本 那谁是主角这个我们需要一个标志来表示吧,在加上人物的物理防御,法术防御等等!!当然最重要的一个就是阵营了,如果没有正营 谁知道你是英雄还是怪物啊!! 那Actor就是定义这些东西了!!但是这些东西都定义在Actor中会不会太乱了啊!!我感觉肯定会!所以有分开定义了!! So,最后这个类的定义如下了: CampType: 阵营类型 公共枚举类型 ActorType:演员类型 公共枚举类型 ActorInfo: 演员信息 类 #region ActorInfo 演员信息 /// <summary> /// 主角信息类 /// </summary> [System.Serializable] public class ActorInfo { /// <summary> /// ID /// </summary> public int ID; public CampType _campType = CampType.Hero; /// <summary> /// 是否为主角 /// </summary> public bool isMain; /// <summary> /// 演员类型 /// </summary> public ActorType _actorType; /// <summary> /// 设置或获取最大HP /// </summary> public int MaxHP { get { return _maxHp; } set { _maxHp = value; } } private int _maxHp; /// <summary> /// 获取当前HP /// </summary> public int GetHP { get { return _hp; } } private int _hp; /// <summary> /// 修改HP /// </summary> public int ChangeHP { set { if (value < 0) { _hp = 0; } else { _hp = value; } } } /// <summary> /// 是否死亡 /// </summary> public bool IsDie { get { return _isDie; } set { if(_isDie !=value) _isDie = value; } } private bool _isDie; /// <summary> /// 移动速度 /// </summary> public float speed=1; /// <summary> /// 跳跃能力 /// </summary> public float jumpingAbility=1; /// <summary> /// 演员属性信息 /// </summary> public AttributeInfo actorAttributeInfo; } #endregion (笔记本 屏幕太小 没法截图 我还是复制吧) AttributeInfo:属性信息类 #region AttributeInfo 属性信息 /// <summary> /// 属性信息 /// </summary> [System.Serializable] public class AttributeInfo { /// <summary> /// 物理攻击 /// </summary> public float physicalAttack = 1; /// <summary> /// 物理防御 /// </summary> public float physicalDefence = 1; /// <summary> /// 魔法攻击 /// </summary> public float magicAttack = 1; /// <summary> /// 法术防御 /// </summary> public float magicDefence = 1; /// <summary> /// 暴击率 /// </summary> public float critAttack = 1; /// <summary> /// 攻击速度 /// </summary> public float attackSpeed = 1; /// <summary> /// 护甲穿透 /// </summary> public float ArmorPenetration = 1; /// <summary> /// 魔法穿透 /// </summary> public float MagicPenetration = 1; } #endregion 当然,说是定义Actor类可以上都没有定义啊!!不急我们这就来定义: public class Actor:MonoBehaviour { public ActorInfo _actorInfo; //public AnimationState _aniState = AnimationState.idle; } 我去,Actor类就么点内容?? 没错就这么点内容! So,我们来看看挂载英雄上后的效果: 这样看内容就不少了吧!!! 大家注意 ,要先忽略掉AniState 这个属性,这个是后面用到的!! 先来看看为什么呢!! 很简单在ActorInfo中有这么一句: /// <summary> /// 演员属性信息 /// </summary> public AttributeInfo actorAttributeInfo; 这里定义了一个AttributeInfo类; 而在Actor中定义了一个ActorInfo类; public AttributeInfo_actorInfo; 如果你也定义这几个类后,在属性面板(他们说的检视面板,我感觉属性面板更合适),却没有出现我这样的状态,注意对比一下,哪个地方有区别? 对比后你也许会发现,在AttributeInfo 和AttributeInfo定义前都一个[System.Serializable]。 这个什么意思小编就不知道了,我只知道这么用,要是童靴们知道什么意思了不如留言或者QQ告诉小编一下,小编先谢过了!! 这样我们Actor类就定义完,但是现在来说都是基础的,在后期的开发中,如果还需要其他属性我们会随时往里添加!! 哎呀12点了,小编要睡觉啦!明天还上班呢!!今天我们说了创建工程和创建角色类,感觉打字讲的速度好慢啊!!! 算了 讲究一下吧!!如果可以明天会出主角控制移动部分的内容,也许会在后几天更新,看看情况吧!!! 希望各位童靴顶顶小编,给小编足够的动力一直做下去!! 如果有想一起研究制作,可以加QQ:3048734340 共同讨论
|