Unity(C#) 虚方法详解

一、虚方法是什么

c#中,加上virtual关键字声明的方法即为虚方法。
定义方式如下:

访问修饰符 virtual 返回类型 函数名(参数)

二、虚方法的作用

虚方法可以被子类重写,如果子类重写了此虚方法,那么就可以实现父类类型的虚方法在运行时动态转换为子类重写的方法,如果子类没有重写,则还是调用父类的虚方法。这样的话我们就可以通过子类重写来实现不同的功能。
例如:一个角色具有相同的技能动作,但是有不同的技能特效,就可以使用虚方法,调用同一父方法(技能特效),然后在子类中调用不同的特效动画。
如果不使用虚方法,那么必须重新声明方法然后再进行自己想要的功能进行编写然后再进行调用,使用虚方法只需要在派生类中对其进行调用,这样就能让代码的逻辑变得更清晰,增加代码的维护性

注意:
1.因为虚方法需要被子类调用,所以访问修饰符不能为private
2.父类虚方法使用的什么访问修饰符,子类重写就必须用什么访问修饰符

三、虚方法的实现

接下来我们使用unity来实现虚方法
先声明父类方法:

public class Simple : MonoBehaviour
{
    protected virtual void Skill()
    {
        Debug.Log("播放了人物动作");
    }
}

再声明子类方法:

public class Simple1 : Simple
{
    private void Start()
    {
        Skill();
    }

    protected override void Skill()
    {
        Debug.Log("播放了技能特效1");
    }
}

在这里插入图片描述
然后在面板中创建两个"Role"

把子类代码挂载到Role1上,然后运行观察输出结果:
在这里插入图片描述
这里在子类中重写父类的方法Skill,但子方法中并没有调用父方法,所以只输出了子类的"播放了技能特效一",如果想要执行父类方法,只需要在子方法中加上一句base.Skill()即可,base的意思就是父类。

public class Simple1 : Simple
{
    private void Start()
    {
        Skill();
    }

    protected override void Skill()
    {
        base.Skill();
        Debug.Log("播放了技能特效1");
    }
}

现在再观察运行结果:
在这里插入图片描述
可以看见现在角色除了播放了自己的技能特效之前,先播放了人物动作。

接下来我们再创建一个新的角色子类.将它挂载到Role2上:

public class Simple2 : Simple
{
    private void Start()
    {
        Skill();
    }

    protected override void Skill()
    {
    	base.Skill();
        Debug.Log("播放了技能特效2");
    }
}

现在再运行游戏,观察输出结果:
在这里插入图片描述
两个角色都运行了"播放人物动作",再分别运行了属于自己的技能特效。

ok,关于c#的虚方法就介绍到这里,感谢大家的阅读。
如果对unity开发感兴趣,可以加入我们的交流群共同探讨!!
群号:385075578
个人QQ:792006305

  • 13
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值