39 changed files with 1984 additions and 70 deletions
-
1221Assets/Scenes/SplitScreenTest.unity
-
7Assets/Scenes/SplitScreenTest.unity.meta
-
3Assets/Scripts/Data/QConstants.cs
-
8Assets/Scripts/Game/Entity.cs
-
41Assets/Scripts/Game/GameAssets.cs
-
51Assets/Scripts/Game/GameState.cs
-
9Assets/Scripts/Layers.cs
-
6Assets/Scripts/Modules/GameModule.Interop.cs
-
4Assets/Scripts/Modules/GameModule.cs
-
16Assets/Scripts/Modules/RenderModule.Interop.cs
-
9Assets/Scripts/Modules/RenderModule.cs
-
63Assets/Scripts/SplitScreenTest.cs
-
11Assets/Scripts/SplitScreenTest.cs.meta
-
62Assets/Scripts/Support/AliasModel.cs
-
11Assets/Scripts/UniQuake.Interop.cs
-
3Assets/Scripts/UniQuake.cs
-
52Assets/Scripts/VisualStyle.cs
-
8Assets/Shaders.meta
-
122Assets/Shaders/Quake.shader
-
10Assets/Shaders/Quake.shader.meta
-
157Assets/Shaders/QuakeForwardPass.hlsl
-
10Assets/Shaders/QuakeForwardPass.hlsl.meta
-
51Assets/Shaders/QuakeInput.hlsl
-
10Assets/Shaders/QuakeInput.hlsl.meta
-
4Assets/Styles/GLQuake/GLQuake.asset
-
13Assets/Styles/GLQuake/Materials/GLQuake_Entity.mat
-
13Assets/Styles/GLQuake/Materials/GLQuake_World.mat
-
26Assets/Styles/GLQuake/Software.asset
-
8Assets/Styles/GLQuake/Software.asset.meta
-
2ProjectSettings/GraphicsSettings.asset
-
2ProjectSettings/ProjectSettings.asset
-
12ProjectSettings/TagManager.asset
-
2engine/Quake/client.h
-
1engine/Quake/gl_texmgr.h
-
5engine/Quake/r_alias.c
-
4engine/Quake/r_brush.c
-
6engine/UniQuake/game_uniquake.c
-
6engine/UniQuake/gl_uniquake.c
-
5engine/UniQuake/vid_uniquake.c
1221
Assets/Scenes/SplitScreenTest.unity
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,7 @@ |
|||
fileFormatVersion: 2 |
|||
guid: 4ca6e7235b69a0d4dbe7cadc2b23fb6e |
|||
DefaultImporter: |
|||
externalObjects: {} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|||
@ -0,0 +1,63 @@ |
|||
using System; |
|||
using System.Collections; |
|||
using System.Collections.Generic; |
|||
using UnityEngine; |
|||
|
|||
public class SplitScreenTest : MonoBehaviour |
|||
{ |
|||
[SerializeField] |
|||
private GameInstance[] gameInstances = new GameInstance[4]; |
|||
|
|||
[SerializeField] |
|||
private List<VisualStyle> visualStyles = new List<VisualStyle>(); |
|||
|
|||
private void Start() |
|||
{ |
|||
Debug.Log($"Running in {IntPtr.Size * 8}-bit mode"); |
|||
|
|||
Layers gameLayer = Layers.Game1; |
|||
Layers viewLayer = Layers.ViewModel1; |
|||
int layerStride = Layers.Game2 - Layers.Game1; |
|||
|
|||
foreach (var gameInstance in gameInstances) |
|||
{ |
|||
if (gameInstance == null || gameInstance.mainCamera == null) |
|||
continue; |
|||
|
|||
var uq = gameObject.AddComponent<UniQuake>(); |
|||
uq.BaseGame = gameInstance.baseGame; |
|||
uq.ModDirectory = gameInstance.modPath; |
|||
uq.AdditionalArguments = ParseArgs(gameInstance.arguments); |
|||
uq.Camera = gameInstance.mainCamera; |
|||
uq.GameLayer = gameLayer; |
|||
uq.ViewModelLayer = viewLayer; |
|||
uq.LibraryOverride = gameInstance.libraryName; |
|||
uq.SetVisualStyle(visualStyles[0]); |
|||
|
|||
gameLayer += layerStride; |
|||
viewLayer += layerStride; |
|||
} |
|||
} |
|||
|
|||
private string[] ParseArgs(string args) |
|||
{ |
|||
if (args == null) |
|||
return new string[0]; |
|||
|
|||
return args.Split(new[] {' ', '\t', '\r', '\n'}, StringSplitOptions.RemoveEmptyEntries); |
|||
} |
|||
|
|||
[Serializable] |
|||
public class GameInstance |
|||
{ |
|||
public Camera mainCamera; |
|||
|
|||
public MissionPack baseGame; |
|||
|
|||
public string modPath; |
|||
|
|||
public string arguments; |
|||
|
|||
public string libraryName; |
|||
} |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
fileFormatVersion: 2 |
|||
guid: 47d8bb9d10da63c4d9b96cb96a94aca3 |
|||
MonoImporter: |
|||
externalObjects: {} |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|||
@ -0,0 +1,8 @@ |
|||
fileFormatVersion: 2 |
|||
guid: 96c36a1f940f3094689bb6a4848af311 |
|||
folderAsset: yes |
|||
DefaultImporter: |
|||
externalObjects: {} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|||
@ -0,0 +1,122 @@ |
|||
// Shader targeted for low end devices. Single Pass Forward Rendering. |
|||
Shader "UniQuake/Quake" |
|||
{ |
|||
Properties |
|||
{ |
|||
[MainTexture] _BaseMap("Base Map (RGB) Alpha (A)", 2D) = "white" {} |
|||
[MainColor] _BaseColor("Base Color", Color) = (1, 1, 1, 1) |
|||
|
|||
[NoScaleOffset] _LightMap("Lightmap (RGBA)", 2D) = "white" {} |
|||
|
|||
_Cutoff("Alpha Clipping", Range(0.0, 1.0)) = 0.666 |
|||
|
|||
[HDR] _EmissionColor("Emission Color", Color) = (0,0,0) |
|||
[NoScaleOffset]_EmissionMap("Emission Map", 2D) = "white" {} |
|||
|
|||
// Blending state |
|||
[HideInInspector] _Surface("__surface", Float) = 0.0 |
|||
[HideInInspector] _Blend("__blend", Float) = 0.0 |
|||
[HideInInspector] _AlphaClip("__clip", Float) = 0.0 |
|||
[HideInInspector] _SrcBlend("__src", Float) = 1.0 |
|||
[HideInInspector] _DstBlend("__dst", Float) = 0.0 |
|||
[HideInInspector] _ZWrite("__zw", Float) = 1.0 |
|||
[HideInInspector] _Cull("__cull", Float) = 2.0 |
|||
} |
|||
|
|||
SubShader |
|||
{ |
|||
Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" "UniversalMaterialType" = "SimpleLit" "IgnoreProjector" = "True" "ShaderModel"="4.5"} |
|||
LOD 300 |
|||
|
|||
Pass |
|||
{ |
|||
Name "ForwardLit" |
|||
Tags { "LightMode" = "UniversalForward" } |
|||
|
|||
// Use same blending / depth states as Standard shader |
|||
Blend[_SrcBlend][_DstBlend] |
|||
ZWrite[_ZWrite] |
|||
Cull[_Cull] |
|||
|
|||
HLSLPROGRAM |
|||
#pragma exclude_renderers gles gles3 glcore |
|||
#pragma target 4.5 |
|||
|
|||
// ------------------------------------- |
|||
// Material Keywords |
|||
#pragma multi_compile_local __ _ALPHATEST_ON |
|||
#pragma multi_compile_local __ _EMISSION |
|||
#pragma multi_compile_local __ _QLIGHTMAP_ON _AFFINE_ON // Lightmapping and affine texturing are mutually exclusive |
|||
|
|||
// ------------------------------------- |
|||
// Universal Pipeline keywords |
|||
#pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS |
|||
#pragma multi_compile _ _POINT_SAMPLING |
|||
|
|||
// ------------------------------------- |
|||
// Unity defined keywords |
|||
#pragma multi_compile_fog |
|||
|
|||
#pragma vertex LitPassVertexSimple |
|||
#pragma fragment LitPassFragmentSimple |
|||
#define BUMP_SCALE_NOT_SUPPORTED 1 |
|||
|
|||
#include "QuakeInput.hlsl" |
|||
#include "QuakeForwardPass.hlsl" |
|||
ENDHLSL |
|||
} |
|||
|
|||
Pass |
|||
{ |
|||
Name "DepthOnly" |
|||
Tags{"LightMode" = "DepthOnly"} |
|||
|
|||
ZWrite On |
|||
ColorMask 0 |
|||
Cull[_Cull] |
|||
|
|||
HLSLPROGRAM |
|||
#pragma exclude_renderers gles gles3 glcore |
|||
#pragma target 4.5 |
|||
|
|||
#pragma vertex DepthOnlyVertex |
|||
#pragma fragment DepthOnlyFragment |
|||
|
|||
// ------------------------------------- |
|||
// Material Keywords |
|||
#pragma multi_compile_local __ _ALPHATEST_ON |
|||
|
|||
#include "QuakeInput.hlsl" |
|||
#include "Packages/com.unity.render-pipelines.universal/Shaders/DepthOnlyPass.hlsl" |
|||
ENDHLSL |
|||
} |
|||
|
|||
// This pass is used when drawing to a _CameraNormalsTexture texture |
|||
Pass |
|||
{ |
|||
Name "DepthNormals" |
|||
Tags{"LightMode" = "DepthNormals"} |
|||
|
|||
ZWrite On |
|||
Cull[_Cull] |
|||
|
|||
HLSLPROGRAM |
|||
#pragma exclude_renderers gles gles3 glcore |
|||
#pragma target 4.5 |
|||
|
|||
#pragma vertex DepthNormalsVertex |
|||
#pragma fragment DepthNormalsFragment |
|||
|
|||
// ------------------------------------- |
|||
// Material Keywords |
|||
#pragma multi_compile_local __ _ALPHATEST_ON |
|||
|
|||
#include "QuakeInput.hlsl" |
|||
#include "Packages/com.unity.render-pipelines.universal/Shaders/DepthNormalsPass.hlsl" |
|||
ENDHLSL |
|||
} |
|||
} |
|||
|
|||
Fallback "Hidden/Universal Render Pipeline/FallbackError" |
|||
//CustomEditor "UnityEditor.Rendering.Universal.ShaderGUI.SimpleLitShader" |
|||
} |
|||
@ -0,0 +1,10 @@ |
|||
fileFormatVersion: 2 |
|||
guid: eb7abeca30cd4fb4cb8be05eca69f850 |
|||
ShaderImporter: |
|||
externalObjects: {} |
|||
defaultTextures: [] |
|||
nonModifiableTextures: [] |
|||
preprocessorOverride: 0 |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|||
@ -0,0 +1,157 @@ |
|||
#ifndef UNIVERSAL_SIMPLE_LIT_PASS_INCLUDED |
|||
#define UNIVERSAL_SIMPLE_LIT_PASS_INCLUDED |
|||
|
|||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" |
|||
|
|||
struct Attributes |
|||
{ |
|||
float4 positionOS : POSITION; |
|||
float3 normalOS : NORMAL; |
|||
float4 tangentOS : TANGENT; |
|||
float2 texcoord : TEXCOORD0; |
|||
#ifdef _QLIGHTMAP_ON |
|||
float2 lightmapUV : TEXCOORD1; |
|||
#endif |
|||
UNITY_VERTEX_INPUT_INSTANCE_ID |
|||
}; |
|||
|
|||
struct Varyings |
|||
{ |
|||
#ifdef _AFFINE_ON |
|||
noperspective |
|||
#endif |
|||
float2 uv : TEXCOORD0; |
|||
|
|||
#ifdef _QLIGHTMAP_ON |
|||
float2 lightmapUV : TEXCOORD1; |
|||
#else |
|||
half3 vertexSH : TEXCOORD1; |
|||
#endif |
|||
|
|||
float3 posWS : TEXCOORD2; // xyz: posWS |
|||
|
|||
float3 normal : TEXCOORD3; |
|||
float3 viewDir : TEXCOORD4; |
|||
|
|||
half4 fogFactorAndVertexLight : TEXCOORD6; // x: fogFactor, yzw: vertex light |
|||
|
|||
float4 positionCS : SV_POSITION; |
|||
UNITY_VERTEX_INPUT_INSTANCE_ID |
|||
UNITY_VERTEX_OUTPUT_STEREO |
|||
}; |
|||
|
|||
void InitializeInputData(Varyings input, out InputData inputData) |
|||
{ |
|||
inputData.positionWS = input.posWS; |
|||
|
|||
half3 viewDirWS = input.viewDir; |
|||
inputData.normalWS = input.normal; |
|||
|
|||
inputData.normalWS = NormalizeNormalPerPixel(inputData.normalWS); |
|||
viewDirWS = SafeNormalize(viewDirWS); |
|||
|
|||
inputData.viewDirectionWS = viewDirWS; |
|||
|
|||
inputData.shadowCoord = float4(0, 0, 0, 0); |
|||
|
|||
inputData.fogCoord = input.fogFactorAndVertexLight.x; |
|||
inputData.vertexLighting = input.fogFactorAndVertexLight.yzw; |
|||
#ifdef _QLIGHTMAP_ON |
|||
inputData.bakedGI = 0.0; |
|||
#else |
|||
inputData.bakedGI = SampleSHPixel(input.vertexSH, inputData.normalWS); |
|||
#endif |
|||
inputData.normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(input.positionCS); |
|||
inputData.shadowMask = 0.0; |
|||
} |
|||
|
|||
/////////////////////////////////////////////////////////////////////////////// |
|||
// Vertex and Fragment functions // |
|||
/////////////////////////////////////////////////////////////////////////////// |
|||
|
|||
// Used in Standard (Simple Lighting) shader |
|||
Varyings LitPassVertexSimple(Attributes input) |
|||
{ |
|||
Varyings output = (Varyings)0; |
|||
|
|||
UNITY_SETUP_INSTANCE_ID(input); |
|||
UNITY_TRANSFER_INSTANCE_ID(input, output); |
|||
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); |
|||
|
|||
VertexPositionInputs vertexInput = GetVertexPositionInputs(input.positionOS.xyz); |
|||
VertexNormalInputs normalInput = GetVertexNormalInputs(input.normalOS, input.tangentOS); |
|||
half3 viewDirWS = GetWorldSpaceViewDir(vertexInput.positionWS); |
|||
half3 vertexLight = VertexLighting(vertexInput.positionWS, normalInput.normalWS); |
|||
half fogFactor = ComputeFogFactor(vertexInput.positionCS.z); |
|||
|
|||
output.uv = TRANSFORM_TEX(input.texcoord, _BaseMap); |
|||
output.posWS.xyz = vertexInput.positionWS; |
|||
output.positionCS = vertexInput.positionCS; |
|||
|
|||
output.normal = NormalizeNormalPerVertex(normalInput.normalWS); |
|||
output.viewDir = viewDirWS; |
|||
|
|||
#ifdef _QLIGHTMAP_ON |
|||
output.lightmapUV.xy = input.lightmapUV.xy; |
|||
#else |
|||
output.vertexSH.xyz = SampleSHVertex(output.normal.xyz); |
|||
#endif |
|||
|
|||
output.fogFactorAndVertexLight = half4(fogFactor, vertexLight); |
|||
|
|||
return output; |
|||
} |
|||
|
|||
// Used for StandardSimpleLighting shader |
|||
half4 LitPassFragmentSimple(Varyings input) : SV_Target |
|||
{ |
|||
UNITY_SETUP_INSTANCE_ID(input); |
|||
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); |
|||
|
|||
float2 uv = input.uv.xy; |
|||
half4 diffuseAlpha = SampleAlbedoAlpha(uv, |
|||
#if _POINT_SAMPLING |
|||
TEXTURE2D_ARGS(_BaseMap, point_repeat_sampler) |
|||
#else |
|||
TEXTURE2D_ARGS(_BaseMap, sampler_BaseMap) |
|||
#endif |
|||
); |
|||
|
|||
half3 diffuse = diffuseAlpha.rgb * _BaseColor.rgb; |
|||
|
|||
half alpha = diffuseAlpha.a * _BaseColor.a; |
|||
AlphaDiscard(alpha, _Cutoff); |
|||
|
|||
InputData inputData; |
|||
InitializeInputData(input, inputData); |
|||
|
|||
#ifdef _QLIGHTMAP_ON |
|||
half4 lightmapColor = SAMPLE_TEXTURE2D(_LightMap, sampler_LightMap, input.lightmapUV); |
|||
half3 finalColor = diffuse * lightmapColor.rgb * 2.0f; |
|||
#else |
|||
// Specular and smoothness are some bogus values just to make models not appear completely black on one side |
|||
half3 finalColor = UniversalFragmentBlinnPhong(inputData, diffuse, half4(0.2, 0.2, 0.2, 1), 0.5, 0.0, alpha).rgb; |
|||
// Light light = GetMainLight(); |
|||
// half3 diffuseColor = LightingLambert(light.color, light.direction, inputData.normalWS); |
|||
// half3 finalColor = diffuse * diffuseColor; |
|||
#endif |
|||
|
|||
#ifdef _EMISSION |
|||
finalColor += SampleEmission(uv, _EmissionColor.rgb, |
|||
#if _POINT_SAMPLING |
|||
TEXTURE2D_ARGS(_EmissionMap, point_repeat_sampler) |
|||
#else |
|||
TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap) |
|||
#endif |
|||
); |
|||
#endif |
|||
|
|||
half4 color = half4(finalColor, alpha); |
|||
|
|||
color.rgb = MixFog(color.rgb, inputData.fogCoord); |
|||
color.a = OutputAlpha(color.a, _Surface); |
|||
|
|||
return color; |
|||
} |
|||
|
|||
#endif |
|||
@ -0,0 +1,10 @@ |
|||
fileFormatVersion: 2 |
|||
guid: 6aa574d369884d24e8f28b300a86fcb3 |
|||
ShaderImporter: |
|||
externalObjects: {} |
|||
defaultTextures: [] |
|||
nonModifiableTextures: [] |
|||
preprocessorOverride: 0 |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|||
@ -0,0 +1,51 @@ |
|||
#ifndef UNIVERSAL_SIMPLE_LIT_INPUT_INCLUDED |
|||
#define UNIVERSAL_SIMPLE_LIT_INPUT_INCLUDED |
|||
|
|||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" |
|||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SurfaceInput.hlsl" |
|||
|
|||
CBUFFER_START(UnityPerMaterial) |
|||
float4 _BaseMap_ST; |
|||
float4 _LightMap_ST; |
|||
half4 _BaseColor; |
|||
half4 _EmissionColor; |
|||
half _Cutoff; |
|||
half _Surface; |
|||
CBUFFER_END |
|||
|
|||
#ifdef UNITY_DOTS_INSTANCING_ENABLED |
|||
UNITY_DOTS_INSTANCING_START(MaterialPropertyMetadata) |
|||
UNITY_DOTS_INSTANCED_PROP(float4, _BaseColor) |
|||
UNITY_DOTS_INSTANCED_PROP(float4, _EmissionColor) |
|||
UNITY_DOTS_INSTANCED_PROP(float , _Cutoff) |
|||
UNITY_DOTS_INSTANCED_PROP(float , _Surface) |
|||
UNITY_DOTS_INSTANCING_END(MaterialPropertyMetadata) |
|||
|
|||
#define _BaseColor UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO(float4 , Metadata__BaseColor) |
|||
#define _EmissionColor UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO(float4 , Metadata__EmissionColor) |
|||
#define _Cutoff UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO(float , Metadata__Cutoff) |
|||
#define _Surface UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO(float , Metadata__Surface) |
|||
#endif |
|||
|
|||
SAMPLER(point_repeat_sampler); |
|||
TEXTURE2D(_LightMap); SAMPLER(sampler_LightMap); |
|||
|
|||
inline void InitializeSimpleLitSurfaceData(float2 uv, out SurfaceData outSurfaceData) |
|||
{ |
|||
outSurfaceData = (SurfaceData)0; |
|||
|
|||
half4 albedoAlpha = SampleAlbedoAlpha(uv, TEXTURE2D_ARGS(_BaseMap, sampler_BaseMap)); |
|||
outSurfaceData.alpha = albedoAlpha.a * _BaseColor.a; |
|||
AlphaDiscard(outSurfaceData.alpha, _Cutoff); |
|||
|
|||
outSurfaceData.albedo = albedoAlpha.rgb * _BaseColor.rgb; |
|||
|
|||
outSurfaceData.metallic = 0.0; // unused |
|||
outSurfaceData.specular = 0.0; // unused |
|||
outSurfaceData.smoothness = 0.0; // unused |
|||
//outSurfaceData.normalTS = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap)); |
|||
outSurfaceData.occlusion = 1.0; // unused |
|||
outSurfaceData.emission = SampleEmission(uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap)); |
|||
} |
|||
|
|||
#endif |
|||
@ -0,0 +1,10 @@ |
|||
fileFormatVersion: 2 |
|||
guid: 209b8f66e5d711946ba4c4ccb9e0a9b4 |
|||
ShaderImporter: |
|||
externalObjects: {} |
|||
defaultTextures: [] |
|||
nonModifiableTextures: [] |
|||
preprocessorOverride: 0 |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|||
@ -0,0 +1,26 @@ |
|||
%YAML 1.1 |
|||
%TAG !u! tag:unity3d.com,2011: |
|||
--- !u!114 &11400000 |
|||
MonoBehaviour: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 0} |
|||
m_Enabled: 1 |
|||
m_EditorHideFlags: 0 |
|||
m_Script: {fileID: 11500000, guid: 2df0cbad06a6ed5489201e395f9c5bb3, type: 3} |
|||
m_Name: Software |
|||
m_EditorClassIdentifier: |
|||
entityMaterial: {fileID: 2100000, guid: 4d7703ac1adf3534f89b4041b779ff5e, type: 2} |
|||
worldMaterial: {fileID: 2100000, guid: fcbaf32c00bea2344bbb1419c61364b6, type: 2} |
|||
liquidMaterial: {fileID: 2100000, guid: cd59502a1689c0847a1963c60e347987, type: 2} |
|||
pointSampling: 1 |
|||
affineTexturing: 1 |
|||
liquidProperties: |
|||
waterAlpha: 1 |
|||
slimeAlpha: 1 |
|||
lavaAlpha: 1 |
|||
teleAlpha: 1 |
|||
particles: |
|||
explosion: {fileID: 0} |
|||
@ -0,0 +1,8 @@ |
|||
fileFormatVersion: 2 |
|||
guid: 9f4246ec8cb97bd4d98b1f583ac1d2cd |
|||
NativeFormatImporter: |
|||
externalObjects: {} |
|||
mainObjectFileID: 11400000 |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue