コード例 #1
0
 public CountryValidator(String countryAbbrev)
     : base()
 {
     CountryAbbrev    = countryAbbrev;
     LocalizedMessage = new LocalizedMessage("{0} must start with the '" + countryAbbrev + "', '{1}' is not valid ");
 }
コード例 #2
0
 public override string GetErrorMessage(ValidationContext validationContext)
 {
     return(LocalizedMessage.Format(validationContext.Property.DisplayName, validationContext.PropertyValue));
 }
コード例 #3
0
        protected override void Logic(ValidationTarget target)
        {
            var referenceDictionary = targetFinder.ReferenceDictionary;

            // 除外する配布物アセットのパス
            var excludePaths = unauthorizedIDSet
                               .Select(guid => AssetDatabase.GUIDToAssetPath(guid));

            // 入稿フォルダ内および出展物から参照されるすべてのアセットのパス
            var allAssetPaths   = target.GetAllAssetPaths();
            var submitDirectory = target.GetBaseFolderPath();

            // 入稿フォルダ内に配置されているファイルのパス
            // GetFilesで取得したパス名にはバックスラッシュが混在するためスラッシュに変換
            var filePathsInSubmitDirectory = Directory
                                             .GetFiles(submitDirectory, "*", SearchOption.AllDirectories)
                                             .Select(x => x.Replace("\\", "/"));

            // 入稿フォルダ内のディレクトリのパス
            var folderPathInSubmitDirectory = Directory
                                              .GetDirectories(submitDirectory, "*", SearchOption.AllDirectories)
                                              .Select(x => x.Replace("\\", "/"));

            foreach (var assetPath in allAssetPaths)
            {
                // Unityのビルトインアセットを除外
                if (!assetPath.StartsWith("Assets"))
                {
                    continue;
                }

                // 運営からの配布物を検証対象から除外
                if (excludePaths.Contains(assetPath))
                {
                    continue;
                }

                // 入稿フォルダ内のサブディレクトリ(アセット含まない)を検証対象から除外
                if (folderPathInSubmitDirectory.Contains(assetPath) || assetPath == submitDirectory)
                {
                    continue;
                }

                // 入稿フォルダ内にパスがあるアセットなのか検証
                if (filePathsInSubmitDirectory.Contains(assetPath))
                {
                    continue;
                }

#if VRC_SDK_VRCSDK3
                // VRCSDK3: SerializedUdonPrograms の中を除外
                if (assetPath.StartsWith("Assets/SerializedUdonPrograms/"))
                {
                    continue;
                }
#endif

                // エラー対象である事が確定したためIssue発行
                var targetAsset = AssetDatabase.LoadMainAssetAtPath(assetPath);
                referenceDictionary.Reverse.TryGetValue(targetAsset, out var referrerAssets);

                var referrerMessage =
                    LocalizedMessage.Get("ExistInSubmitFolderRule.HasOutOfPackageReference", assetPath);
                var referrerSolution =
                    LocalizedMessage.Get("ExistInSubmitFolderRule.HasOutOfPackageReference.Solution");
                var referrerSolutionURL =
                    LocalizedMessage.Get("ExistInSubmitFolderRule.HasOutOfPackageReference.SolutionURL");

                if (referrerAssets != null)
                {
                    foreach (var referrerAsset in referrerAssets)
                    {
                        AddIssue(new Issue(referrerAsset, IssueLevel.Error, referrerMessage, referrerSolution, referrerSolutionURL));
                    }
                }

                var message  = LocalizedMessage.Get("ExistInSubmitFolderRule.AssetOutOfPackage", assetPath);
                var solution = LocalizedMessage.Get("ExistInSubmitFolderRule.AssetOutOfPackage.Solution");

                AddIssue(new Issue(targetAsset, IssueLevel.Error, message, solution));
            }
        }
コード例 #4
0
ファイル: Chat.cs プロジェクト: luuutz/ClassicUO
 public static void OnLocalizedMessage(Entity entity, UOMessageEventArgs args)
 {
     LocalizedMessage.Raise(args, entity ?? _system);
 }
コード例 #5
0
 internal static void OnLocalizedMessage(Entity entity, UOMessageEventArgs args)
 {
     Task.Run(() => LocalizedMessage.Raise(args, entity ?? system));
 }
