当前位置:主页 > 查看内容

给女朋友讲设计模式 - 游戏角色的架构

发布时间:2021-08-06 00:00| 位朋友查看

简介:这里又查出来新冠肺炎的人了,我和她都被困在小区,不让出门,这也就有机会和她辩论辩论打疫苗的事,我没有打疫苗,因为我觉得打了疫苗之后不一定有用,而她早早的就是打了疫苗,那时候打疫苗还需要排很长的队,真就以为打了疫苗之后就安全了,所以我还是说,疫苗并不……

这里又查出来新冠肺炎的人了,我和她都被困在小区,不让出门,这也就有机会和她辩论辩论打疫苗的事,我没有打疫苗,因为我觉得打了疫苗之后不一定有用,而她早早的就是打了疫苗,那时候打疫苗还需要排很长的队,真就以为打了疫苗之后就安全了,所以我还是说,"疫苗并不是百分之百的免疫病毒,如果能免疫,那也只能是已经发现的病毒,而病毒它们经过自我进化或者变异,疫苗已经攻击不到它们了,"而她就说:"打了疫苗,起码是如果再有原来的病毒来,我们都能免疫,至少不会扩散的很大.她说的是有道理的,若想一针疫苗全免疫,那可不是容易的事,我们有很长的路要走."

说完,抱了抱她,让她别担心,对她说:"我们会挺过去的." 她点点头,回自己的房间去了,我独自在书房,继续独立游戏架构设计,当我打开项目开始着手角色架构设计的时候,她又回来了,说:"我不想一个人呆着."

我看了看她,说:"那和我一起设计游戏架构呀?"

她看了看我,因为这几天的事,她心情不好,但是她还是对我笑了笑,说:本来,找个程序员男朋友就不简单,我还找了个程序员中做游戏的男朋友 .

我说:"哈哈,你要是不喜欢听我讲架构,那陪你看剧怎么样? "因为我听出来,有时候女孩子爱一个男孩子,她会欺骗她自己.毕竟,没有女孩子喜欢听编程的事.

她说:"不用了,听你讲,听困了正好去睡觉."

我说:"那好吧,毕竟昨天晚上听到疫情和洪水的消息,她也一夜没睡好."

我尽量的温柔,对她说:"我这次在想,设计一个角色的通用框架,这个框架可以在任何的项目中去使用,那么要达到这个目标,那么旧的细细的拆分角色的一些功能模块,比如:角色的属性,其中角色的属性就有,血量,蓝量,速度".

"啊,是不是还得有攻击力啊?"她问.

"不,这个攻击力不应该放在角色属性中,为什么呢?那就是因为攻击力附加在角色的使用武器上"

"哦,对,攻击力随着武器的更换而更换,那有没有基础攻击力呢?"

"基础攻击力也算是武器的一种,只不过这个武器是没有武器"

我接着说,"还有,角色受玩家控制,但是它也受AI脚本的控制,比如在一个场景中,和你对战的既有可能是真实的玩家,也有可能是个AI,也就是玩家经常说的:"假人"."

我继续说道:"其实这里还牵扯到许多东西,比如,UI上面显示的角色图标,以及生产角色的逻辑." 她皱了皱眉,耸了耸鼻子,我特爱看她耸鼻子的样子,耸鼻子的时候,嘴巧妙的做成一个很酷的动作,好像在坏笑.

她说:"有点复杂,我玩游戏的时候没想那么多."

我刮了一下她的鼻头,"其实还有许多功能,比如角色出来的时候初始等级,如果兵营级数高,那么产出的角色等级也高.等等等等"

她悟性极高,马上就想到了,立马说道:"是不是要写父类,特殊的功能写成接口?"

我愕然,她说她智商120,她绝对少说了,最起码140,仅仅是这几天的说话中谈到编程,没想到,她就已经超过了学了好几个月的人了.

我说:"对,就是这个设计思路,从代码上看是这样的:"

using UnityEngine;
using UnityEngine.AI;

public abstract  class Icharacter 
{
    protected string m_Name;
    protected GameObject m_GameObject = null;
    protected NavMeshAgent m_NavMeshAgent = null;
    protected AudioSource m_Audio = null;
    protected string m_IconSpriteName = "";

    protected bool m_bKilled = false;
    protected bool m_checkKilled = false;
    protected float m_RemoveTimer = -1.5f;
    protected bool m_c_bCanRemove = false;

    //构造函数
    public Icharacter()
    {

    }

    //设置角色共有的基本属性
    public void setGameObject(GameObject go)
    {
        m_GameObject = go;
        m_NavMeshAgent = go.GetComponent<NavMeshAgent>();
        m_Audio = go.GetComponent<AudioSource>();
    }

    public GameObject GetGamoObject()
    {
        return m_GameObject;
    }

    public void Release()
    {
        if (m_GameObject != null)
        {
            GameObject.Destroy(m_GameObject);
        }
    }

    public string GetName()
    {
        return m_Name;
    }

    public void SetIcon(string path)
    {
        m_IconSpriteName = path;
    }

    public string GetIconSpriteName()
    {
        return m_IconSpriteName;
    }
}

那么敌方和己方就是这样的

public abstract class iSoldier : Icharacter
{
    public iSoldier()
    {

    }
}

public abstract class Ienemy : Icharacter
{
    public Ienemy()
    {

    }
}

到这里,她打了打哈欠,应该是困了,我只好柔声说道:我讲完了,"把她抱到她房间里,替她盖好被子.然后出来,想着今天中午给她做个什么呢?海鲜面好了.

…END…


本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