我为3D游戏编写了很多Unity脚本,这些脚本在2D游戏中非常有用,我真的不想重新发明轮子来将它们添加到游戏中。所以我的问题是,我可以在2D游戏中使用我当前的3D游戏脚本(使用Vector3s并调用Physics.Raycast(),Physics.Gravity等)(其中所有GameObjects都有像Collider2D和Rigidbody2D这样的2D组件将使用调用 Physics2D .Raycast(), Physics2D .Gravity等)的其他脚本?我猜我可以这样做,但它会是愚蠢的低效率,所以我不妨重新实现2D类。但我想先问一下。
感谢您的帮助!
答案 0 :(得分:3)
就像乔的评论一样,你可以。没有问题,因为Unity 2D功能将采用vector2D,当Vector3D传入它们时,z轴将被丢弃。
我的建议是为 3D 和 2D 使用相同的脚本,因为这样可以更轻松地使用所有内容。例如,当您在3D脚本中进行大型游戏逻辑更改时,您必须在2D脚本中执行相同操作。想要对2D或3D代码进行故障排除时也会非常痛苦。这是应该使用C# Preprocessor Directives
的地方。
#if USE2D
//Put your 2D specific API code
#else
//Put your 3D specific API code
#endif
现在,要测试 2D 代码,只需将#define USE2D
放在代码顶部即可。当您想对 3D 和 2D 代码进行问题排查时,此功能非常有用。您只需发表评论 #define USE2D
即可测试 3D 代码并取消注释以测试 2D 代码。