コード例 #6
0
        public IRule[] GetRules()
        {
            // デフォルトで使っていたAttribute式は宣言時にconst以外のメンバーが利用できない。
            // 継承したプロパティを参照して挙動を変えることが出来ない為、直接リストを返す方式に変更した。
            return(new IRule[]
            {
#if VRC_SDK_VRCSDK2
                new UnityVersionRule(LocalizedMessage.Get("VketRuleSetBase.UnityVersionRule.Title", "2018.4.20f1"), "2018.4.20f1"),

                new VRCSDKVersionRule(LocalizedMessage.Get("VketRuleSetBase.VRCSDKVersionRule.Title"),
                                      new VRCSDKVersion("2020.05.06.12.14"),
                                      "https://files.vrchat.cloud/sdk/VRCSDK2-2020.09.15.11.25_Public.unitypackage"),

                new ExistInSubmitFolderRule(LocalizedMessage.Get("VketRuleSetBase.ExistInSubmitFolderRule.Title"), VketOfficialAssetData.GUIDs, targetFinder),

                new AssetGuidBlacklistRule(LocalizedMessage.Get("VketRuleSetBase.OfficialAssetDontContainRule.Title"), VketOfficialAssetData.GUIDs),

                new AssetNamingRule(LocalizedMessage.Get("VketRuleSetBase.NameOfFileAndFolderRule.Title"), @"[a-zA-Z0-9 _\.\-\(\)]+"),

                new AssetPathLengthRule(LocalizedMessage.Get("VketRuleSetBase.FilePathLengthLimitRule.Title", 184), 184),

                new AssetExtentionBlacklistRule(LocalizedMessage.Get("VketRuleSetBase.MeshFileTypeBlacklistRule.Title"),
                                                new string[] { ".ma", ".mb", "max", "c4d", ".blend" }
                                                ),

                new ContainMatOrTexInAssetRule(LocalizedMessage.Get("VketRuleSetBase.ContainMatOrTexInAssetRule.Title")),

                new FolderSizeRule(LocalizedMessage.Get("VketRuleSetBase.FolderSizeRule.Title"), FolderSizeLimit),

                new ExhibitStructureRule(LocalizedMessage.Get("VketRuleSetBase.ExhibitStructureRule.Title")),

                new StaticFlagRule(LocalizedMessage.Get("VketRuleSetBase.StaticFlagsRule.Title")),

                new BoothBoundsRule(LocalizedMessage.Get("VketRuleSetBase.BoothBoundsRule.Title"),
                                    size: BoothSizeLimit,
                                    margin: 0.01f),

                new AssetTypeLimitRule(
                    LocalizedMessage.Get("VketRuleSetBase.MaterialLimitRule.Title", MaterialUsesLimit),
                    typeof(Material),
                    MaterialUsesLimit,
                    VketOfficialAssetData.MaterialGUIDs),

                new LightmapSizeLimitRule(
                    LocalizedMessage.Get("VketRuleSetBase.LightMapsLimitRule.Title", LightmapCountLimit, 512),
                    lightmapCountLimit: LightmapCountLimit,
                    lightmapResolutionLimit: 512),

                new GlobalIlluminationBakedRule(LocalizedMessage.Get("VketRuleSetBase.GlobalIlluminationBakedRule.Title")),

                new UsableComponentListRule(LocalizedMessage.Get("VketRuleSetBase.UsableComponentListRule.Title"),
                                            GetComponentReferences(),
                                            ignorePrefabGUIDs: VketOfficialAssetData.GUIDs),

                new SkinnedMeshRendererRule(LocalizedMessage.Get("VketRuleSetBase.SkinnedMeshRendererRule.Title")),

                new MeshRendererRule(LocalizedMessage.Get("VketRuleSetBase.MeshRendererRule.Title")),

                new ReflectionProbeRule(LocalizedMessage.Get("VketRuleSetBase.ReflectionProbeRule.Title")),

                new VRCTriggerConfigRule(LocalizedMessage.Get("VketRuleSetBase.VRCTriggerConfigRule.Title"),
                                         VRCTriggerBroadcastTypesWhitelist,
                                         new VRC_Trigger.TriggerType[] {
                    VRC_Trigger.TriggerType.Custom,
                    VRC_Trigger.TriggerType.OnInteract,
                    VRC_Trigger.TriggerType.OnEnterTrigger,
                    VRC_Trigger.TriggerType.OnExitTrigger,
                    VRC_Trigger.TriggerType.OnPickup,
                    VRC_Trigger.TriggerType.OnDrop,
                    VRC_Trigger.TriggerType.OnPickupUseDown,
                    VRC_Trigger.TriggerType.OnPickupUseUp
                },
                                         VRCTriggerActionWhitelist,
                                         VketOfficialAssetData.GUIDs),

                new UseMeshColliderRule(LocalizedMessage.Get("VketRuleSetBase.UseMeshColliderRule.Title")),

                new VRCTriggerCountLimitRule(LocalizedMessage.Get("VketRuleSetBase.VRCTriggerCountLimitRule.Title", VRCTriggerCountLimit), VRCTriggerCountLimit),

                new LightCountLimitRule(LocalizedMessage.Get("VketRuleSetBase.DirectionalLightLimitRule.Title"), UnityEngine.LightType.Directional, 0),

                new LightConfigRule(LocalizedMessage.Get("VketRuleSetBase.PointLightConfigRule.Title"), UnityEngine.LightType.Point, ApprovedPointLightConfig),

                new LightConfigRule(LocalizedMessage.Get("VketRuleSetBase.SpotLightConfigRule.Title"), UnityEngine.LightType.Spot, ApprovedSpotLightConfig),

                new LightConfigRule(LocalizedMessage.Get("VketRuleSetBase.AreaLightConfigRule.Title"), UnityEngine.LightType.Area, ApprovedAreaLightConfig),

                new LightCountLimitRule(
                    LocalizedMessage.Get("VketRuleSetBase.AreaLightLimitRule.Title", AreaLightUsesLimit),
                    UnityEngine.LightType.Area,
                    AreaLightUsesLimit),

                new UseLightModeRule(LocalizedMessage.Get("VketRuleSetBase.PointLightModeRule.Title"), UnityEngine.LightType.Point, unusablePointLightModes),

                new UseLightModeRule(LocalizedMessage.Get("VketRuleSetBase.SpotLightModeRule.Title"), UnityEngine.LightType.Spot, unusableSpotLightModes),

                new AnimationMakesMoveCollidersRule(LocalizedMessage.Get("VketRuleSetBase.AnimationMakesMoveCollidersRule.Title")),

                new AnimationClipRule(LocalizedMessage.Get("VketRuleSetBase.AnimationClipRule.Title")),

                new AnimationComponentRule(LocalizedMessage.Get("VketRuleSetBase.AnimationComponentRule.Title"), officialPrefabsDetector),

                new AnimatorComponentRule(LocalizedMessage.Get("VketRuleSetBase.AnimatorComponentRule.Title"),
                                          new System.Type[] {
                    typeof(VRC_Pickup),
                    typeof(VRC_ObjectSync)
                }, officialPrefabsDetector),

                new CanvasRenderModeRule(LocalizedMessage.Get("VketRuleSetBase.CanvasRenderModeRule.Title")),

                new CameraComponentRule(LocalizedMessage.Get("VketRuleSetBase.CameraComponentRule.Title"), maxRenderTextureSize: new Vector2(1024, 1024)),

                new CameraComponentMaxCountRule(LocalizedMessage.Get("VketRuleSetBase.CameraComponentMaxCountRule.Title"), limit: 1),

                new ProjectorComponentRule(LocalizedMessage.Get("VketRuleSetBase.ProjectorComponentRule.Title")),

                new ProjectorComponentMaxCountRule(LocalizedMessage.Get("VketRuleSetBase.ProjectorComponentMaxCountRule.Title"), limit: 1),

                new PickupObjectSyncPrefabRule(LocalizedMessage.Get("VketRuleSetBase.PickupObjectSyncRule.Title"), VketOfficialAssetData.PickupObjectSyncPrefabGUIDs),

                new AvatarPedestalPrefabRule(LocalizedMessage.Get("VketRuleSetBase.AvatarPedestalPrefabRule.Title"), VketOfficialAssetData.AvatarPedestalPrefabGUIDs),

                new AudioSourcePrefabRule(LocalizedMessage.Get("VketRuleSetBase.AudioSourcePrefabRule.Title"), VketOfficialAssetData.AudioSourcePrefabGUIDs),

                new RigidbodyRule(LocalizedMessage.Get("VketRuleSetBase.RigidbodyRule.Title")),

                new PrefabLimitRule(
                    LocalizedMessage.Get("VketRuleSetBase.ChairPrefabLimitRule.Title", ChairPrefabUsesLimit),
                    VketOfficialAssetData.ChairPrefabGUIDs,
                    ChairPrefabUsesLimit),

                new PrefabLimitRule(
                    LocalizedMessage.Get("VketRuleSetBase.UnusabePrefabRule.Title", ChairPrefabUsesLimit),
                    VketOfficialAssetData.VRCSDKPrefabGUIDs,
                    0),

                new PrefabLimitRule(
                    LocalizedMessage.Get("VketRuleSetBase.PickupObjectSyncPrefabLimitRule.Title", PickupObjectSyncUsesLimit),
                    VketOfficialAssetData.PickupObjectSyncPrefabGUIDs,
                    PickupObjectSyncUsesLimit),

                new VideoPlayerComponentRule(LocalizedMessage.Get("VketRuleSetBase.VideoPlayerComponentRule.Title")),

                new VideoPlayerComponentMaxCountRule(LocalizedMessage.Get("VketRuleSetBase.VideoPlayerComponentMaxCountRule.Title"), limit: 1),

                new AnimatorComponentMaxCountRule(LocalizedMessage.Get("VketRuleSetBase.AnimatorComponentMaxCountRule.Title"), limit: 50)
#endif
            });
        }
