siyao
4 年前
当前提交
94ea9073
共有 23 个文件被更改,包括 1356 次插入 和 550 次删除
-
2com.unity.uiwidgets/Runtime/ui/geometry.cs
-
12com.unity.uiwidgets/Runtime/ui2/painting.cs
-
14com.unity.uiwidgets/Runtime/ui2/text.cs
-
8engine/Build.bee.cs
-
16engine/src/lib/ui/txt/paragraph_builder.cc
-
1engine/src/lib/ui/txt/paragraph_builder.h
-
2engine/src/lib/ui/window/window.h
-
6engine/src/runtime/runtime_controller.cc
-
3engine/src/runtime/runtime_controller.h
-
9engine/src/runtime/runtime_delegate.h
-
12engine/src/shell/common/engine.cc
-
8engine/src/shell/common/engine.h
-
17engine/src/shell/common/shell.cc
-
124Samples/UIWidgetsSamples_2019_4/Assets/Behavior1.cs
-
641Samples/UIWidgetsSamples_2019_4/Assets/TextTest.unity
-
137engine/src/lib/ui/txt/asset_manager_font_provider.cc
-
90engine/src/lib/ui/txt/asset_manager_font_provider.h
-
137engine/src/lib/ui/txt/font_collection.cc
-
38engine/src/lib/ui/txt/font_collection.h
-
116engine/src/lib/ui/txt/icu_util.cc
-
15engine/src/lib/ui/txt/icu_util.h
-
88Samples/UIWidgetsSamples_2019_4/Assets/testPlugin.cs
-
410Samples/UIWidgetsSamples_2019_4/Assets/test.unity
|
|||
using System; |
|||
using System.Collections; |
|||
using System.Collections.Generic; |
|||
using System.IO; |
|||
using UIWidgetsSample; |
|||
using Unity.UIWidgets.engine2; |
|||
using Unity.UIWidgets.external; |
|||
using Unity.UIWidgets.ui; |
|||
using Unity.UIWidgets.ui2; |
|||
using UnityEngine; |
|||
using Canvas = Unity.UIWidgets.ui2.Canvas; |
|||
using Color = Unity.UIWidgets.ui2.Color; |
|||
using Paint = Unity.UIWidgets.ui2.Paint; |
|||
using ParagraphBuilder = Unity.UIWidgets.ui2.ParagraphBuilder; |
|||
using ParagraphConstraints = Unity.UIWidgets.ui2.ParagraphConstraints; |
|||
using ParagraphStyle = Unity.UIWidgets.ui2.ParagraphStyle; |
|||
using Picture = Unity.UIWidgets.ui2.Picture; |
|||
using PictureRecorder = Unity.UIWidgets.ui2.PictureRecorder; |
|||
using Rect = Unity.UIWidgets.ui.Rect; |
|||
using SceneBuilder = Unity.UIWidgets.ui2.SceneBuilder; |
|||
using TextDecoration = Unity.UIWidgets.ui2.TextDecoration; |
|||
using TextDecorationStyle = Unity.UIWidgets.ui2.TextDecorationStyle; |
|||
using Window = Unity.UIWidgets.ui2.Window; |
|||
|
|||
class Behavior1 : UIWidgetsPanel |
|||
{ |
|||
|
|||
|
|||
void beginFrame(TimeSpan timeStamp) { |
|||
// The timeStamp argument to beginFrame indicates the timing information we
|
|||
// should use to clock our animations. It's important to use timeStamp rather
|
|||
// than reading the system time because we want all the parts of the system to
|
|||
// coordinate the timings of their animations. If each component read the
|
|||
// system clock independently, the animations that we processed later would be
|
|||
// slightly ahead of the animations we processed earlier.
|
|||
|
|||
// PAINT
|
|||
|
|||
Rect paintBounds = Offset.zero & (Window.instance.physicalSize / Window.instance.devicePixelRatio); |
|||
PictureRecorder recorder = new PictureRecorder(); |
|||
Canvas canvas = new Canvas(recorder, paintBounds); |
|||
canvas.translate(paintBounds.width / 2.0f, paintBounds.height / 2.0f); |
|||
|
|||
// Here we determine the rotation according to the timeStamp given to us by
|
|||
// the engine.
|
|||
float t = (float) timeStamp.TotalMilliseconds / 1800.0f; |
|||
canvas.rotate(Mathf.PI * (t % 2.0f)); |
|||
|
|||
var paint = new Paint(); |
|||
paint.color = Color.fromARGB(100, 100, 100, 0); |
|||
canvas.drawRect(Rect.fromLTRB(0, 0, 100.0f, 100.0f), paint); |
|||
Draw(canvas); |
|||
|
|||
Picture picture = recorder.endRecording(); |
|||
|
|||
// COMPOSITE
|
|||
|
|||
float devicePixelRatio = Window.instance.devicePixelRatio; |
|||
var deviceTransform = new float[16]; |
|||
deviceTransform[0] = devicePixelRatio; |
|||
deviceTransform[5] = devicePixelRatio; |
|||
deviceTransform[10] = 1.0f; |
|||
deviceTransform[15] = 1.0f; |
|||
SceneBuilder sceneBuilder = new SceneBuilder(); |
|||
|
|||
sceneBuilder.pushTransform(deviceTransform); |
|||
sceneBuilder.addPicture(Offset.zero, picture); |
|||
sceneBuilder.pop(); |
|||
Window.instance.render(sceneBuilder.build()); |
|||
|
|||
// After rendering the current frame of the animation, we ask the engine to
|
|||
// schedule another frame. The engine will call beginFrame again when its time
|
|||
// to produce the next frame.
|
|||
Window.instance.scheduleFrame(); |
|||
} |
|||
|
|||
void Draw(Canvas canvas) |
|||
{ |
|||
var style = new ParagraphStyle(fontFamily: "Arial", height: 4); |
|||
|
|||
var pb = new ParagraphBuilder(style); |
|||
var ts = new TextStyle( |
|||
color: new Color(0xFFFF00F0), |
|||
decoration: TextDecoration.lineThrough, |
|||
decorationStyle: TextDecorationStyle.doubleLine, |
|||
fontFamily: "Arial", |
|||
fontSize:30, |
|||
height:1.5 |
|||
); |
|||
pb.pushStyle(ts); |
|||
pb.addText("just for test\n 中文测试 分段测试 分段测试 分段测试 分段测试 分段测试 分段测试 分段测试\n1234"); |
|||
var ts2 = new TextStyle( |
|||
decoration: TextDecoration.underline, |
|||
decorationStyle: TextDecorationStyle.dashed, |
|||
fontFamily: "Arial", |
|||
fontSize:40, |
|||
height:1.5, |
|||
background: new Paint() |
|||
{ |
|||
color = new Color(0xAAFF7F00), |
|||
|
|||
} |
|||
, |
|||
foreground:new Paint() |
|||
{ |
|||
color = new Color(0xAAFFFF00) |
|||
} |
|||
); |
|||
pb.pushStyle(ts2); |
|||
pb.addText("test push one more style"); |
|||
pb.pop(); |
|||
pb.addText("test pop style"); |
|||
var p = pb.build(); |
|||
p.layout(new ParagraphConstraints(300)); |
|||
canvas.drawParagraph(p, new Offset(-100, -100)); |
|||
} |
|||
|
|||
protected override void main() |
|||
{ |
|||
|
|||
Window.instance.onBeginFrame = beginFrame; |
|||
Window.instance.scheduleFrame(); |
|||
} |
|||
} |
|
|||
%YAML 1.1 |
|||
%TAG !u! tag:unity3d.com,2011: |
|||
--- !u!29 &1 |
|||
OcclusionCullingSettings: |
|||
m_ObjectHideFlags: 0 |
|||
serializedVersion: 2 |
|||
m_OcclusionBakeSettings: |
|||
smallestOccluder: 5 |
|||
smallestHole: 0.25 |
|||
backfaceThreshold: 100 |
|||
m_SceneGUID: 00000000000000000000000000000000 |
|||
m_OcclusionCullingData: {fileID: 0} |
|||
--- !u!104 &2 |
|||
RenderSettings: |
|||
m_ObjectHideFlags: 0 |
|||
serializedVersion: 9 |
|||
m_Fog: 0 |
|||
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} |
|||
m_FogMode: 3 |
|||
m_FogDensity: 0.01 |
|||
m_LinearFogStart: 0 |
|||
m_LinearFogEnd: 300 |
|||
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} |
|||
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} |
|||
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} |
|||
m_AmbientIntensity: 1 |
|||
m_AmbientMode: 0 |
|||
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} |
|||
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} |
|||
m_HaloStrength: 0.5 |
|||
m_FlareStrength: 1 |
|||
m_FlareFadeSpeed: 3 |
|||
m_HaloTexture: {fileID: 0} |
|||
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} |
|||
m_DefaultReflectionMode: 0 |
|||
m_DefaultReflectionResolution: 128 |
|||
m_ReflectionBounces: 1 |
|||
m_ReflectionIntensity: 1 |
|||
m_CustomReflection: {fileID: 0} |
|||
m_Sun: {fileID: 0} |
|||
m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} |
|||
m_UseRadianceAmbientProbe: 0 |
|||
--- !u!157 &3 |
|||
LightmapSettings: |
|||
m_ObjectHideFlags: 0 |
|||
serializedVersion: 11 |
|||
m_GIWorkflowMode: 1 |
|||
m_GISettings: |
|||
serializedVersion: 2 |
|||
m_BounceScale: 1 |
|||
m_IndirectOutputScale: 1 |
|||
m_AlbedoBoost: 1 |
|||
m_EnvironmentLightingMode: 0 |
|||
m_EnableBakedLightmaps: 1 |
|||
m_EnableRealtimeLightmaps: 0 |
|||
m_LightmapEditorSettings: |
|||
serializedVersion: 12 |
|||
m_Resolution: 2 |
|||
m_BakeResolution: 40 |
|||
m_AtlasSize: 1024 |
|||
m_AO: 0 |
|||
m_AOMaxDistance: 1 |
|||
m_CompAOExponent: 1 |
|||
m_CompAOExponentDirect: 0 |
|||
m_ExtractAmbientOcclusion: 0 |
|||
m_Padding: 2 |
|||
m_LightmapParameters: {fileID: 0} |
|||
m_LightmapsBakeMode: 1 |
|||
m_TextureCompression: 1 |
|||
m_FinalGather: 0 |
|||
m_FinalGatherFiltering: 1 |
|||
m_FinalGatherRayCount: 256 |
|||
m_ReflectionCompression: 2 |
|||
m_MixedBakeMode: 2 |
|||
m_BakeBackend: 1 |
|||
m_PVRSampling: 1 |
|||
m_PVRDirectSampleCount: 32 |
|||
m_PVRSampleCount: 512 |
|||
m_PVRBounces: 2 |
|||
m_PVREnvironmentSampleCount: 256 |
|||
m_PVREnvironmentReferencePointCount: 2048 |
|||
m_PVRFilteringMode: 1 |
|||
m_PVRDenoiserTypeDirect: 1 |
|||
m_PVRDenoiserTypeIndirect: 1 |
|||
m_PVRDenoiserTypeAO: 1 |
|||
m_PVRFilterTypeDirect: 0 |
|||
m_PVRFilterTypeIndirect: 0 |
|||
m_PVRFilterTypeAO: 0 |
|||
m_PVREnvironmentMIS: 1 |
|||
m_PVRCulling: 1 |
|||
m_PVRFilteringGaussRadiusDirect: 1 |
|||
m_PVRFilteringGaussRadiusIndirect: 5 |
|||
m_PVRFilteringGaussRadiusAO: 2 |
|||
m_PVRFilteringAtrousPositionSigmaDirect: 0.5 |
|||
m_PVRFilteringAtrousPositionSigmaIndirect: 2 |
|||
m_PVRFilteringAtrousPositionSigmaAO: 1 |
|||
m_ExportTrainingData: 0 |
|||
m_TrainingDataDestination: TrainingData |
|||
m_LightProbeSampleCountMultiplier: 4 |
|||
m_LightingDataAsset: {fileID: 0} |
|||
m_UseShadowmask: 1 |
|||
--- !u!196 &4 |
|||
NavMeshSettings: |
|||
serializedVersion: 2 |
|||
m_ObjectHideFlags: 0 |
|||
m_BuildSettings: |
|||
serializedVersion: 2 |
|||
agentTypeID: 0 |
|||
agentRadius: 0.5 |
|||
agentHeight: 2 |
|||
agentSlope: 45 |
|||
agentClimb: 0.4 |
|||
ledgeDropHeight: 0 |
|||
maxJumpAcrossDistance: 0 |
|||
minRegionArea: 2 |
|||
manualCellSize: 0 |
|||
cellSize: 0.16666667 |
|||
manualTileSize: 0 |
|||
tileSize: 256 |
|||
accuratePlacement: 0 |
|||
debug: |
|||
m_Flags: 0 |
|||
m_NavMeshData: {fileID: 0} |
|||
--- !u!1 &764046566 |
|||
GameObject: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
serializedVersion: 6 |
|||
m_Component: |
|||
- component: {fileID: 764046568} |
|||
- component: {fileID: 764046567} |
|||
m_Layer: 0 |
|||
m_Name: Directional Light |
|||
m_TagString: Untagged |
|||
m_Icon: {fileID: 0} |
|||
m_NavMeshLayer: 0 |
|||
m_StaticEditorFlags: 0 |
|||
m_IsActive: 1 |
|||
--- !u!108 &764046567 |
|||
Light: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 764046566} |
|||
m_Enabled: 1 |
|||
serializedVersion: 10 |
|||
m_Type: 1 |
|||
m_Shape: 0 |
|||
m_Color: {r: 1, g: 1, b: 1, a: 1} |
|||
m_Intensity: 1 |
|||
m_Range: 10 |
|||
m_SpotAngle: 30 |
|||
m_InnerSpotAngle: 21.80208 |
|||
m_CookieSize: 10 |
|||
m_Shadows: |
|||
m_Type: 2 |
|||
m_Resolution: -1 |
|||
m_CustomResolution: -1 |
|||
m_Strength: 1 |
|||
m_Bias: 0.05 |
|||
m_NormalBias: 0.4 |
|||
m_NearPlane: 0.2 |
|||
m_CullingMatrixOverride: |
|||
e00: 1 |
|||
e01: 0 |
|||
e02: 0 |
|||
e03: 0 |
|||
e10: 0 |
|||
e11: 1 |
|||
e12: 0 |
|||
e13: 0 |
|||
e20: 0 |
|||
e21: 0 |
|||
e22: 1 |
|||
e23: 0 |
|||
e30: 0 |
|||
e31: 0 |
|||
e32: 0 |
|||
e33: 1 |
|||
m_UseCullingMatrixOverride: 0 |
|||
m_Cookie: {fileID: 0} |
|||
m_DrawHalo: 0 |
|||
m_Flare: {fileID: 0} |
|||
m_RenderMode: 0 |
|||
m_CullingMask: |
|||
serializedVersion: 2 |
|||
m_Bits: 4294967295 |
|||
m_RenderingLayerMask: 1 |
|||
m_Lightmapping: 4 |
|||
m_LightShadowCasterMode: 0 |
|||
m_AreaSize: {x: 1, y: 1} |
|||
m_BounceIntensity: 1 |
|||
m_ColorTemperature: 6570 |
|||
m_UseColorTemperature: 0 |
|||
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} |
|||
m_UseBoundingSphereOverride: 0 |
|||
m_ShadowRadius: 0 |
|||
m_ShadowAngle: 0 |
|||
--- !u!4 &764046568 |
|||
Transform: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 764046566} |
|||
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} |
|||
m_LocalPosition: {x: 0, y: 3, z: 0} |
|||
m_LocalScale: {x: 1, y: 1, z: 1} |
|||
m_Children: [] |
|||
m_Father: {fileID: 0} |
|||
m_RootOrder: 1 |
|||
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} |
|||
--- !u!1 &847097468 |
|||
GameObject: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
serializedVersion: 6 |
|||
m_Component: |
|||
- component: {fileID: 847097469} |
|||
- component: {fileID: 847097471} |
|||
- component: {fileID: 847097470} |
|||
m_Layer: 5 |
|||
m_Name: RawImage |
|||
m_TagString: Untagged |
|||
m_Icon: {fileID: 0} |
|||
m_NavMeshLayer: 0 |
|||
m_StaticEditorFlags: 0 |
|||
m_IsActive: 1 |
|||
--- !u!224 &847097469 |
|||
RectTransform: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 847097468} |
|||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |
|||
m_LocalPosition: {x: 0, y: 0, z: 0} |
|||
m_LocalScale: {x: 1, y: 1, z: 1} |
|||
m_Children: [] |
|||
m_Father: {fileID: 2122288190} |
|||
m_RootOrder: 0 |
|||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
|||
m_AnchorMin: {x: 0.5, y: 0.5} |
|||
m_AnchorMax: {x: 0.5, y: 0.5} |
|||
m_AnchoredPosition: {x: -1.3, y: 0.8} |
|||
m_SizeDelta: {x: 483, y: 399} |
|||
m_Pivot: {x: 0.5, y: 0.5} |
|||
--- !u!114 &847097470 |
|||
MonoBehaviour: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 847097468} |
|||
m_Enabled: 1 |
|||
m_EditorHideFlags: 0 |
|||
m_Script: {fileID: 11500000, guid: d51be63934ecb58489023ddfb123b3ad, type: 3} |
|||
m_Name: |
|||
m_EditorClassIdentifier: |
|||
m_Material: {fileID: 0} |
|||
m_Color: {r: 1, g: 1, b: 1, a: 1} |
|||
m_RaycastTarget: 1 |
|||
m_Maskable: 1 |
|||
m_OnCullStateChanged: |
|||
m_PersistentCalls: |
|||
m_Calls: [] |
|||
m_Texture: {fileID: 0} |
|||
m_UVRect: |
|||
serializedVersion: 2 |
|||
x: 0 |
|||
y: 0 |
|||
width: 1 |
|||
height: 1 |
|||
--- !u!222 &847097471 |
|||
CanvasRenderer: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 847097468} |
|||
m_CullTransparentMesh: 0 |
|||
--- !u!1 &1140493537 |
|||
GameObject: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
serializedVersion: 6 |
|||
m_Component: |
|||
- component: {fileID: 1140493542} |
|||
- component: {fileID: 1140493541} |
|||
- component: {fileID: 1140493540} |
|||
- component: {fileID: 1140493539} |
|||
- component: {fileID: 1140493538} |
|||
m_Layer: 0 |
|||
m_Name: Plane |
|||
m_TagString: Untagged |
|||
m_Icon: {fileID: 0} |
|||
m_NavMeshLayer: 0 |
|||
m_StaticEditorFlags: 0 |
|||
m_IsActive: 0 |
|||
--- !u!114 &1140493538 |
|||
MonoBehaviour: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1140493537} |
|||
m_Enabled: 0 |
|||
m_EditorHideFlags: 0 |
|||
m_Script: {fileID: 11500000, guid: ff655c85f67513d4d9e0967df8685a48, type: 3} |
|||
m_Name: |
|||
m_EditorClassIdentifier: |
|||
--- !u!64 &1140493539 |
|||
MeshCollider: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1140493537} |
|||
m_Material: {fileID: 0} |
|||
m_IsTrigger: 0 |
|||
m_Enabled: 1 |
|||
serializedVersion: 4 |
|||
m_Convex: 0 |
|||
m_CookingOptions: 30 |
|||
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} |
|||
--- !u!23 &1140493540 |
|||
MeshRenderer: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1140493537} |
|||
m_Enabled: 1 |
|||
m_CastShadows: 1 |
|||
m_ReceiveShadows: 1 |
|||
m_DynamicOccludee: 1 |
|||
m_MotionVectors: 1 |
|||
m_LightProbeUsage: 1 |
|||
m_ReflectionProbeUsage: 1 |
|||
m_RayTracingMode: 2 |
|||
m_RenderingLayerMask: 1 |
|||
m_RendererPriority: 0 |
|||
m_Materials: |
|||
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} |
|||
m_StaticBatchInfo: |
|||
firstSubMesh: 0 |
|||
subMeshCount: 0 |
|||
m_StaticBatchRoot: {fileID: 0} |
|||
m_ProbeAnchor: {fileID: 0} |
|||
m_LightProbeVolumeOverride: {fileID: 0} |
|||
m_ScaleInLightmap: 1 |
|||
m_ReceiveGI: 1 |
|||
m_PreserveUVs: 0 |
|||
m_IgnoreNormalsForChartDetection: 0 |
|||
m_ImportantGI: 0 |
|||
m_StitchLightmapSeams: 1 |
|||
m_SelectedEditorRenderState: 3 |
|||
m_MinimumChartSize: 4 |
|||
m_AutoUVMaxDistance: 0.5 |
|||
m_AutoUVMaxAngle: 89 |
|||
m_LightmapParameters: {fileID: 0} |
|||
m_SortingLayerID: 0 |
|||
m_SortingLayer: 0 |
|||
m_SortingOrder: 0 |
|||
--- !u!33 &1140493541 |
|||
MeshFilter: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1140493537} |
|||
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} |
|||
--- !u!4 &1140493542 |
|||
Transform: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1140493537} |
|||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |
|||
m_LocalPosition: {x: 0, y: 0, z: 0} |
|||
m_LocalScale: {x: 1, y: 1, z: 1} |
|||
m_Children: [] |
|||
m_Father: {fileID: 0} |
|||
m_RootOrder: 2 |
|||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
|||
--- !u!1 &1548023132 |
|||
GameObject: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
serializedVersion: 6 |
|||
m_Component: |
|||
- component: {fileID: 1548023135} |
|||
- component: {fileID: 1548023134} |
|||
- component: {fileID: 1548023133} |
|||
m_Layer: 0 |
|||
m_Name: Main Camera |
|||
m_TagString: MainCamera |
|||
m_Icon: {fileID: 0} |
|||
m_NavMeshLayer: 0 |
|||
m_StaticEditorFlags: 0 |
|||
m_IsActive: 1 |
|||
--- !u!81 &1548023133 |
|||
AudioListener: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1548023132} |
|||
m_Enabled: 1 |
|||
--- !u!20 &1548023134 |
|||
Camera: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1548023132} |
|||
m_Enabled: 1 |
|||
serializedVersion: 2 |
|||
m_ClearFlags: 1 |
|||
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} |
|||
m_projectionMatrixMode: 1 |
|||
m_GateFitMode: 2 |
|||
m_FOVAxisMode: 0 |
|||
m_SensorSize: {x: 36, y: 24} |
|||
m_LensShift: {x: 0, y: 0} |
|||
m_FocalLength: 50 |
|||
m_NormalizedViewPortRect: |
|||
serializedVersion: 2 |
|||
x: 0 |
|||
y: 0 |
|||
width: 1 |
|||
height: 1 |
|||
near clip plane: 0.3 |
|||
far clip plane: 1000 |
|||
field of view: 60 |
|||
orthographic: 1 |
|||
orthographic size: 5.6 |
|||
m_Depth: -1 |
|||
m_CullingMask: |
|||
serializedVersion: 2 |
|||
m_Bits: 4294967295 |
|||
m_RenderingPath: -1 |
|||
m_TargetTexture: {fileID: 0} |
|||
m_TargetDisplay: 0 |
|||
m_TargetEye: 3 |
|||
m_HDR: 1 |
|||
m_AllowMSAA: 1 |
|||
m_AllowDynamicResolution: 0 |
|||
m_ForceIntoRT: 0 |
|||
m_OcclusionCulling: 1 |
|||
m_StereoConvergence: 10 |
|||
m_StereoSeparation: 0.022 |
|||
--- !u!4 &1548023135 |
|||
Transform: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1548023132} |
|||
m_LocalRotation: {x: 0, y: 0.7071068, z: -0.7071068, w: 0} |
|||
m_LocalPosition: {x: 0, y: 1, z: 0.32} |
|||
m_LocalScale: {x: 1, y: 1, z: 1} |
|||
m_Children: [] |
|||
m_Father: {fileID: 0} |
|||
m_RootOrder: 0 |
|||
m_LocalEulerAnglesHint: {x: 90, y: 180, z: 0} |
|||
--- !u!1 &1900497009 |
|||
GameObject: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
serializedVersion: 6 |
|||
m_Component: |
|||
- component: {fileID: 1900497012} |
|||
- component: {fileID: 1900497011} |
|||
- component: {fileID: 1900497010} |
|||
m_Layer: 0 |
|||
m_Name: EventSystem |
|||
m_TagString: Untagged |
|||
m_Icon: {fileID: 0} |
|||
m_NavMeshLayer: 0 |
|||
m_StaticEditorFlags: 0 |
|||
m_IsActive: 1 |
|||
--- !u!114 &1900497010 |
|||
MonoBehaviour: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1900497009} |
|||
m_Enabled: 1 |
|||
m_EditorHideFlags: 0 |
|||
m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} |
|||
m_Name: |
|||
m_EditorClassIdentifier: |
|||
m_HorizontalAxis: Horizontal |
|||
m_VerticalAxis: Vertical |
|||
m_SubmitButton: Submit |
|||
m_CancelButton: Cancel |
|||
m_InputActionsPerSecond: 10 |
|||
m_RepeatDelay: 0.5 |
|||
m_ForceModuleActive: 0 |
|||
--- !u!114 &1900497011 |
|||
MonoBehaviour: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1900497009} |
|||
m_Enabled: 1 |
|||
m_EditorHideFlags: 0 |
|||
m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} |
|||
m_Name: |
|||
m_EditorClassIdentifier: |
|||
m_FirstSelected: {fileID: 0} |
|||
m_sendNavigationEvents: 1 |
|||
m_DragThreshold: 10 |
|||
--- !u!4 &1900497012 |
|||
Transform: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1900497009} |
|||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |
|||
m_LocalPosition: {x: 0, y: 0, z: 0} |
|||
m_LocalScale: {x: 1, y: 1, z: 1} |
|||
m_Children: [] |
|||
m_Father: {fileID: 0} |
|||
m_RootOrder: 4 |
|||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
|||
--- !u!1 &2122288186 |
|||
GameObject: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
serializedVersion: 6 |
|||
m_Component: |
|||
- component: {fileID: 2122288190} |
|||
- component: {fileID: 2122288189} |
|||
- component: {fileID: 2122288188} |
|||
- component: {fileID: 2122288187} |
|||
m_Layer: 5 |
|||
m_Name: Canvas |
|||
m_TagString: Untagged |
|||
m_Icon: {fileID: 0} |
|||
m_NavMeshLayer: 0 |
|||
m_StaticEditorFlags: 0 |
|||
m_IsActive: 1 |
|||
--- !u!114 &2122288187 |
|||
MonoBehaviour: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 2122288186} |
|||
m_Enabled: 1 |
|||
m_EditorHideFlags: 0 |
|||
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} |
|||
m_Name: |
|||
m_EditorClassIdentifier: |
|||
m_IgnoreReversedGraphics: 1 |
|||
m_BlockingObjects: 0 |
|||
m_BlockingMask: |
|||
serializedVersion: 2 |
|||
m_Bits: 4294967295 |
|||
--- !u!114 &2122288188 |
|||
MonoBehaviour: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 2122288186} |
|||
m_Enabled: 1 |
|||
m_EditorHideFlags: 0 |
|||
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} |
|||
m_Name: |
|||
m_EditorClassIdentifier: |
|||
m_UiScaleMode: 0 |
|||
m_ReferencePixelsPerUnit: 100 |
|||
m_ScaleFactor: 1 |
|||
m_ReferenceResolution: {x: 800, y: 600} |
|||
m_ScreenMatchMode: 0 |
|||
m_MatchWidthOrHeight: 0 |
|||
m_PhysicalUnit: 3 |
|||
m_FallbackScreenDPI: 96 |
|||
m_DefaultSpriteDPI: 96 |
|||
m_DynamicPixelsPerUnit: 1 |
|||
--- !u!223 &2122288189 |
|||
Canvas: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 2122288186} |
|||
m_Enabled: 1 |
|||
serializedVersion: 3 |
|||
m_RenderMode: 0 |
|||
m_Camera: {fileID: 0} |
|||
m_PlaneDistance: 100 |
|||
m_PixelPerfect: 0 |
|||
m_ReceivesEvents: 1 |
|||
m_OverrideSorting: 0 |
|||
m_OverridePixelPerfect: 0 |
|||
m_SortingBucketNormalizedSize: 0 |
|||
m_AdditionalShaderChannelsFlag: 0 |
|||
m_SortingLayerID: 0 |
|||
m_SortingOrder: 0 |
|||
m_TargetDisplay: 0 |
|||
--- !u!224 &2122288190 |
|||
RectTransform: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 2122288186} |
|||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |
|||
m_LocalPosition: {x: 0, y: 0, z: 0} |
|||
m_LocalScale: {x: 0, y: 0, z: 0} |
|||
m_Children: |
|||
- {fileID: 847097469} |
|||
m_Father: {fileID: 0} |
|||
m_RootOrder: 3 |
|||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
|||
m_AnchorMin: {x: 0, y: 0} |
|||
m_AnchorMax: {x: 0, y: 0} |
|||
m_AnchoredPosition: {x: 0, y: 0} |
|||
m_SizeDelta: {x: 0, y: 0} |
|||
m_Pivot: {x: 0, y: 0} |
|
|||
// Copyright 2013 The Flutter Authors. All rights reserved.
|
|||
// Use of this source code is governed by a BSD-style license that can be
|
|||
// found in the LICENSE file.
|
|||
|
|||
#include "lib/ui/txt/asset_manager_font_provider.h"
|
|||
|
|||
#include "flutter/fml/logging.h"
|
|||
#include "third_party/skia/include/core/SkData.h"
|
|||
#include "third_party/skia/include/core/SkStream.h"
|
|||
#include "third_party/skia/include/core/SkString.h"
|
|||
#include "third_party/skia/include/core/SkTypeface.h"
|
|||
|
|||
namespace uiwidgets { |
|||
|
|||
namespace { |
|||
|
|||
void MappingReleaseProc(const void* ptr, void* context) { |
|||
delete reinterpret_cast<fml::Mapping*>(context); |
|||
} |
|||
|
|||
} // anonymous namespace
|
|||
|
|||
AssetManagerFontProvider::AssetManagerFontProvider( |
|||
std::shared_ptr<AssetManager> asset_manager) |
|||
: asset_manager_(asset_manager) {} |
|||
|
|||
AssetManagerFontProvider::~AssetManagerFontProvider() = default; |
|||
|
|||
// |FontAssetProvider|
|
|||
size_t AssetManagerFontProvider::GetFamilyCount() const { |
|||
return family_names_.size(); |
|||
} |
|||
|
|||
// |FontAssetProvider|
|
|||
std::string AssetManagerFontProvider::GetFamilyName(int index) const { |
|||
FML_DCHECK(index >= 0 && static_cast<size_t>(index) < family_names_.size()); |
|||
return family_names_[index]; |
|||
} |
|||
|
|||
// |FontAssetProvider|
|
|||
SkFontStyleSet* AssetManagerFontProvider::MatchFamily( |
|||
const std::string& family_name) { |
|||
auto found = registered_families_.find(CanonicalFamilyName(family_name)); |
|||
if (found == registered_families_.end()) { |
|||
return nullptr; |
|||
} |
|||
sk_sp<SkFontStyleSet> font_style_set = found->second; |
|||
return font_style_set.release(); |
|||
} |
|||
|
|||
void AssetManagerFontProvider::RegisterAsset(std::string family_name, |
|||
std::string asset) { |
|||
std::string canonical_name = CanonicalFamilyName(family_name); |
|||
auto family_it = registered_families_.find(canonical_name); |
|||
|
|||
if (family_it == registered_families_.end()) { |
|||
family_names_.push_back(family_name); |
|||
auto value = std::make_pair( |
|||
canonical_name, |
|||
sk_make_sp<AssetManagerFontStyleSet>(asset_manager_, family_name)); |
|||
family_it = registered_families_.emplace(value).first; |
|||
} |
|||
|
|||
family_it->second->registerAsset(asset); |
|||
} |
|||
|
|||
AssetManagerFontStyleSet::AssetManagerFontStyleSet( |
|||
std::shared_ptr<AssetManager> asset_manager, |
|||
std::string family_name) |
|||
: asset_manager_(asset_manager), family_name_(family_name) {} |
|||
|
|||
AssetManagerFontStyleSet::~AssetManagerFontStyleSet() = default; |
|||
|
|||
void AssetManagerFontStyleSet::registerAsset(std::string asset) { |
|||
assets_.emplace_back(asset); |
|||
} |
|||
|
|||
int AssetManagerFontStyleSet::count() { |
|||
return assets_.size(); |
|||
} |
|||
|
|||
void AssetManagerFontStyleSet::getStyle(int index, |
|||
SkFontStyle* style, |
|||
SkString* name) { |
|||
FML_DCHECK(index < static_cast<int>(assets_.size())); |
|||
if (style) { |
|||
sk_sp<SkTypeface> typeface(createTypeface(index)); |
|||
if (typeface) { |
|||
*style = typeface->fontStyle(); |
|||
} |
|||
} |
|||
if (name) { |
|||
*name = family_name_.c_str(); |
|||
} |
|||
} |
|||
|
|||
SkTypeface* AssetManagerFontStyleSet::createTypeface(int i) { |
|||
size_t index = i; |
|||
if (index >= assets_.size()) |
|||
return nullptr; |
|||
|
|||
TypefaceAsset& asset = assets_[index]; |
|||
if (!asset.typeface) { |
|||
std::unique_ptr<fml::Mapping> asset_mapping = |
|||
asset_manager_->GetAsMapping(asset.asset); |
|||
if (asset_mapping == nullptr) { |
|||
return nullptr; |
|||
} |
|||
|
|||
fml::Mapping* asset_mapping_ptr = asset_mapping.release(); |
|||
sk_sp<SkData> asset_data = SkData::MakeWithProc( |
|||
asset_mapping_ptr->GetMapping(), asset_mapping_ptr->GetSize(), |
|||
MappingReleaseProc, asset_mapping_ptr); |
|||
std::unique_ptr<SkMemoryStream> stream = SkMemoryStream::Make(asset_data); |
|||
|
|||
// Ownership of the stream is transferred.
|
|||
asset.typeface = SkTypeface::MakeFromStream(std::move(stream)); |
|||
if (!asset.typeface) |
|||
return nullptr; |
|||
} |
|||
|
|||
return SkRef(asset.typeface.get()); |
|||
} |
|||
|
|||
SkTypeface* AssetManagerFontStyleSet::matchStyle(const SkFontStyle& pattern) { |
|||
return matchStyleCSS3(pattern); |
|||
} |
|||
|
|||
AssetManagerFontStyleSet::TypefaceAsset::TypefaceAsset(std::string a) |
|||
: asset(std::move(a)) {} |
|||
|
|||
AssetManagerFontStyleSet::TypefaceAsset::TypefaceAsset( |
|||
const AssetManagerFontStyleSet::TypefaceAsset& other) = default; |
|||
|
|||
AssetManagerFontStyleSet::TypefaceAsset::~TypefaceAsset() = default; |
|||
|
|||
} // namespace flutter
|
|
|||
#pragma once |
|||
// Copyright 2013 The Flutter Authors. All rights reserved. |
|||
// Use of this source code is governed by a BSD-style license that can be |
|||
// found in the LICENSE file. |
|||
|
|||
#ifndef FLUTTER_LIB_UI_TEXT_ASSET_MANAGER_FONT_PROVIDER_H_ |
|||
#define FLUTTER_LIB_UI_TEXT_ASSET_MANAGER_FONT_PROVIDER_H_ |
|||
|
|||
#include <memory> |
|||
#include <string> |
|||
#include <unordered_map> |
|||
#include <vector> |
|||
|
|||
#include "assets/asset_manager.h" |
|||
#include "flutter/fml/macros.h" |
|||
#include "third_party/skia/include/core/SkFontMgr.h" |
|||
#include "third_party/skia/include/core/SkTypeface.h" |
|||
#include "txt/font_asset_provider.h" |
|||
|
|||
namespace uiwidgets { |
|||
|
|||
class AssetManagerFontStyleSet : public SkFontStyleSet { |
|||
public: |
|||
AssetManagerFontStyleSet(std::shared_ptr<AssetManager> asset_manager, |
|||
std::string family_name); |
|||
|
|||
~AssetManagerFontStyleSet() override; |
|||
|
|||
void registerAsset(std::string asset); |
|||
|
|||
// |SkFontStyleSet| |
|||
int count() override; |
|||
|
|||
// |SkFontStyleSet| |
|||
void getStyle(int index, SkFontStyle*, SkString* style) override; |
|||
|
|||
// |SkFontStyleSet| |
|||
SkTypeface* createTypeface(int index) override; |
|||
|
|||
// |SkFontStyleSet| |
|||
SkTypeface* matchStyle(const SkFontStyle& pattern) override; |
|||
|
|||
private: |
|||
std::shared_ptr<AssetManager> asset_manager_; |
|||
std::string family_name_; |
|||
|
|||
struct TypefaceAsset { |
|||
TypefaceAsset(std::string a); |
|||
|
|||
TypefaceAsset(const TypefaceAsset& other); |
|||
|
|||
~TypefaceAsset(); |
|||
|
|||
std::string asset; |
|||
sk_sp<SkTypeface> typeface; |
|||
}; |
|||
std::vector<TypefaceAsset> assets_; |
|||
|
|||
FML_DISALLOW_COPY_AND_ASSIGN(AssetManagerFontStyleSet); |
|||
}; |
|||
|
|||
class AssetManagerFontProvider : public txt::FontAssetProvider { |
|||
public: |
|||
AssetManagerFontProvider(std::shared_ptr<AssetManager> asset_manager); |
|||
|
|||
~AssetManagerFontProvider() override; |
|||
|
|||
void RegisterAsset(std::string family_name, std::string asset); |
|||
|
|||
// |FontAssetProvider| |
|||
size_t GetFamilyCount() const override; |
|||
|
|||
// |FontAssetProvider| |
|||
std::string GetFamilyName(int index) const override; |
|||
|
|||
// |FontAssetProvider| |
|||
SkFontStyleSet* MatchFamily(const std::string& family_name) override; |
|||
|
|||
private: |
|||
std::shared_ptr<AssetManager> asset_manager_; |
|||
std::unordered_map<std::string, sk_sp<AssetManagerFontStyleSet>> |
|||
registered_families_; |
|||
std::vector<std::string> family_names_; |
|||
|
|||
FML_DISALLOW_COPY_AND_ASSIGN(AssetManagerFontProvider); |
|||
}; |
|||
|
|||
} // namespace flutter |
|||
|
|||
#endif // FLUTTER_LIB_UI_TEXT_ASSET_MANAGER_FONT_PROVIDER_H_ |
|
|||
#include "lib/ui/txt/font_collection.h"
|
|||
|
|||
#include <mutex>
|
|||
|
|||
#include "lib/ui/txt/asset_manager_font_provider.h"
|
|||
#include "lib/ui/window/window.h"
|
|||
#include "rapidjson/document.h"
|
|||
#include "rapidjson/rapidjson.h"
|
|||
#include "third_party/skia/include/core/SkFontMgr.h"
|
|||
#include "third_party/skia/include/core/SkGraphics.h"
|
|||
#include "third_party/skia/include/core/SkStream.h"
|
|||
#include "third_party/skia/include/core/SkTypeface.h"
|
|||
#include "txt/asset_font_manager.h"
|
|||
#include "txt/test_font_manager.h"
|
|||
|
|||
namespace uiwidgets { |
|||
|
|||
namespace { |
|||
|
|||
/* void LoadFontFromList(tonic::Uint8List& font_data,
|
|||
Dart_Handle callback, |
|||
std::string family_name) { |
|||
FontCollection& font_collection = |
|||
UIDartState::Current()->window()->client()->GetFontCollection(); |
|||
font_collection.LoadFontFromList(font_data.data(), font_data.num_elements(), |
|||
family_name); |
|||
font_data.Release(); |
|||
tonic::DartInvoke(callback, { tonic::ToDart(0) }); |
|||
}*/ |
|||
|
|||
//void _LoadFontFromList(Dart_NativeArguments args) {
|
|||
// UIDartState::ThrowIfUIOperationsProhibited();
|
|||
// tonic::DartCallStatic(LoadFontFromList, args);
|
|||
//}
|
|||
|
|||
} // namespace
|
|||
|
|||
FontCollection::FontCollection() |
|||
: collection_(std::make_shared<txt::FontCollection>()) { |
|||
dynamic_font_manager_ = sk_make_sp<txt::DynamicFontManager>(); |
|||
collection_->SetDynamicFontManager(dynamic_font_manager_); |
|||
} |
|||
|
|||
FontCollection::~FontCollection() { |
|||
collection_.reset(); |
|||
SkGraphics::PurgeFontCache(); |
|||
} |
|||
|
|||
|
|||
std::shared_ptr<txt::FontCollection> FontCollection::GetFontCollection() const { |
|||
return collection_; |
|||
} |
|||
|
|||
void FontCollection::SetupDefaultFontManager() { |
|||
collection_->SetupDefaultFontManager(); |
|||
} |
|||
|
|||
void FontCollection::RegisterFonts( |
|||
std::shared_ptr<AssetManager> asset_manager) { |
|||
std::unique_ptr<fml::Mapping> manifest_mapping = |
|||
asset_manager->GetAsMapping("FontManifest.json"); |
|||
if (manifest_mapping == nullptr) { |
|||
FML_DLOG(WARNING) << "Could not find the font manifest in the asset store."; |
|||
return; |
|||
} |
|||
|
|||
rapidjson::Document document; |
|||
static_assert(sizeof(decltype(document)::Ch) == sizeof(uint8_t), ""); |
|||
document.Parse(reinterpret_cast<const decltype(document)::Ch*>( |
|||
manifest_mapping->GetMapping()), |
|||
manifest_mapping->GetSize()); |
|||
|
|||
if (document.HasParseError()) { |
|||
FML_DLOG(WARNING) << "Error parsing the font manifest in the asset store."; |
|||
return; |
|||
} |
|||
|
|||
// Structure described in https://flutter.io/custom-fonts/
|
|||
|
|||
if (!document.IsArray()) { |
|||
return; |
|||
} |
|||
|
|||
auto font_provider = |
|||
std::make_unique<AssetManagerFontProvider>(asset_manager); |
|||
|
|||
for (const auto& family : document.GetArray()) { |
|||
auto family_name = family.FindMember("family"); |
|||
if (family_name == family.MemberEnd() || !family_name->value.IsString()) { |
|||
continue; |
|||
} |
|||
|
|||
auto family_fonts = family.FindMember("fonts"); |
|||
if (family_fonts == family.MemberEnd() || !family_fonts->value.IsArray()) { |
|||
continue; |
|||
} |
|||
|
|||
for (const auto& family_font : family_fonts->value.GetArray()) { |
|||
if (!family_font.IsObject()) { |
|||
continue; |
|||
} |
|||
|
|||
auto font_asset = family_font.FindMember("asset"); |
|||
if (font_asset == family_font.MemberEnd() || |
|||
!font_asset->value.IsString()) { |
|||
continue; |
|||
} |
|||
|
|||
// TODO: Handle weights and styles.
|
|||
font_provider->RegisterAsset(family_name->value.GetString(), |
|||
font_asset->value.GetString()); |
|||
} |
|||
} |
|||
|
|||
collection_->SetAssetFontManager( |
|||
sk_make_sp<txt::AssetFontManager>(std::move(font_provider))); |
|||
} |
|||
|
|||
void FontCollection::LoadFontFromList(const uint8_t* font_data, |
|||
int length, |
|||
std::string family_name) { |
|||
std::unique_ptr<SkStreamAsset> font_stream = |
|||
std::make_unique<SkMemoryStream>(font_data, length, true); |
|||
sk_sp<SkTypeface> typeface = |
|||
SkTypeface::MakeFromStream(std::move(font_stream)); |
|||
txt::TypefaceFontAssetProvider& font_provider = |
|||
dynamic_font_manager_->font_provider(); |
|||
if (family_name.empty()) { |
|||
font_provider.RegisterTypeface(typeface); |
|||
} |
|||
else { |
|||
font_provider.RegisterTypeface(typeface, family_name); |
|||
} |
|||
collection_->ClearFontFamilyCache(); |
|||
} |
|||
|
|||
} // namespace flutter
|
|
|||
#pragma once |
|||
|
|||
#include <memory> |
|||
#include <vector> |
|||
|
|||
#include "assets/asset_manager.h" |
|||
#include "flutter/fml/macros.h" |
|||
#include "flutter/fml/memory/ref_ptr.h" |
|||
#include "txt/font_collection.h" |
|||
|
|||
namespace uiwidgets { |
|||
|
|||
class FontCollection { |
|||
public: |
|||
FontCollection(); |
|||
|
|||
~FontCollection(); |
|||
|
|||
//static void RegisterNatives(tonic::DartLibraryNatives* natives); |
|||
|
|||
std::shared_ptr<txt::FontCollection> GetFontCollection() const; |
|||
|
|||
void SetupDefaultFontManager(); |
|||
|
|||
void RegisterFonts(std::shared_ptr<AssetManager> asset_manager); |
|||
|
|||
void LoadFontFromList(const uint8_t* font_data, |
|||
int length, |
|||
std::string family_name); |
|||
|
|||
private: |
|||
std::shared_ptr<txt::FontCollection> collection_; |
|||
sk_sp<txt::DynamicFontManager> dynamic_font_manager_; |
|||
|
|||
FML_DISALLOW_COPY_AND_ASSIGN(FontCollection); |
|||
}; |
|||
|
|||
} // namespace flutter |
|
|||
#pragma once
|
|||
|
|||
#include "icu_util.h"
|
|||
|
|||
#include <memory>
|
|||
#include <mutex>
|
|||
|
|||
#include "flutter/fml/build_config.h"
|
|||
#include "flutter/fml/logging.h"
|
|||
#include "flutter/fml/mapping.h"
|
|||
#include "flutter/fml/native_library.h"
|
|||
#include "flutter/fml/paths.h"
|
|||
#include "unicode/udata.h"
|
|||
namespace fml { |
|||
namespace icu2 { |
|||
|
|||
class ICUContext { |
|||
public: |
|||
ICUContext(const std::string& icu_data_path) : valid_(false) { |
|||
valid_ = SetupMapping(icu_data_path) && SetupICU(); |
|||
} |
|||
|
|||
ICUContext(std::unique_ptr<Mapping> mapping) : mapping_(std::move(mapping)) { |
|||
valid_ = SetupICU(); |
|||
} |
|||
|
|||
~ICUContext() = default; |
|||
|
|||
bool SetupMapping(const std::string& icu_data_path) { |
|||
auto fd = |
|||
fml::OpenFile(icu_data_path.c_str(), false, fml::FilePermission::kRead); |
|||
|
|||
if (!fd.is_valid()) { |
|||
auto directory = fml::paths::GetExecutableDirectoryPath(); |
|||
|
|||
if (!directory.first) { |
|||
return false; |
|||
} |
|||
|
|||
std::string path_relative_to_executable = |
|||
paths::JoinPaths({ directory.second, icu_data_path }); |
|||
|
|||
fd = fml::OpenFile(path_relative_to_executable.c_str(), false, |
|||
fml::FilePermission::kRead); |
|||
} |
|||
|
|||
if (!fd.is_valid()) { |
|||
return false; |
|||
} |
|||
|
|||
std::initializer_list<FileMapping::Protection> protection = { |
|||
fml::FileMapping::Protection::kRead }; |
|||
|
|||
auto file_mapping = |
|||
std::make_unique<FileMapping>(fd, std::move(protection)); |
|||
|
|||
if (file_mapping->GetSize() != 0) { |
|||
mapping_ = std::move(file_mapping); |
|||
return true; |
|||
} |
|||
|
|||
return false; |
|||
} |
|||
|
|||
bool SetupICU() { |
|||
if (GetSize() == 0) { |
|||
return false; |
|||
} |
|||
|
|||
UErrorCode err_code = U_ZERO_ERROR; |
|||
udata_setCommonData(GetMapping(), &err_code); |
|||
return (err_code == U_ZERO_ERROR); |
|||
//return true;
|
|||
} |
|||
|
|||
const uint8_t* GetMapping() const { |
|||
return mapping_ ? mapping_->GetMapping() : nullptr; |
|||
} |
|||
|
|||
size_t GetSize() const { return mapping_ ? mapping_->GetSize() : 0; } |
|||
|
|||
bool IsValid() const { return valid_; } |
|||
|
|||
private: |
|||
bool valid_; |
|||
std::unique_ptr<Mapping> mapping_; |
|||
|
|||
FML_DISALLOW_COPY_AND_ASSIGN(ICUContext); |
|||
}; |
|||
|
|||
void InitializeICUOnce(const std::string& icu_data_path) { |
|||
static ICUContext* context = new ICUContext(icu_data_path); |
|||
FML_CHECK(context->IsValid()) |
|||
<< "Must be able to initialize the ICU context. Tried: " << icu_data_path; |
|||
} |
|||
|
|||
std::once_flag g_icu_init_flag; |
|||
void InitializeICU(const std::string& icu_data_path) { |
|||
std::call_once(g_icu_init_flag, |
|||
[&icu_data_path]() { InitializeICUOnce(icu_data_path); }); |
|||
} |
|||
|
|||
void InitializeICUFromMappingOnce(std::unique_ptr<Mapping> mapping) { |
|||
static ICUContext* context = new ICUContext(std::move(mapping)); |
|||
FML_CHECK(context->IsValid()) |
|||
<< "Unable to initialize the ICU context from a mapping."; |
|||
} |
|||
|
|||
void InitializeICUFromMapping(std::unique_ptr<Mapping> mapping) { |
|||
std::call_once(g_icu_init_flag, [mapping = std::move(mapping)]() mutable { |
|||
InitializeICUFromMappingOnce(std::move(mapping)); |
|||
}); |
|||
} |
|||
|
|||
} |
|||
} |
|
|||
#pragma once |
|||
#include <string> |
|||
|
|||
#include "flutter/fml/macros.h" |
|||
#include "flutter/fml/mapping.h" |
|||
|
|||
namespace fml { |
|||
namespace icu2 { |
|||
|
|||
void InitializeICU(const std::string& icu_data_path = ""); |
|||
|
|||
void InitializeICUFromMapping(std::unique_ptr<Mapping> mapping); |
|||
|
|||
} |
|||
} |
|
|||
using System; |
|||
using System.Collections; |
|||
using System.Collections.Generic; |
|||
using System.Runtime.InteropServices; |
|||
using UnityEngine; |
|||
using Unity.UIWidgets.ui2; |
|||
using UnityEditor.Graphs; |
|||
using Color = Unity.UIWidgets.ui2.Color; |
|||
|
|||
public class testPlugin : MonoBehaviour |
|||
{ |
|||
[DllImport("libUIWidgets_d")] |
|||
static extern IntPtr CreateTexture(int w, int h); |
|||
|
|||
[DllImport("libUIWidgets_d")] |
|||
static extern void DrawParagraph(IntPtr paragraph); |
|||
|
|||
void testParagraph() |
|||
{ |
|||
var renderer = GetComponent<Renderer>(); |
|||
var c = CreateTexture(1024, 1024); |
|||
renderer.material.mainTexture = |
|||
Texture2D.CreateExternalTexture(1024, 1024, TextureFormat.RGBA32, true, true, c); |
|||
var style = new ParagraphStyle(fontFamily: "Arial", height: 4); |
|||
|
|||
var pb = new ParagraphBuilder(style); |
|||
var ts = new TextStyle( |
|||
color: new Color(0xFFFF00F0), |
|||
decoration: TextDecoration.lineThrough, |
|||
decorationStyle: TextDecorationStyle.doubleLine, |
|||
fontFamily: "Arial", |
|||
fontSize:30, |
|||
height:1.5 |
|||
); |
|||
pb.pushStyle(ts); |
|||
pb.addText("just for test\n 中文测试 分段测试长长长长长长长长长长长长长长长长长长长长长长长长66666666"); |
|||
var ts2 = new TextStyle( |
|||
color: new Color(0xFF00FF00), |
|||
decoration: TextDecoration.underline, |
|||
decorationStyle: TextDecorationStyle.dashed, |
|||
fontFamily: "Arial", |
|||
fontSize:40, |
|||
height:1.5, |
|||
background: new Paint() |
|||
{ |
|||
color = new Color(0xAAFF7F00), |
|||
|
|||
} |
|||
, |
|||
foreground:new Paint() |
|||
{ |
|||
color = new Color(0xAAFFFF00) |
|||
} |
|||
); |
|||
pb.pushStyle(ts2); |
|||
pb.addText("test push one more style"); |
|||
pb.pop(); |
|||
pb.addText("test pop style"); |
|||
var p = pb.build(); |
|||
p.layout(new ParagraphConstraints(600)); |
|||
Debug.Log($"paragraph width: {p.width()}"); |
|||
Debug.Log($"paragraph height: {p.height()}"); |
|||
Debug.Log($"paragraph longestLine: {p.longestLine()}"); |
|||
Debug.Log($"paragraph minIntrinsicWidth: {p.minIntrinsicWidth()}"); |
|||
Debug.Log($"paragraph maxIntrinsicWidth: {p.maxIntrinsicWidth()}"); |
|||
Debug.Log($"paragraph alphabeticBaseline: {p.alphabeticBaseline()}"); |
|||
Debug.Log($"paragraph ideographicBaseline: {p.ideographicBaseline()}"); |
|||
Debug.Log($"paragraph didExceedMaxLines: {p.didExceedMaxLines()}"); |
|||
var boxes = p.getBoxesForRange(0, 20); |
|||
foreach (var box in boxes) |
|||
{ |
|||
Debug.Log(box.ToString()); |
|||
} |
|||
DrawParagraph(p.ptr); |
|||
} |
|||
|
|||
// Start is called before the first frame update
|
|||
void Start() |
|||
{ |
|||
testParagraph(); |
|||
} |
|||
|
|||
// Update is called once per frame
|
|||
void Update() |
|||
{ |
|||
|
|||
} |
|||
} |
|
|||
%YAML 1.1 |
|||
%TAG !u! tag:unity3d.com,2011: |
|||
--- !u!29 &1 |
|||
OcclusionCullingSettings: |
|||
m_ObjectHideFlags: 0 |
|||
serializedVersion: 2 |
|||
m_OcclusionBakeSettings: |
|||
smallestOccluder: 5 |
|||
smallestHole: 0.25 |
|||
backfaceThreshold: 100 |
|||
m_SceneGUID: 00000000000000000000000000000000 |
|||
m_OcclusionCullingData: {fileID: 0} |
|||
--- !u!104 &2 |
|||
RenderSettings: |
|||
m_ObjectHideFlags: 0 |
|||
serializedVersion: 9 |
|||
m_Fog: 0 |
|||
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} |
|||
m_FogMode: 3 |
|||
m_FogDensity: 0.01 |
|||
m_LinearFogStart: 0 |
|||
m_LinearFogEnd: 300 |
|||
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} |
|||
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} |
|||
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} |
|||
m_AmbientIntensity: 1 |
|||
m_AmbientMode: 0 |
|||
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} |
|||
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} |
|||
m_HaloStrength: 0.5 |
|||
m_FlareStrength: 1 |
|||
m_FlareFadeSpeed: 3 |
|||
m_HaloTexture: {fileID: 0} |
|||
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} |
|||
m_DefaultReflectionMode: 0 |
|||
m_DefaultReflectionResolution: 128 |
|||
m_ReflectionBounces: 1 |
|||
m_ReflectionIntensity: 1 |
|||
m_CustomReflection: {fileID: 0} |
|||
m_Sun: {fileID: 0} |
|||
m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} |
|||
m_UseRadianceAmbientProbe: 0 |
|||
--- !u!157 &3 |
|||
LightmapSettings: |
|||
m_ObjectHideFlags: 0 |
|||
serializedVersion: 12 |
|||
m_GIWorkflowMode: 1 |
|||
m_GISettings: |
|||
serializedVersion: 2 |
|||
m_BounceScale: 1 |
|||
m_IndirectOutputScale: 1 |
|||
m_AlbedoBoost: 1 |
|||
m_EnvironmentLightingMode: 0 |
|||
m_EnableBakedLightmaps: 1 |
|||
m_EnableRealtimeLightmaps: 0 |
|||
m_LightmapEditorSettings: |
|||
serializedVersion: 12 |
|||
m_Resolution: 2 |
|||
m_BakeResolution: 40 |
|||
m_AtlasSize: 1024 |
|||
m_AO: 0 |
|||
m_AOMaxDistance: 1 |
|||
m_CompAOExponent: 1 |
|||
m_CompAOExponentDirect: 0 |
|||
m_ExtractAmbientOcclusion: 0 |
|||
m_Padding: 2 |
|||
m_LightmapParameters: {fileID: 0} |
|||
m_LightmapsBakeMode: 1 |
|||
m_TextureCompression: 1 |
|||
m_FinalGather: 0 |
|||
m_FinalGatherFiltering: 1 |
|||
m_FinalGatherRayCount: 256 |
|||
m_ReflectionCompression: 2 |
|||
m_MixedBakeMode: 2 |
|||
m_BakeBackend: 1 |
|||
m_PVRSampling: 1 |
|||
m_PVRDirectSampleCount: 32 |
|||
m_PVRSampleCount: 512 |
|||
m_PVRBounces: 2 |
|||
m_PVREnvironmentSampleCount: 256 |
|||
m_PVREnvironmentReferencePointCount: 2048 |
|||
m_PVRFilteringMode: 1 |
|||
m_PVRDenoiserTypeDirect: 1 |
|||
m_PVRDenoiserTypeIndirect: 1 |
|||
m_PVRDenoiserTypeAO: 1 |
|||
m_PVRFilterTypeDirect: 0 |
|||
m_PVRFilterTypeIndirect: 0 |
|||
m_PVRFilterTypeAO: 0 |
|||
m_PVREnvironmentMIS: 1 |
|||
m_PVRCulling: 1 |
|||
m_PVRFilteringGaussRadiusDirect: 1 |
|||
m_PVRFilteringGaussRadiusIndirect: 5 |
|||
m_PVRFilteringGaussRadiusAO: 2 |
|||
m_PVRFilteringAtrousPositionSigmaDirect: 0.5 |
|||
m_PVRFilteringAtrousPositionSigmaIndirect: 2 |
|||
m_PVRFilteringAtrousPositionSigmaAO: 1 |
|||
m_ExportTrainingData: 0 |
|||
m_TrainingDataDestination: TrainingData |
|||
m_LightProbeSampleCountMultiplier: 4 |
|||
m_LightingDataAsset: {fileID: 0} |
|||
m_LightingSettings: {fileID: 0} |
|||
--- !u!196 &4 |
|||
NavMeshSettings: |
|||
serializedVersion: 2 |
|||
m_ObjectHideFlags: 0 |
|||
m_BuildSettings: |
|||
serializedVersion: 2 |
|||
agentTypeID: 0 |
|||
agentRadius: 0.5 |
|||
agentHeight: 2 |
|||
agentSlope: 45 |
|||
agentClimb: 0.4 |
|||
ledgeDropHeight: 0 |
|||
maxJumpAcrossDistance: 0 |
|||
minRegionArea: 2 |
|||
manualCellSize: 0 |
|||
cellSize: 0.16666667 |
|||
manualTileSize: 0 |
|||
tileSize: 256 |
|||
accuratePlacement: 0 |
|||
maxJobWorkers: 0 |
|||
preserveTilesOutsideBounds: 0 |
|||
debug: |
|||
m_Flags: 0 |
|||
m_NavMeshData: {fileID: 0} |
|||
--- !u!1 &764046566 |
|||
GameObject: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
serializedVersion: 6 |
|||
m_Component: |
|||
- component: {fileID: 764046568} |
|||
- component: {fileID: 764046567} |
|||
m_Layer: 0 |
|||
m_Name: Directional Light |
|||
m_TagString: Untagged |
|||
m_Icon: {fileID: 0} |
|||
m_NavMeshLayer: 0 |
|||
m_StaticEditorFlags: 0 |
|||
m_IsActive: 1 |
|||
--- !u!108 &764046567 |
|||
Light: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 764046566} |
|||
m_Enabled: 1 |
|||
serializedVersion: 10 |
|||
m_Type: 1 |
|||
m_Shape: 0 |
|||
m_Color: {r: 1, g: 1, b: 1, a: 1} |
|||
m_Intensity: 1 |
|||
m_Range: 10 |
|||
m_SpotAngle: 30 |
|||
m_InnerSpotAngle: 21.80208 |
|||
m_CookieSize: 10 |
|||
m_Shadows: |
|||
m_Type: 2 |
|||
m_Resolution: -1 |
|||
m_CustomResolution: -1 |
|||
m_Strength: 1 |
|||
m_Bias: 0.05 |
|||
m_NormalBias: 0.4 |
|||
m_NearPlane: 0.2 |
|||
m_CullingMatrixOverride: |
|||
e00: 1 |
|||
e01: 0 |
|||
e02: 0 |
|||
e03: 0 |
|||
e10: 0 |
|||
e11: 1 |
|||
e12: 0 |
|||
e13: 0 |
|||
e20: 0 |
|||
e21: 0 |
|||
e22: 1 |
|||
e23: 0 |
|||
e30: 0 |
|||
e31: 0 |
|||
e32: 0 |
|||
e33: 1 |
|||
m_UseCullingMatrixOverride: 0 |
|||
m_Cookie: {fileID: 0} |
|||
m_DrawHalo: 0 |
|||
m_Flare: {fileID: 0} |
|||
m_RenderMode: 0 |
|||
m_CullingMask: |
|||
serializedVersion: 2 |
|||
m_Bits: 4294967295 |
|||
m_RenderingLayerMask: 1 |
|||
m_Lightmapping: 4 |
|||
m_LightShadowCasterMode: 0 |
|||
m_AreaSize: {x: 1, y: 1} |
|||
m_BounceIntensity: 1 |
|||
m_ColorTemperature: 6570 |
|||
m_UseColorTemperature: 0 |
|||
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} |
|||
m_UseBoundingSphereOverride: 0 |
|||
m_UseViewFrustumForShadowCasterCull: 1 |
|||
m_ShadowRadius: 0 |
|||
m_ShadowAngle: 0 |
|||
--- !u!4 &764046568 |
|||
Transform: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 764046566} |
|||
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} |
|||
m_LocalPosition: {x: 0, y: 3, z: 0} |
|||
m_LocalScale: {x: 1, y: 1, z: 1} |
|||
m_Children: [] |
|||
m_Father: {fileID: 0} |
|||
m_RootOrder: 1 |
|||
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} |
|||
--- !u!1 &1140493537 |
|||
GameObject: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
serializedVersion: 6 |
|||
m_Component: |
|||
- component: {fileID: 1140493542} |
|||
- component: {fileID: 1140493541} |
|||
- component: {fileID: 1140493540} |
|||
- component: {fileID: 1140493539} |
|||
- component: {fileID: 1140493538} |
|||
m_Layer: 0 |
|||
m_Name: Plane |
|||
m_TagString: Untagged |
|||
m_Icon: {fileID: 0} |
|||
m_NavMeshLayer: 0 |
|||
m_StaticEditorFlags: 0 |
|||
m_IsActive: 1 |
|||
--- !u!114 &1140493538 |
|||
MonoBehaviour: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1140493537} |
|||
m_Enabled: 1 |
|||
m_EditorHideFlags: 0 |
|||
m_Script: {fileID: 11500000, guid: 102786077389c5843836cf732086d77c, type: 3} |
|||
m_Name: |
|||
m_EditorClassIdentifier: |
|||
--- !u!64 &1140493539 |
|||
MeshCollider: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1140493537} |
|||
m_Material: {fileID: 0} |
|||
m_IsTrigger: 0 |
|||
m_Enabled: 1 |
|||
serializedVersion: 4 |
|||
m_Convex: 0 |
|||
m_CookingOptions: 30 |
|||
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} |
|||
--- !u!23 &1140493540 |
|||
MeshRenderer: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1140493537} |
|||
m_Enabled: 1 |
|||
m_CastShadows: 1 |
|||
m_ReceiveShadows: 1 |
|||
m_DynamicOccludee: 1 |
|||
m_MotionVectors: 1 |
|||
m_LightProbeUsage: 1 |
|||
m_ReflectionProbeUsage: 1 |
|||
m_RayTracingMode: 2 |
|||
m_RayTraceProcedural: 0 |
|||
m_RenderingLayerMask: 1 |
|||
m_RendererPriority: 0 |
|||
m_Materials: |
|||
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} |
|||
m_StaticBatchInfo: |
|||
firstSubMesh: 0 |
|||
subMeshCount: 0 |
|||
m_StaticBatchRoot: {fileID: 0} |
|||
m_ProbeAnchor: {fileID: 0} |
|||
m_LightProbeVolumeOverride: {fileID: 0} |
|||
m_ScaleInLightmap: 1 |
|||
m_ReceiveGI: 1 |
|||
m_PreserveUVs: 0 |
|||
m_IgnoreNormalsForChartDetection: 0 |
|||
m_ImportantGI: 0 |
|||
m_StitchLightmapSeams: 1 |
|||
m_SelectedEditorRenderState: 3 |
|||
m_MinimumChartSize: 4 |
|||
m_AutoUVMaxDistance: 0.5 |
|||
m_AutoUVMaxAngle: 89 |
|||
m_LightmapParameters: {fileID: 0} |
|||
m_SortingLayerID: 0 |
|||
m_SortingLayer: 0 |
|||
m_SortingOrder: 0 |
|||
m_AdditionalVertexStreams: {fileID: 0} |
|||
--- !u!33 &1140493541 |
|||
MeshFilter: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1140493537} |
|||
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} |
|||
--- !u!4 &1140493542 |
|||
Transform: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1140493537} |
|||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |
|||
m_LocalPosition: {x: 0, y: 0, z: 0} |
|||
m_LocalScale: {x: 1, y: 1, z: 1} |
|||
m_Children: [] |
|||
m_Father: {fileID: 0} |
|||
m_RootOrder: 2 |
|||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
|||
--- !u!1 &1548023132 |
|||
GameObject: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
serializedVersion: 6 |
|||
m_Component: |
|||
- component: {fileID: 1548023135} |
|||
- component: {fileID: 1548023134} |
|||
- component: {fileID: 1548023133} |
|||
m_Layer: 0 |
|||
m_Name: Main Camera |
|||
m_TagString: MainCamera |
|||
m_Icon: {fileID: 0} |
|||
m_NavMeshLayer: 0 |
|||
m_StaticEditorFlags: 0 |
|||
m_IsActive: 1 |
|||
--- !u!81 &1548023133 |
|||
AudioListener: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1548023132} |
|||
m_Enabled: 1 |
|||
--- !u!20 &1548023134 |
|||
Camera: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1548023132} |
|||
m_Enabled: 1 |
|||
serializedVersion: 2 |
|||
m_ClearFlags: 1 |
|||
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} |
|||
m_projectionMatrixMode: 1 |
|||
m_GateFitMode: 2 |
|||
m_FOVAxisMode: 0 |
|||
m_SensorSize: {x: 36, y: 24} |
|||
m_LensShift: {x: 0, y: 0} |
|||
m_FocalLength: 50 |
|||
m_NormalizedViewPortRect: |
|||
serializedVersion: 2 |
|||
x: 0 |
|||
y: 0 |
|||
width: 1 |
|||
height: 1 |
|||
near clip plane: 0.3 |
|||
far clip plane: 1000 |
|||
field of view: 60 |
|||
orthographic: 1 |
|||
orthographic size: 5.6 |
|||
m_Depth: -1 |
|||
m_CullingMask: |
|||
serializedVersion: 2 |
|||
m_Bits: 4294967295 |
|||
m_RenderingPath: -1 |
|||
m_TargetTexture: {fileID: 0} |
|||
m_TargetDisplay: 0 |
|||
m_TargetEye: 3 |
|||
m_HDR: 1 |
|||
m_AllowMSAA: 1 |
|||
m_AllowDynamicResolution: 0 |
|||
m_ForceIntoRT: 0 |
|||
m_OcclusionCulling: 1 |
|||
m_StereoConvergence: 10 |
|||
m_StereoSeparation: 0.022 |
|||
--- !u!4 &1548023135 |
|||
Transform: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 1548023132} |
|||
m_LocalRotation: {x: 0, y: 0.7071068, z: -0.7071068, w: 0} |
|||
m_LocalPosition: {x: 0, y: 1, z: 0.32} |
|||
m_LocalScale: {x: 1, y: 1, z: 1} |
|||
m_Children: [] |
|||
m_Father: {fileID: 0} |
|||
m_RootOrder: 0 |
|||
m_LocalEulerAnglesHint: {x: 90, y: 180, z: 0} |
撰写
预览
正在加载...
取消
保存
Reference in new issue