many improvements and point mounted cables

This commit is contained in:
Felix Klenner 2023-11-19 15:45:08 +01:00
parent 7e46a7cf95
commit 3c334e040d
6 changed files with 526 additions and 162 deletions

View file

@ -7,28 +7,59 @@ public static class CableJointsAlgorithm {
public static void TimeStep(List<Cable> cables) {
//handle each cable individually
foreach (var cable in cables) {
float totalDist = 0;
//calculate new attachment points for all joints
for(var go = cable.firstRoller; go != null; go = go.GetComponent<RollerProperties>().linkTo) {
for (var go = cable.firstRoller; go != null; go = go.GetComponent<RollerProperties>().linkTo) {
if (go.GetComponent<RollerProperties>().linkTo != null) {
var dist = go.GetComponent<DistanceJoint2D>();
var rp = go.GetComponent<RollerProperties>();
var (left, right) = TangentCircleCircle(go, rp.linkTo);
//TODO: assumes circles are flat for sufficiently small timesteps
var leftSurfaceDist =
(go.transform.TransformPoint(dist.anchor) - go.transform.TransformPoint(left)).magnitude;
var rightSurfaceDist = (dist.attachedRigidbody.transform.TransformPoint(dist.connectedAnchor) -
dist.attachedRigidbody.transform.TransformPoint(right)).magnitude;
Debug.Log(go.name+": left dist: "+leftSurfaceDist+" right Dist: "+rightSurfaceDist);
dist.anchor = left;
dist.connectedAnchor = right;
var (left, right) = rp.updateDistanceJoints();
totalDist += dist.distance;
//Debug.Log(go.name+": left dist: "+leftSurfaceDist+" right Dist: "+rightSurfaceDist);
}
}
Debug.Log("Total distance for cable: "+totalDist);
}
}
public static Vector2 TangentPointCircle(GameObject fixedPointObject, GameObject circleObject) {
var roller = circleObject.GetComponent<RollerProperties>();
var fixedTransform = fixedPointObject.GetComponent<RollerProperties>().transform;
var rollerTransform = roller.transform;
//assume round rollers only
var rollerRadius = rollerTransform.lossyScale.x / 2;
Vector2 d = rollerTransform.Position2d() - fixedTransform.Position2d();
var dLen = d.magnitude;
if (dLen > rollerRadius) {
float alpha;
if (d.x >= 0) {
alpha = (float)Asin(d.y / dLen);
}
else {
alpha = (float)(PI - Asin(d.y / dLen));
}
float phi = (float)Asin(rollerRadius / dLen);
if (roller.clockwise) {
alpha = (float)(alpha - PI / 2 - phi);
}
else {
alpha = (float)(alpha + PI / 2 + phi);
}
var p1 = rollerTransform.Position2d() + rollerRadius * new Vector2((float)Cos(alpha), (float)Sin(alpha));
return rollerTransform.InverseTransformPoint(p1);
}
throw new Exception("Overlapping Rollers Error");
}
public static (Vector2, Vector2) TangentCircleCircle(GameObject g1, GameObject g2) {
var roller1 = g1.GetComponent<RollerProperties>();
@ -37,8 +68,8 @@ public static class CableJointsAlgorithm {
var t2 = g2.transform;
//assume round rollers only
var r1 = t1.lossyScale.x/2;
var r2 = t2.lossyScale.x/2;
var r1 = t1.lossyScale.x / 2;
var r2 = t2.lossyScale.x / 2;
Vector2 d = t2.Position2d() - t1.Position2d();
float r = r1 + r2;
@ -84,7 +115,6 @@ public static class CableJointsAlgorithm {
var p2 = t2.Position2d() + r2 * new Vector2((float)Cos(alpha2), (float)Sin(alpha2));
return (t1.InverseTransformPoint(p1), t2.InverseTransformPoint(p2));
}
throw new Exception("Overlapping Rollers Error");

View file

@ -6,14 +6,14 @@ using Unity.Collections;
using Unity.VisualScripting;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
using FontWeight = TMPro.FontWeight;
public class Controller : MonoBehaviour {
private List<Cable> cables = new();
//Initialize
void OnEnable() {
void Awake() {
var rotatableSprite = Resources.Load<Sprite>("Rotatable");
var fixedSprite = Resources.Load<Sprite>("Fixed");
var poweredSprite = Resources.Load<Sprite>("Powered");
@ -24,27 +24,32 @@ public class Controller : MonoBehaviour {
foreach (GameObject go in gameObjects) {
RollerProperties rp = go.GetComponent<RollerProperties>();
if (rp != null) {
Rigidbody2D settings = go.GetOrAddComponent<Rigidbody2D>();
switch (rp.movement) {
case RollerProperties.RotationType.Rotatable:
go.GetComponent<SpriteRenderer>().sprite = rotatableSprite;
break;
case RollerProperties.RotationType.Fixed:
go.GetComponent<SpriteRenderer>().sprite = fixedSprite;
break;
case RollerProperties.RotationType.Free:
go.GetComponent<SpriteRenderer>().sprite = freeSprite;
break;
case RollerProperties.RotationType.Powered:
go.GetComponent<SpriteRenderer>().sprite = poweredSprite;
break;
if (!rp.useFixedAttachmentPoint) {
switch (rp.movement) {
case RollerProperties.RotationType.Rotatable:
go.GetComponent<SpriteRenderer>().sprite = rotatableSprite;
break;
case RollerProperties.RotationType.Fixed:
go.GetComponent<SpriteRenderer>().sprite = fixedSprite;
break;
case RollerProperties.RotationType.Free:
go.GetComponent<SpriteRenderer>().sprite = freeSprite;
break;
case RollerProperties.RotationType.Powered:
go.GetComponent<SpriteRenderer>().sprite = poweredSprite;
break;
}
}
//collisions and physics
Rigidbody2D rigidbody = go.GetOrAddComponent<Rigidbody2D>();
rigidbody.useAutoMass = true; // mass is based on size
if (rp.movement == RollerProperties.RotationType.Fixed) {
settings.bodyType = RigidbodyType2D.Static;
rigidbody.bodyType = RigidbodyType2D.Static;
}
go.AddComponent<PolygonCollider2D>();
if (rp.start) {
cables.Add(new Cable { firstRoller = go });
}
@ -54,7 +59,7 @@ public class Controller : MonoBehaviour {
}
//create canvas to display information
var canvas = FindAnyObjectByType<Canvas>();
var canvas = gameObject.AddComponent<Canvas>();
//prepare joints
foreach (var go in gameObjects) {
@ -65,14 +70,23 @@ public class Controller : MonoBehaviour {
dist.enableCollision = true;
dist.connectedBody = rp.linkTo.GetComponent<Rigidbody2D>();
dist.maxDistanceOnly = true;
var (left, right) = CableJointsAlgorithm.TangentCircleCircle(go, rp.linkTo);
dist.anchor = left;
dist.connectedAnchor = right;
rp.currentDistance = dist.distance = dist.DistanceInWorld(left, right);
rp.distanceJoint2D = dist;
//set fixed points only once
if (rp.useFixedAttachmentPoint) {
dist.anchor = rp.attachmentPoint;
}
if (rp.linkTo.GetComponent<RollerProperties>().useFixedAttachmentPoint) {
dist.connectedAnchor = rp.linkTo.GetComponent<RollerProperties>().attachmentPoint;
}
//update roller tangent attachments
rp.updateDistanceJoints();
rp.currentDistance = dist.distance = dist.DistanceInWorld(dist.anchor, dist.connectedAnchor);
}
if (rp.movement == RollerProperties.RotationType.Rotatable ||
rp.movement == RollerProperties.RotationType.Powered) {
if (rp.movement is RollerProperties.RotationType.Rotatable or RollerProperties.RotationType.Powered) {
var wheel = go.AddComponent<HingeJoint2D>();
wheel.anchor = Vector2.zero;
if (rp.movement == RollerProperties.RotationType.Powered) {
@ -84,14 +98,16 @@ public class Controller : MonoBehaviour {
//create names on objects
GameObject text = new GameObject(go.name + "_text");
text.transform.parent = canvas.transform;
var textMeshPro = text.AddComponent<TextMeshPro>();
textMeshPro.text = go.name + "\n" + (rp.clockwise ? "cw" : "ccw") + " - " + rp.movement;
// textMeshPro.material.shader.GetComponent<Outline>().enabled = true;
// textMeshPro.material.shader.GetComponent<Outline>().useGraphicAlpha = false;
// textMeshPro.material.shader.GetComponent<Outline>().effectDistance = new Vector2(1, -1);
textMeshPro.fontSize = .3f;
textMeshPro.color = Color.red;
textMeshPro.fontWeight = FontWeight.Bold;
textMeshPro.outlineColor = Color.white;
textMeshPro.outlineWidth = 1;
textMeshPro.color = Color.black;
textMeshPro.fontStyle = FontStyles.Bold;
textMeshPro.outlineColor = new Color(0.6f, 0.7f, 1f);
textMeshPro.outlineWidth = 0.1f;
textMeshPro.horizontalAlignment = HorizontalAlignmentOptions.Center;
textMeshPro.verticalAlignment = VerticalAlignmentOptions.Middle;
textMeshPro.transform.localScale = new Vector3(100, 100, 1);
@ -101,7 +117,6 @@ public class Controller : MonoBehaviour {
rp.text = text;
}
}
}

View file

@ -9,22 +9,73 @@ using UnityEngine.Serialization;
[System.Serializable]
public class RollerProperties : MonoBehaviour {
//settings
[SerializeField] public bool start = false;
[SerializeField] public bool clockwise = false;
[SerializeField] public GameObject linkTo = null;
[SerializeField] public RotationType movement = RotationType.Fixed;
[FormerlySerializedAs("fixedAttachmentPoint")] [SerializeField] public bool useFixedAttachmentPoint = false;
[SerializeField] public Vector2 attachmentPoint = new Vector2(0, 0);
//references
protected internal GameObject text;
protected internal DistanceJoint2D distanceJoint2D = null;
//simulation properties
protected internal float currentDistance;
protected internal GameObject text;
public (float?, float?) updateDistanceJoints() {
Vector2? left = null, right = null;
if (linkTo != null) {
if (useFixedAttachmentPoint && !linkTo.GetComponent<RollerProperties>().useFixedAttachmentPoint) {
//left = attachmentPoint;
right = CableJointsAlgorithm.TangentPointCircle(gameObject, linkTo);
}
else if (!useFixedAttachmentPoint && linkTo.GetComponent<RollerProperties>().useFixedAttachmentPoint) {
left = CableJointsAlgorithm.TangentPointCircle(linkTo,gameObject);
//right = linkTo.GetComponent<RollerProperties>().attachmentPoint;
}
else if (!useFixedAttachmentPoint && !linkTo.GetComponent<RollerProperties>().useFixedAttachmentPoint) {
(left, right) = CableJointsAlgorithm.TangentCircleCircle(gameObject, linkTo);
}
/*
else {
left = attachmentPoint;
right = linkTo.GetComponent<RollerProperties>().attachmentPoint;
}*/
}
//TODO: assumes circles are flat for sufficiently small timesteps
float? leftSurfaceDist = null, rightSurfaceDist = null;
if (left.HasValue) {
leftSurfaceDist = (gameObject.transform.TransformPoint(distanceJoint2D.anchor) - gameObject.transform.TransformPoint(left.Value))
.magnitude;
distanceJoint2D.anchor = left.Value;
}
if (right.HasValue) {
rightSurfaceDist = (linkTo.transform.TransformPoint(distanceJoint2D.connectedAnchor) -
linkTo.transform.TransformPoint(right.Value)).magnitude;
distanceJoint2D.connectedAnchor = right.Value;
}
return (leftSurfaceDist, rightSurfaceDist);
}
/* VISUALS */
private void Update() {
if (text != null) {
text.transform.position = transform.position;
text.transform.rotation = transform.rotation;
//text.transform.rotation = transform.rotation;
text.GetComponent<TextMeshPro>().text = gameObject.name + "\n" +
(clockwise ? "cw" : "ccw") + " - " + movement + "\n" +
"D: " + (distanceJoint2D == null
? " - "
: distanceJoint2D.distance.ToString("0.00")) + "M: "+GetComponent<Rigidbody2D>().mass.ToString("0.00");
}
}

View file

@ -67,6 +67,9 @@ LightmapSettings:
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
@ -120,7 +123,7 @@ NavMeshSettings:
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &197689340
--- !u!1 &870637784
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@ -128,99 +131,34 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 197689344}
- component: {fileID: 197689343}
- component: {fileID: 197689342}
- component: {fileID: 197689341}
m_Layer: 5
m_Name: Canvas
- component: {fileID: 870637785}
m_Layer: 0
m_Name: Objects
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &197689341
MonoBehaviour:
--- !u!4 &870637785
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 197689340}
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 &197689342
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 197689340}
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
m_PresetInfoIsWorld: 0
--- !u!223 &197689343
Canvas:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 197689340}
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_VertexColorAlwaysGammaSpace: 0
m_AdditionalShaderChannelsFlag: 25
m_UpdateRectTransformForStandalone: 0
m_SortingLayerID: 0
m_SortingOrder: 0
m_TargetDisplay: 0
--- !u!224 &197689344
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 197689340}
m_GameObject: {fileID: 870637784}
serializedVersion: 2
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_LocalPosition: {x: 0.2534463, y: -0.7609657, z: -0.06719851}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Children:
- {fileID: 1947610090}
- {fileID: 1073098768}
- {fileID: 1983224137}
- {fileID: 1588024398}
- {fileID: 1306628727}
m_Father: {fileID: 0}
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}
--- !u!1 &1073098765
GameObject:
m_ObjectHideFlags: 0
@ -251,10 +189,12 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 371c00a70d1ac344fae68d1834928173, type: 3}
m_Name:
m_EditorClassIdentifier:
start: 1
start: 0
clockwise: 0
linkTo: {fileID: 1983224135}
movement: 1
movement: 0
useFixedAttachmentPoint: 0
attachmentPoint: {x: 0, y: 0}
--- !u!212 &1073098767
SpriteRenderer:
m_ObjectHideFlags: 0
@ -316,10 +256,140 @@ Transform:
m_GameObject: {fileID: 1073098765}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -9.72, y: -2.61, z: 0}
m_LocalPosition: {x: -9.04, y: 1.4, z: 0.06719851}
m_LocalScale: {x: 3, y: 3, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 870637785}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1142910635
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1142910638}
- component: {fileID: 1142910637}
- component: {fileID: 1142910636}
m_Layer: 0
m_Name: Floor
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!61 &1142910636
BoxCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1142910635}
m_Enabled: 1
m_Density: 1
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_ForceSendLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ForceReceiveLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ContactCaptureLayers:
serializedVersion: 2
m_Bits: 4294967295
m_CallbackLayers:
serializedVersion: 2
m_Bits: 4294967295
m_IsTrigger: 0
m_UsedByEffector: 0
m_UsedByComposite: 0
m_Offset: {x: 0, y: 0}
m_SpriteTilingProperty:
border: {x: 0, y: 0, z: 0, w: 0}
pivot: {x: 0.5, y: 0.5}
oldSize: {x: 1, y: 1}
newSize: {x: 1, y: 1}
adaptiveTilingThreshold: 0.5
drawMode: 0
adaptiveTiling: 0
m_AutoTiling: 0
serializedVersion: 2
m_Size: {x: 1, y: 1}
m_EdgeRadius: 0
--- !u!212 &1142910637
SpriteRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1142910635}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 10754, 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: 0
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
m_Size: {x: 1, y: 1}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!4 &1142910638
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1142910635}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -0.08, y: -7.78, z: 0}
m_LocalScale: {x: 30.073181, y: 1.5527159, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1200065142
@ -427,6 +497,109 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d406720d26e7d1e4ba8afd140d67de7e, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &1306628726
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1306628727}
- component: {fileID: 1306628729}
- component: {fileID: 1306628728}
m_Layer: 0
m_Name: Weight
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1306628727
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1306628726}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 4.19, y: -1.65, z: 0.06719851}
m_LocalScale: {x: 2, y: 2, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 870637785}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1306628728
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1306628726}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 371c00a70d1ac344fae68d1834928173, type: 3}
m_Name:
m_EditorClassIdentifier:
start: 0
clockwise: 1
linkTo: {fileID: 0}
movement: 3
useFixedAttachmentPoint: 1
attachmentPoint: {x: 0, y: 0.5}
--- !u!212 &1306628729
SpriteRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1306628726}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 10754, 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: 0
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
m_Size: {x: 1, y: 1}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &1588024395
GameObject:
m_ObjectHideFlags: 0
@ -459,8 +632,10 @@ MonoBehaviour:
m_EditorClassIdentifier:
start: 0
clockwise: 0
linkTo: {fileID: 0}
movement: 2
linkTo: {fileID: 1306628726}
movement: 1
useFixedAttachmentPoint: 0
attachmentPoint: {x: 0, y: 0}
--- !u!212 &1588024397
SpriteRenderer:
m_ObjectHideFlags: 0
@ -522,12 +697,115 @@ Transform:
m_GameObject: {fileID: 1588024395}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 4.53, y: 0.98, z: 0}
m_LocalPosition: {x: 4.276554, y: 1.7409657, z: 0.06719851}
m_LocalScale: {x: 2, y: 2, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_Father: {fileID: 870637785}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1947610089
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1947610090}
- component: {fileID: 1947610092}
- component: {fileID: 1947610091}
m_Layer: 0
m_Name: Weight (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1947610090
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1947610089}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -10.71, y: -3.08, z: 0.06719851}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 870637785}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1947610091
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1947610089}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 371c00a70d1ac344fae68d1834928173, type: 3}
m_Name:
m_EditorClassIdentifier:
start: 1
clockwise: 0
linkTo: {fileID: 1073098765}
movement: 3
useFixedAttachmentPoint: 1
attachmentPoint: {x: 0, y: 0.5}
--- !u!212 &1947610092
SpriteRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1947610089}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 10754, 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: 0
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
m_Size: {x: 1, y: 1}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &1983224135
GameObject:
m_ObjectHideFlags: 0
@ -607,11 +885,11 @@ Transform:
m_GameObject: {fileID: 1983224135}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -0.31, y: 0.38, z: 0}
m_LocalPosition: {x: -1.9, y: 4, z: 0.06719851}
m_LocalScale: {x: 2, y: 2, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_Father: {fileID: 870637785}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1983224138
MonoBehaviour:
@ -629,12 +907,12 @@ MonoBehaviour:
clockwise: 0
linkTo: {fileID: 1588024395}
movement: 1
useFixedAttachmentPoint: 0
attachmentPoint: {x: 0, y: 0}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 1200065145}
- {fileID: 197689344}
- {fileID: 1983224137}
- {fileID: 1588024398}
- {fileID: 1073098768}
- {fileID: 1142910638}
- {fileID: 870637785}