コード例 #7
0
 public static void LogCodedWarning(int verbosity, LocalizedMessage message, ISourceLineInfo sourceInfo, params string [] args)
 => LogCodedWarning(verbosity, message, null, sourceInfo.SourceFile, sourceInfo.LineNumber, sourceInfo.LinePosition, args);
コード例 #8
0
        public static ValidatedExportResult ValidatedExport(string baseFolderPath, ExportSetting setting, bool forceExport = false, bool forceOpenScene = false)
        {
            if (setting == null)
            {
                throw new ArgumentNullException("Argument `setting` is null.");
            }
            if (baseFolderPath == null)
            {
                throw new ArgumentNullException("Argument `baseFolderPath` is null.");
            }
            var exportFolderPath = setting.ExportFolderPath;

            if (string.IsNullOrEmpty(exportFolderPath) || !exportFolderPath.StartsWith("Assets"))
            {
                throw new ArgumentNullException("Invalid export folder path:" + exportFolderPath);
            }
            ExportSettingStock settingStock = new ExportSettingStock(setting);
            var result = new ValidatedExportResult(forceExport);

            //validate
            if (!forceExport)
            {
                if (!string.IsNullOrEmpty(setting.ruleSetName))
                {
                    var ruleSet = GetRuleSet(setting.ruleSetName);
                    if (ruleSet == null)
                    {
                        result.log += LocalizedMessage.Get("ValidatedExporter.ProblemOccurredWhileValidating") +
                                      LocalizedMessage.Get("ValidatedExporter.RuleNotFound", setting.ruleSetName);
                        return(result);
                    }
                    try
                    {
                        result.validationResults = Validator.Validator.Validate(ruleSet, baseFolderPath, forceOpenScene);
                    }
                    catch (FatalValidationErrorException e)
                    {
                        result.log += LocalizedMessage.Get("ValidatedExporter.ProblemOccurredWhileValidating")
                                      + System.Environment.NewLine + e.Message;
                        return(result);
                    }
                    if (!result.HasValidationIssues(setting.ignoreValidationWarning ? IssueLevel.Error : IssueLevel.Warning))
                    {
                        result.log += LocalizedMessage.Get("ValidatedExporter.IssueFound") + System.Environment.NewLine;
                        return(result);
                    }
                }
                else
                {
                    result.log += LocalizedMessage.Get("ValidatedExporter.SkipValidation") + System.Environment.NewLine;
                }
            }

            //export
            result.exportResult = Exporter.Exporter.Export(baseFolderPath, settingStock.GetSetting(), forceExport);
            if (!result.IsExportSuccess)
            {
                result.log += LocalizedMessage.Get("ValidatedExporter.Failed") + System.Environment.NewLine;
            }
            return(result);
        }
