Projeny

来源:互联网 发布:编程之美 mobi 编辑:程序博客网 时间:2024/06/06 03:44

简介

Projeny的目的是允许您的Unity3D项目轻松扩展,而不会对开发时间造成严重影响。

Projeny允许您:

  • 在多个不同的Unity项目中共享任何Unity Asset(代码,Scenes,Prefabs等),而无需复制和粘贴
  • 在平台之间切换
  • 轻松升级或下载安装的Asset Store Package
  • 通过让Unity只重新编译最经常更改的代码来优化项目的编译时间
  • 将您的项目拆分成独立的软件包,以便您可以管理每个项目之间的依赖关系,而不是拥有一个巨大的Unity项目的相互关联的文件
  • 声明软件包之间的依赖关系,以便您随时获取所需的软件包,而无需追踪丢失的库或断开的链接
  • 生成比Unity默认更智能的Visual Studio解决方案,使用包依赖关系创建csproj依赖关系

有关Projeny如何实现所有这些功能的详细信息,请参见下文。

这个项目是开源的。如果你有兴趣帮助,太棒了!还有一些我们最终支持的功能(特别是我们需要帮助支持OSX)。

注意:Projeny需要Unity3D 5.3.1或更高版本,因为它使用-buildTarget命令行开关仅在5.3.1中被修复

安装

