public CountryValidator(String countryAbbrev) : base() { CountryAbbrev = countryAbbrev; LocalizedMessage = new LocalizedMessage("{0} must start with the '" + countryAbbrev + "', '{1}' is not valid "); }
public override string GetErrorMessage(ValidationContext validationContext) { return(LocalizedMessage.Format(validationContext.Property.DisplayName, validationContext.PropertyValue)); }
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)); } }
public static void OnLocalizedMessage(Entity entity, UOMessageEventArgs args) { LocalizedMessage.Raise(args, entity ?? _system); }
internal static void OnLocalizedMessage(Entity entity, UOMessageEventArgs args) { Task.Run(() => LocalizedMessage.Raise(args, entity ?? system)); }
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 }); }
public static void LogCodedWarning(int verbosity, LocalizedMessage message, ISourceLineInfo sourceInfo, params string [] args) => LogCodedWarning(verbosity, message, null, sourceInfo.SourceFile, sourceInfo.LineNumber, sourceInfo.LinePosition, args);
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); }
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); }
public static void LogCodedWarning(int verbosity, LocalizedMessage message, params string [] args) => LogCodedWarning(verbosity, message, null, null, -1, -1, args);
public static void LogCodedError(LocalizedMessage message, Exception innerException, params string [] args) => LogCodedError(message, innerException, null, -1, -1, args);
public static void LogCodedError(LocalizedMessage message, params string [] args) => LogCodedError(message, null, null, -1, -1, args);
public static string FormatCodedMessage(bool error, LocalizedMessage message, params object [] args) => Format(error, message.Code, null, -1, -1, message.Value, args);
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)); } } } } }
public CountryIsUsValidator() : base() { LocalizedMessage = new LocalizedMessage("{0} must start with the 'US', '{1}' is not valid "); }
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()), }); }
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") )); } } }