コード例 #9
0
 public static void LogCodedError(LocalizedMessage message, Exception innerException, string sourceFile, int line, int column, params string [] args)
 {
     throw new BindingGeneratorException(message.Code, sourceFile, line, column, string.Format(message.Value, args), innerException);
 }
コード例 #10
0
 public static void LogCodedWarning(int verbosity, LocalizedMessage message, params string [] args)
 => LogCodedWarning(verbosity, message, null, null, -1, -1, args);
コード例 #11
0
 public static void LogCodedError(LocalizedMessage message, Exception innerException, params string [] args)
 => LogCodedError(message, innerException, null, -1, -1, args);
コード例 #12
0
 public static void LogCodedError(LocalizedMessage message, params string [] args)
 => LogCodedError(message, null, null, -1, -1, args);
コード例 #13
0
 public static string FormatCodedMessage(bool error, LocalizedMessage message, params object [] args)
 => Format(error, message.Code, null, -1, -1, message.Value, args);
コード例 #14
0
        private void LogicForStaticRoot(Transform staticRoot)
        {
            var children = staticRoot.GetComponentsInChildren <Transform>(true);

            foreach (var child in children)
            {
                var gameObject = child.gameObject;
                var flag       = GameObjectUtility.GetStaticEditorFlags(child.gameObject);

                if ((flag & StaticEditorFlags.OccludeeStatic) == 0)
                {
                    AddIssue(new Issue(
                                 gameObject,
                                 IssueLevel.Error,
                                 LocalizedMessage.Get("StaticFlagRule.OccludeeStaticNotSet"),
                                 LocalizedMessage.Get("StaticFlagRule.OccludeeStaticNotSet.Solution")));
                }

                if ((flag & StaticEditorFlags.ReflectionProbeStatic) == 0)
                {
                    AddIssue(new Issue(
                                 gameObject,
                                 IssueLevel.Error,
                                 LocalizedMessage.Get("StaticFlagRule.ReflectionProveStaticNotSet"),
                                 LocalizedMessage.Get("StaticFlagRule.ReflectionProveStaticNotSet.Solution")));
                }

                if ((flag & StaticEditorFlags.BatchingStatic) == 0)
                {
                    AddIssue(new Issue(
                                 gameObject,
                                 IssueLevel.Error,
                                 LocalizedMessage.Get("StaticFlagRule.BatchingStaticNotSet"),
                                 "必ずBatchingStaticを有効にして下さい。"));
                }

                if ((flag & StaticEditorFlags.OccluderStatic) != 0)
                {
                    var message     = LocalizedMessage.Get("StaticFlagRule.OccluderStaticNotAllowed");
                    var solution    = LocalizedMessage.Get("StaticFlagRule.OccluderStaticNotAllowed.Solution");
                    var solutionURL = LocalizedMessage.Get("StaticFlagRule.OccluderStaticNotAllowed.SolutionURL");

                    AddIssue(new Issue(gameObject, IssueLevel.Error, message, solution, solutionURL));
                }

                if ((flag & StaticEditorFlags.LightmapStatic) != 0)
                {
                    foreach (var filter in gameObject.GetComponents <MeshFilter>())
                    {
                        if (filter == null)
                        {
                            continue;
                        }

                        var mesh = filter.sharedMesh;
                        if (mesh == null) // メッシュが設定されていない場合はチェック対象外
                        {
                            continue;
                        }

                        if (mesh.uv2.Length != 0) // uv2があればLightmapとして利用できる為問題なし
                        {
                            continue;
                        }

                        var assetPath = AssetDatabase.GetAssetPath(mesh);
                        if (string.IsNullOrWhiteSpace(assetPath)) // 対象のメッシュがアセットでない
                        {
                            AddIssueForIndependentMeshWithoutUV2(filter);
                            continue;
                        }

                        var importer = AssetImporter.GetAtPath(assetPath) as ModelImporter;
                        if (importer == null) // 対象のメッシュのimporterがない(モデルインポートでないメッシュアセット)
                        {
                            AddIssueForIndependentMeshWithoutUV2(filter);
                            continue;
                        }

                        if (!importer.generateSecondaryUV) // 対象のメッシュアセットのgenerateSecondaryUVが無効になっている
                        {
                            var message     = LocalizedMessage.Get("StaticFlagRule.LightmapStaticMeshAssetShouldGenerateLightmap");
                            var solution    = LocalizedMessage.Get("StaticFlagRule.LightmapStaticMeshAssetShouldGenerateLightmap.Solution");
                            var solutionURL = LocalizedMessage.Get("StaticFlagRule.LightmapStaticMeshAssetShouldGenerateLightmap.SolutionURL");

                            AddIssue(new Issue(filter, IssueLevel.Warning, message, solution, solutionURL));
                        }
                    }
                }
            }
        }
コード例 #15
0
 public CountryIsUsValidator()
     : base()
 {
     LocalizedMessage = new LocalizedMessage("{0} must start with the 'US', '{1}' is not valid ");
 }
コード例 #16
0
        public IRule[] GetRules()
        {
            // デフォルトで使っていたAttribute式は宣言時にconst以外のメンバーが利用できない。
            // 継承したプロパティを参照して挙動を変えることが出来ない為、直接リストを返す方式に変更した。
            return(new IRule[]
            {
                new UnityVersionRule(LocalizedMessage.Get("VketRuleSetBase.UnityVersionRule.Title", "2018.4.20f1"), "2018.4.20f1"),

                new VRCSDKVersionRule(LocalizedMessage.Get("VketRuleSetBase.VRCSDKVersionRule.Title"),
                                      new VRCSDKVersion("2020.05.06.12.14"),
                                      "https://files.vrchat.cloud/sdk/VRCSDK3-WORLD-2020.08.07.18.18_Public.unitypackage"),

                new ExistInSubmitFolderRule(LocalizedMessage.Get("VketRuleSetBase.ExistInSubmitFolderRule.Title"), VRCUdonSampleOfficialAssetData.GUIDs, targetFinder),

                new AssetGuidBlacklistRule(LocalizedMessage.Get("VketRuleSetBase.OfficialAssetDontContainRule.Title"), VRCUdonSampleOfficialAssetData.GUIDs),

                new AssetNamingRule(LocalizedMessage.Get("VketRuleSetBase.NameOfFileAndFolderRule.Title"), @"[a-zA-Z0-9 _\.\-\(\)]+"),

                new AssetPathLengthRule(LocalizedMessage.Get("VketRuleSetBase.FilePathLengthLimitRule.Title", 184), 184),

                new AssetExtentionBlacklistRule(LocalizedMessage.Get("VketRuleSetBase.MeshFileTypeBlacklistRule.Title"),
                                                new string[] { ".ma", ".mb", "max", "c4d", ".blend" }
                                                ),

                new ContainMatOrTexInAssetRule(LocalizedMessage.Get("VketRuleSetBase.ContainMatOrTexInAssetRule.Title")),

                new FolderSizeRule(LocalizedMessage.Get("VketRuleSetBase.FolderSizeRule.Title"), FolderSizeLimit),

                new ExhibitStructureRule(LocalizedMessage.Get("VketRuleSetBase.ExhibitStructureRule.Title")),

                new StaticFlagRule(LocalizedMessage.Get("VketRuleSetBase.StaticFlagsRule.Title")),

                new BoothBoundsRule(LocalizedMessage.Get("VketRuleSetBase.BoothBoundsRule.Title"),
                                    size: BoothSizeLimit,
                                    margin: 0.01f,
                                    Vector3.zero,
                                    VRCUdonSampleOfficialAssetData.SizeIgnorePrefabGUIDs),

                new AssetTypeLimitRule(
                    LocalizedMessage.Get("VketRuleSetBase.MaterialLimitRule.Title", MaterialUsesLimit),
                    typeof(Material),
                    MaterialUsesLimit,
                    VRCUdonSampleOfficialAssetData.MaterialGUIDs),

                new LightmapSizeLimitRule(
                    LocalizedMessage.Get("VketRuleSetBase.LightMapsLimitRule.Title", LightmapCountLimit, 512),
                    lightmapCountLimit: LightmapCountLimit,
                    lightmapResolutionLimit: 512),

                new GlobalIlluminationBakedRule(LocalizedMessage.Get("VketRuleSetBase.GlobalIlluminationBakedRule.Title")),

                new UsableComponentListRule(LocalizedMessage.Get("VketRuleSetBase.UsableComponentListRule.Title"),
                                            GetComponentReferences(),
                                            ignorePrefabGUIDs: VRCUdonSampleOfficialAssetData.GUIDs),

                new SkinnedMeshRendererRule(LocalizedMessage.Get("VketRuleSetBase.SkinnedMeshRendererRule.Title")),

                new MeshRendererRule(LocalizedMessage.Get("VketRuleSetBase.MeshRendererRule.Title")),

                new ReflectionProbeRule(LocalizedMessage.Get("VketRuleSetBase.ReflectionProbeRule.Title")),

                new UseMeshColliderRule(LocalizedMessage.Get("VketRuleSetBase.UseMeshColliderRule.Title")),

                new LightCountLimitRule(LocalizedMessage.Get("VketRuleSetBase.DirectionalLightLimitRule.Title"), UnityEngine.LightType.Directional, 0),

                new LightConfigRule(LocalizedMessage.Get("VketRuleSetBase.PointLightConfigRule.Title"), UnityEngine.LightType.Point, ApprovedPointLightConfig),

                new LightConfigRule(LocalizedMessage.Get("VketRuleSetBase.SpotLightConfigRule.Title"), UnityEngine.LightType.Spot, ApprovedSpotLightConfig),

                new LightConfigRule(LocalizedMessage.Get("VketRuleSetBase.AreaLightConfigRule.Title"), UnityEngine.LightType.Area, ApprovedAreaLightConfig),

                new LightCountLimitRule(
                    LocalizedMessage.Get("VketRuleSetBase.AreaLightLimitRule.Title", AreaLightUsesLimit),
                    UnityEngine.LightType.Area,
                    AreaLightUsesLimit),

                new UseLightModeRule(LocalizedMessage.Get("VketRuleSetBase.PointLightModeRule.Title"), UnityEngine.LightType.Point, unusablePointLightModes),

                new UseLightModeRule(LocalizedMessage.Get("VketRuleSetBase.SpotLightModeRule.Title"), UnityEngine.LightType.Spot, unusableSpotLightModes),

                // new AnimationMakesMoveCollidersRule(LocalizedMessage.Get("VketRuleSetBase.AnimationMakesMoveCollidersRule.Title")),

                new AnimationClipRule(LocalizedMessage.Get("VketRuleSetBase.AnimationClipRule.Title")),

                new AnimationComponentRule(LocalizedMessage.Get("VketRuleSetBase.AnimationComponentRule.Title"), officialPrefabsDetector),

                new AnimatorComponentRule(LocalizedMessage.Get("VketRuleSetBase.AnimatorComponentRule.Title"),
                                          new System.Type[] {
                    typeof(VRC_Pickup),
                    // typeof(VRC_ObjectSync)
                }, officialPrefabsDetector),

                new CanvasRenderModeRule(LocalizedMessage.Get("VketRuleSetBase.CanvasRenderModeRule.Title")),

                new CameraComponentRule(LocalizedMessage.Get("VketRuleSetBase.CameraComponentRule.Title"), maxRenderTextureSize: new Vector2(1024, 1024)),

                new CameraComponentMaxCountRule(LocalizedMessage.Get("VketRuleSetBase.CameraComponentMaxCountRule.Title"), limit: 1),

                new ProjectorComponentRule(LocalizedMessage.Get("VketRuleSetBase.ProjectorComponentRule.Title")),

                new ProjectorComponentMaxCountRule(LocalizedMessage.Get("VketRuleSetBase.ProjectorComponentMaxCountRule.Title"), limit: 1),

                new PickupObjectSyncPrefabRule(LocalizedMessage.Get("VketRuleSetBase.PickupObjectSyncRule.Title"), VRCUdonSampleOfficialAssetData.PickupObjectSyncPrefabGUIDs),

                new AvatarPedestalPrefabRule(LocalizedMessage.Get("VketRuleSetBase.AvatarPedestalPrefabRule.Title"), VRCUdonSampleOfficialAssetData.AvatarPedestalPrefabGUIDs),

                new AudioSourcePrefabRule(LocalizedMessage.Get("VketRuleSetBase.AudioSourcePrefabRule.Title"), VRCUdonSampleOfficialAssetData.AudioSourcePrefabGUIDs),

                //// UdonCube では IsKinematic = False を許可する
                // new RigidbodyRule(LocalizedMessage.Get("VketRuleSetBase.RigidbodyRule.Title")),

                new PrefabLimitRule(
                    LocalizedMessage.Get("VketRuleSetBase.UnusabePrefabRule.Title", ChairPrefabUsesLimit),
                    VRCUdonSampleOfficialAssetData.VRCSDKPrefabGUIDs,
                    0),

                new PrefabLimitRule(
                    LocalizedMessage.Get("VketRuleSetBase.PickupObjectSyncPrefabLimitRule.Title", PickupObjectSyncUsesLimit),
                    VRCUdonSampleOfficialAssetData.PickupObjectSyncPrefabGUIDs,
                    PickupObjectSyncUsesLimit),

                //// IN SDK3 Video Player is suspended.
                // new VideoPlayerComponentRule(LocalizedMessage.Get("VketRuleSetBase.VideoPlayerComponentRule.Title")),

                //// IN SDK3 Video Player is suspended.
                // new VideoPlayerComponentMaxCountRule(LocalizedMessage.Get("VketRuleSetBase.VideoPlayerComponentMaxCountRule.Title"), limit: 1),

                new AnimatorComponentMaxCountRule(LocalizedMessage.Get("VketRuleSetBase.AnimatorComponentMaxCountRule.Title"), limit: 50),

                // Udon Behaviour
                // UdonBehaviourを含むオブジェクト、UdonBehaviourによって操作を行うオブジェクトは全て入稿ルール C.Scene内階層規定におけるDynamicオブジェクトの階層下に入れてください
                new UdonDynamicObjectParentRule(LocalizedMessage.Get("VketUdonRuleSetBase.UdonDynamicObjectParentRule.Title")),

                // 全てのUdonBehaviourオブジェクトの親であるDynamicオブジェクトは初期でInactive状態にしてください
                new UdonDynamicObjectInactiveRule(LocalizedMessage.Get("VketUdonRuleSetBase.UdonDynamicObjectInactiveRule.Title")),

                // UdonBehaviourを含むオブジェクトのLayerはUserLayer23としてください
                new UdonBehaviourLayerConstraintRule(LocalizedMessage.Get("VketUdonRuleSetBase.UdonBehaviourLayerConstraintRule.Title")),

                // UdonBehaviourは1ブースあたり 25 まで
                new AssetTypeLimitRule(
                    LocalizedMessage.Get("VketUdonRuleSetBase.UdonBehaviourLimitRule.Title", UdonBehaviourCountLimit),
                    typeof(UdonBehaviour),
                    UdonBehaviourCountLimit,
                    VRCUdonSampleOfficialAssetData.UdonBehaviourPrefabGUIDs),

                // SynchronizePositionが有効なUdonBehaviourは1ブースあたり 10 まで
                new UdonBehaviourSynchronizePositionCountLimitRule(
                    LocalizedMessage.Get("VketUdonRuleSetBase.UdonBehaviourSynchronizePositionCountLimitRule.Title", UdonBehaviourSynchronizePositionCountLimit),
                    UdonBehaviourSynchronizePositionCountLimit
                    ),

                // AllowOwnershipTransferOnCollisionは必ずFalseにすること
                new UdonBehaviourAllowOwnershipTransferOnCollisionIsFalseRule(LocalizedMessage.Get("UdonBehaviourAllowOwnershipTransferOnCollisionIsFalseRule.Title")),

                // VRCStation は1ブースあたり 8 まで
                new VRCStationCountLimitRule(LocalizedMessage.Get("VketUdonRuleSetBase.VRCStationCountLimitRule.Title", VRCStationCountLimit), VRCStationCountLimit),

                // VRCSpatialAudioSourceを含むオブジェクトは全てDynamicオブジェクトの階層下に入れてください
                new VRCSpatialAudioSourceDynamicObjectParentRule(LocalizedMessage.Get("VketUdonRuleSetBase.X07_SpatialAudioDynamicObjectParentRule.Title")),

                // VRCPickup は UdonBehaviour [AutoResetPickup] を持つ必要があります。
                new VRCPickupUdonBehaviourRule(LocalizedMessage.Get("VketUdonRuleSetBase.X08_VRCPickupUdonBehaviourRule.Title")),

                // UdonBehaviourによってオブジェクトをスペース外に移動させる行為は禁止
                // ⇒ スタッフによる目視確認

                // プレイヤーの設定(移動速度等)の変更はプレイヤーがスペース内にいる場合のみ許可されます
                // ⇒ スタッフによる目視確認

                // プレイヤーの位置変更(テレポート)は、プレイヤーがスペース内にいる状態 スペース内のどこかに移動させる
                // ⇒ スタッフによる目視確認

                // Udon Script
                // 使用禁止UdonAssembly
                new UsableUdonAssemblyListRule(LocalizedMessage.Get("VketUdonRuleSetBase.UsableUdonAssemblyListRule.Title"),
                                               GetUdonAssemblyReferences(),
                                               ignorePrefabGUIDs: VRCUdonSampleOfficialAssetData.GUIDs),

                // [UdonSynced]を付与した変数は1ブースあたり 3 まで
                // [UdonSynced]を付与した変数は下記の型のみ使用できます bool, sbyte, byte, ushort, short, uint, int, float
                new UdonBehaviourSyncedVariablesRule(LocalizedMessage.Get("VketUdonRuleSetBase.UdonBehaviourSyncedVariablesRule.Title"), UdonScriptSyncedVariablesLimit),

                // U#においては、全てのクラスは運営よりブース毎に指定するnamespaceに所属させてください
                new UdonSharpScriptNamespaceRule(LocalizedMessage.Get("VketUdonRuleSetBase.UdonSharpNameSpaceRule.Title"), "Vket.Circle"),

                // PhysicsクラスのCast関数 layerMaskを設定し、レイヤー23以外のコライダを無視するようにする, maxDistanceは最長で10メートルまで
                new UdonAssemblyPhysicsCastFunctionRule(LocalizedMessage.Get("VketUdonRuleSetBase.UdonAssemblyPhysicsCastFunctionRule.Title"), GetUdonAssemblyPhysicsCastFunctionReferences()),
            });
        }