你可以直接从source运行Projeny(需要python)或者直接下载最新的二进制文件。请注意,Projeny目前仅在Windows上受支持(计划在未来版本中使用OSX版本)。

  • 从二进制

    • 转到[releases](https://github.com/modesttree/projeny/releases)部分,并下载最新的ProjenyInstaller.exe
    • 请注意,安装完成后,您需要将[安装目录] / Bin目录添加到Windows PATH(环境变量)。
  • 从源头

    • 将此repo复制到硬盘上的某个地方
    • 确保安装了python 3.x,并且还安装了以下内容:
      • pyyaml(安装运行pip install pyyaml
      • python的Windows扩展(下载[这里](https://sourceforge.net/projects/pywin32/)为您的版本的python)
    • 在Visual Studio中打开UnityPlugin / Projeny.sln
    • 建立发布模式
    • 将Projeny / Source / bin文件夹添加到Windows PATH(环境变量)

概述

Projeny通过组合您的Unity3D项目完全脱离’目录链接’(又名Windows连接名称符号链接)。

这最好用一个例子来展示。安装Projeny后,从发布页面下载[示例项目](https://github.com/modesttree/projeny/releases),并将其解压缩到硬盘驱动器上的新文件夹。文件夹结构应如下所示:

  • Projeny.yaml
  • UnityPackages
    • AllMovers
    • CommonShapeMover
    • CubeMover
    • SphereMover
  • UnityProjects
    • ProjenyProject.yaml
    • AllMovers
      • ProjenyProject.yaml
      • ProjectSettings
    • CubeMover
      • ProjenyProject.yaml
      • ProjectSettings
    • SphereMover
      • ProjenyProject.yaml
      • ProjectSettings

“UnityProjects”目录中的每个文件夹都代表了一个实际的Unity3D项目。请注意,它们各自具有密切的“ProjectSettings”目录,但它们还没有“Assets”目录。这是因为Projeny尚未初始化这些项目。您还会在文件夹结构的根目录中看到一个名为“Projeny.yaml”的文件。这是一个简单的文本文件,用于指定Projeny的配置设置。

要初始化这些Unity项目,我们必须从命令行运行Projeny。打开命令提示符或powershell并导航到根目录(找到Projeny.yaml的相同目录)。然后执行prj --init。如果没有找到prj命令,请检查它是否已添加到Windows PATH变量中,如安装说明所述。所有这些命令都是初始化这些项目的一些目录链接。

如果我们再次查看我们的项目文件夹,我们看到一些新的文件夹似乎已被添加。我们特别来看看“CubeMover”项目:

  • UnityProjects
    • CubeMover
      • ProjectSettings
      • CubeMover-Windows
        • Assets
          • CubeMover
          • Plugins
            • CommonShapeMover
            • Projeny
        • ProjectSettings

“CubeMover-Windows”文件夹是新的,现在有一个熟悉的“Assets”目录。它还包含一堆文件夹,如“CubeMover”,“CommonShapeMover”等。

要实际运行我们的项目,请打开Unity中的“CubeMover-Windows”文件夹,然后在“CubeMover / CubeMain”中打开场景。运行后,您应该看到立方体在改变颜色的同时移动。

那么所有这些文件来自哪里?答案是“目录链接”(又称Windows连接名称符号链接)。所有这些新的文件夹本身不是真正的文件夹,而是简单地链接到其他地方的现有文件夹。

实际上,如果您使用源代码控制,则应将整个“CubeMover-Windows”目录从其中排除(通过使用.gitignore文件,.svnignore.p4ignore或任何忽略方法适用到您使用的源代码控制)。如果您使用subversion或git,则在初始化项目时会自动发生这种情况(否则,您必须确保自己添加忽略文件)。

我们这样做是因为“CubeMover-Windows”文件夹的内容本身不包含任何真实的内容。它只包含由Unity生成的临时文件(例如Library文件夹)和目录链接到实际包含内容的其他目录。

包含实际内容的目录可以在“UnityPackages”目录中找到。在这里您可以找到我们看到的“CubeMover”和“CommonShapeMover”文件夹链接到assets目录下面。

但是Projeny如何知道哪些软件包用于“CubeMover”项目?为此,它从配置文本文件读取,可以在CubeMover / ProjenyProject.yaml找到。有关此文件的详细信息,请参见下面的其他部分。该文件可以手动更改,但大部分时间您可以使用Projeny的内置Unity插件来操作此文件。您可以通过在Unity中打开“CubeMover”项目,然后单击菜单项“Projeny - > Package Manager …”来尝试这个。以下部分将对此窗口进行更详细的说明。

管理 Asset Store Assets

这是“发布”的列表。 “释放”是指外部资产集合,通常具有关联的版本号。在大多数情况下,这些是指您通过资产存储下载的项目,但也可以从其他来源(如硬盘驱动器或远程文件服务器上的本地文件夹)检索。

使用多个包文件夹

到目前为止,我们假设所有包含在您的团结项目中的包都有一个确定的文件夹。但是,这是可配置的,因此,如果需要,您可以定义多个位置来从中抽取包。如果要定义特定于项目的程序包,并且不想在共享的“UnityPackages”目录中添加混乱,这可能尤其有用。

要查看此操作,请下载示例项目,然后打开“All-Movers”项目(通过在Unity中打开“UnityProjects \ AllMovers \ AllMovers-Windows”目录或运行prj --project AllMovers --openUnity/prj -p am -ou从命令行)

然后通过菜单项“Projeny - >Package Manager”打开Package Manager。在“Packages”面板中,您将看到一个下拉列表,您可以从屏幕截图中所示的位置选择从哪里获取软件包列表:

Package Manager

选择下拉列表并选择[ProjectRoot] \ Packages选项。默认情况下会显示一个空的列表。右键单击列表中的New Package,然后输入“Test”。您应该看到以下内容:

Package Manager

现在,在列表中再次右键单击并选择Show Root Folder In Explorer。这将打开UnityProjects / AllMovers / Packages的目录。

在该下拉列表中显示的包文件夹位置列表按每个项目进行配置,可在ProjenyProject.yaml文件中找到。示例项目设置有两个位置。一个用于通用的UnityPackages文件夹,一个用于每个项目的根文件夹下面。

要查看这个设置,请在UnityProjects / ProjenyProject.yaml打开文件ProjenyProject.yaml。除了UnityProjects / AllMovers / ProjenyProject.yaml内的设置之外,此文件中的设置将自动应用于所有项目。该文件应显示如下:

PackageFolders:    - '[SharedUnityPackagesDir]'    - '[ProjectRoot]/Packages'

此列表应包含与在Package Manager GUI中的下拉列表中显示的值相同的值。

共享项目设置

除了在团队项目之间共享软件包,您还可以共享项目设置。项目设置包括您在Unity内的 Edit -> Project Settings中打开任何菜单项时看到的所有值。如果要创建具有稍微不同的程序包集合的项目的副本,这将非常有用。

要查看此操作,请下载示例项目,然后打开“All-Movers”项目(通过在Unity中打开“UnityProjects \ AllMovers \ AllMovers-Windows”目录或运行prj --project AllMovers --openUnity/prj -p am -ou从命令行)

然后,选择菜单项目Projeny -> Change Project -> New。这应该显示以下弹出窗口:

Package Manager

确保勾选”Share Project Settings”复选框,默认情况下未选中。给它名字Test

单击提交后,您的新项目应该被初始化,然后在Unity中打开。现在,如果从Edit -> Project Settings菜单更改项目设置,它将同时适用于“AllMovers”和新创建的“Test”项目。

像所有的项目设置一样,这是在ProjenyProject.yaml文件中配置的。如果您打开它,可以通过点击包管理器中的“Edit”按钮,或者打开“UnityProjects / Test / ProjenyProject.yaml”,您应该看到以下内容:

ProjectSettingsPath: '[ProjectRoot]/../AllMovers/ProjectSettings'

请注意,由于我们尚未将任何包添加到我们的新项目中,“AssetsFolder”和“PluginsFolder”还没有一行。

“Gotchas”与目录链接

  • 直接在Unity内移动包文件夹

    • 您可以使用Unity的“项目”选项卡在Unity内部移动文件和目录,但是您应该小心不要自己移动任何包目录。否则,您可能会在下次获得projeny来更新您的目录链接时最终得到重复的文件。
  • 复制和粘贴项目不起作用

    • 如果将整个目录结构复制并粘贴到硬盘驱动器上的其他位置,目录链接将成为新位置的空文件夹。为了解决这个问题,在复制和粘贴文件之后,在新的位置运行prj -cla --init。所有这些都清除所有生成的文件(-cla),然后初始化所有项目的所有目录链接(--init)。
  • 如果您使用git进行源代码控制,则在使用git clean时应该小心

    • 运行git clean -df应该按预期工作,但是如果你运行git clean -xdf,你可能会丢失一些数据。这是因为git clean跟随目录链接。所以如果它尝试删除您的UnityProjects目录下的生成的文件,这也将删除UnityPackages目录中的一些文件。运行git clean -df将不会有这个问题,因为你的UnityProjects文件夹应该被git忽略,而git clean只会删除被忽略的文件,如果你也提供-x选项。如果您需要包含-x选项,那么我们建议先运行prj -cla,这将确保所有生成的文件首先被清除。
  • 与使用git clean时不同,使用Windows资源管理器删除文件夹是安全的。

    • 如果您在使用Windows资源管理器时删除您的“UnityProjects”目录下的不同的统一项目,则不应删除“UnityPackages”中的任何文件(与使用git clean时不同)。这是因为当Windows资源管理器遇到目录链接时,它只是删除引用而不是递归。
  • 首次打开您的项目(或添加新包后)Unity将显示以下警告


    [Asset]是一个象征性的链接。在Unity项目中使用符号链接可能会导致您的项目损坏,如果您创建对同一资产的多个引用,使用递归符号链接或使用符号链接在与不同版本的Unity使用的项目之间共享资产。确保你知道你在做什么

    但是,我们没有做任何Unity警告的事情,所以这个警告可以忽略。

自定义发布源

在上述部分中提到的A,发行版列表通常只是您的Asset Store购买清单,但它也支持其他来源。

每个来源最终只是Unity包的集合。这也是Unity在Asset Store缓存中存储的,所以即使在这种情况下,它只是一个Unity包的列表。

例如,要添加新的本地文件夹源,请打开一个Projeny配置文件(Projeny.yaml),并包括以下内容:

ReleaseSources:    - LocalFolder:        Path: 'C:/MyLocalFolderSource'

您可能想要放置的一个方便的地方是Projeny配置系统,可以在您的用户主目录“C:/ Users / [您的用户名] / Projeny.yaml”中找到。这很方便,因为这些版本将可用于您通过计算机上的Projeny创建的任何Unity项目。

现在,如果您将.unitypackage文件复制并粘贴到此文件夹中,并单击Package Manager中的刷新按钮(通过“Projeny - >Package Manager”下的菜单在Unity中访问),那么这些.unitypackage文件将显示在“Releases”列表中。

请注意,您可以使用不同的路径添加多个本地文件夹源,包括网络共享上的路径。

还要注意,您可以使用以下命名约定为自定义unitypackage文件指定版本:MyCustomPackage @ 1.2.unitypackage。在这种情况下,它将加载它作为版本“1.2”。此命名约定仅对您自己创建的自定义unitypackage文件是必需的。您通过Asset Store下载的任何“unitypackage”文件都将嵌入此版本信息。

在具有自己的LAN的办公环境中工作时,通过网络共享发布源可能非常有用。您的组织可以建立组织中任何人都可以访问的“releases”的大量集合。

如果您不想为此使用网络共享,还可以定义使用URL声明的FileServer发行版源。然后,您可以运行一个静态网站,可以将Unity软件包提供给网络上的任何人。

首先,您必须托管一个静态网站,其中只包含一个.unitypackage文件的平面列表。那么你需要运行PrjUpdateReleaseManifest [directory]与您要扫描的目录的路径(或简单的.为当前目录).这将导致在同一目录中创建一个名为“ProjenyReleaseManifest.txt”的文件。 “PrjUpdateReleaseManifest”还包括一个命令行选项,无限期地“监视”目录,因此您只需在那里上传文件,并且清单将自动更新。

设置文件服务器后,您可以将其声明为您的Projeny.yaml之一的发行版,如下所示:

ReleaseSources:    - FileServer:        ManifestUrl: 'http://mysharedserver/ProjenyReleaseManifest.txt'
原创粉丝点击