微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Unity如何与C#类一起使用

通过研究纯C#,我发现Unity中的脚本(使用C#)有点不直观.

例如,似乎人们(初学者?)在Unity中使用脚本的最常见方式是创建“单一用途”类型脚本并将其附加到实际游戏对象(通过单击并将其拖动到脚本组件).以这种方式,似乎很少用于继承.或许我倒退了.我应该在附加到游戏对象之外创建类/继承,然后只将脚本附加到引用那些外部类的游戏对象吗?我相信你们中的一些人可能只会说“做你想做的事!”或“做什么有效”,但我不想从糟糕的编码方法开始,只是为了最后重构它.

我很困惑的另一件事是Unity中的类实例.无论出于何种原因,似乎我可以使用像Animator这样的内置类而无需实例化它[我几乎从未见过一个=新的Class();然而这些类并不是静态的.这是如何运作的?如果我构建自己的游戏对象引用的类,我是否必须创建与它们一起工作的实例,或者这一切都是由引擎在引擎盖下完成的?

所有这些脚本中的游戏对象(编辑器中的实际项目)在哪里?是否有为每个游戏对象制作的类?如果是这样,我如何找到它并偷看它发生了什么?

解决方法

Unity中的继承与其他框架中的方式完全相关.

考虑你想要实现两种类型的敌人,它们都有一些共同的行为(步行,攻击),并且都有特定的行为(A可以飞行,但B使用寻路攻击).您将设计一个继承自MonoBehavIoUr的抽象Enemy类(btw脚本继承自MonoBehavIoUr,继承自Behavior,..,因此继承就在那里),然后每个继承自Enemy.

这对于维护以及使用你的敌人更好. FlyingEnemy和PathEnemy可以存储在Enemy类型的集合中,允许您迭代它以执行常见的敌人行动(如死亡).

界面也非常有用,因为你可以有一个击中关卡中任何东西的射弹.射弹将检查命中的GameObject是否包含Idamageable组件,如果是,则调用接口的damage方法.这允许在不知道它是玩家,敌人还是墙壁的情况下击中任何东西.每个都在自己的脚本中实现接口,该方法只执行相关操作.

如果没有这个,你的射弹必须通过一长串检查才能知道它是这个还是那个.

原文地址:https://www.jb51.cc/csharp/99886.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