コード例 #17
0
        private void LogicForLight(Light light)
        {
            if (approvedLightmapBakeTypes.Length <= 0)
            {
                AddIssue(new Issue(
                             light.gameObject,
                             IssueLevel.Error,
                             LocalizedMessage.Get("LightConfigRule.UnauthorizedLightType", light.type),
                             LocalizedMessage.Get("LightConfigRule.UnauthorizedLightType.Solution")));

                return;
            }

            if (!approvedLightmapBakeTypes.Contains(light.lightmapBakeType))
            {
                AddIssue(new Issue(
                             light.gameObject,
                             IssueLevel.Error,
                             LocalizedMessage.Get("LightConfigRule.UnauthorizedLightMode",
                                                  light.type, bakeTypeListString, light.lightmapBakeType),
                             LocalizedMessage.Get("LightConfigRule.UnauthorizedLightMode.Solution", bakeTypeListString)
                             ));
            }

            if (minRange != NO_LIMIT && maxRange != NO_LIMIT)
            {
                if (light.range < minRange || light.range > maxRange)
                {
                    AddIssue(new Issue(
                                 light.gameObject,
                                 IssueLevel.Error,
                                 LocalizedMessage.Get("LightConfigRule.OverRange",
                                                      light.type, minRange, maxRange, light.range),
                                 LocalizedMessage.Get("LightConfigRule.OverRange.Solution")
                                 ));
                }
            }

            if (minIntensity != NO_LIMIT && maxIntensity != NO_LIMIT)
            {
                if (light.intensity < minIntensity || light.intensity > maxIntensity)
                {
                    AddIssue(new Issue(
                                 light.gameObject,
                                 IssueLevel.Error,
                                 LocalizedMessage.Get("LightConfigRule.OverIntensity",
                                                      light.type, minIntensity, maxIntensity, light.intensity),
                                 LocalizedMessage.Get("LightConfigRule.OverIntensity.Solution")
                                 ));
                }
            }

            if (minBounceIntensity != NO_LIMIT && maxBounceIntensity != NO_LIMIT)
            {
                if (light.bounceIntensity < minBounceIntensity || light.bounceIntensity > maxBounceIntensity)
                {
                    AddIssue(new Issue(
                                 light.gameObject,
                                 IssueLevel.Error,
                                 LocalizedMessage.Get("LightConfigRule.OverIndirectMultiplier",
                                                      light.type, minBounceIntensity, maxBounceIntensity, light.bounceIntensity),
                                 LocalizedMessage.Get("LightConfigRule.OverIndirectMultiplier.Solution")
                                 ));
                }
            }
        }