View file

@ -3,13 +3,12 @@
"com.csutil.cscore": "https://github.com/cs-util-com/cscore.git?path=CsCore/PlainNetClassLib/src/Plugins",
"com.unity.collab-proxy": "2.2.0",
"com.unity.feature.2d": "2.0.0",
"com.unity.ide.rider": "3.0.25",
"com.unity.ide.visualstudio": "2.0.21",
"com.unity.ide.rider": "3.0.26",
"com.unity.test-framework": "1.3.9",
"com.unity.textmeshpro": "3.0.6",
"com.unity.timeline": "1.8.2",
"com.unity.ugui": "1.0.0",
"com.unity.visualscripting": "1.8.0",
"com.unity.visualscripting": "1.9.1",
"com.unity.modules.ai": "1.0.0",
"com.unity.modules.androidjni": "1.0.0",
"com.unity.modules.animation": "1.0.0",

View file

@ -151,7 +151,7 @@
}
},
"com.unity.ide.rider": {
"version": "3.0.25",
"version": "3.0.26",
"depth": 0,
"source": "registry",
"dependencies": {
@ -159,15 +159,6 @@
},
"url": "https://packages.unity.com"
},
"com.unity.ide.visualstudio": {
"version": "2.0.21",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.test-framework": "1.1.9"
},
"url": "https://packages.unity.com"
},
"com.unity.mathematics": {
"version": "1.2.6",
"depth": 2,
@ -224,7 +215,7 @@
}
},
"com.unity.visualscripting": {
"version": "1.8.0",
"version": "1.9.1",
"depth": 0,
"source": "registry",
"dependencies": {