물웅덩이, 밧줄 움직임 코드 추가

This commit is contained in:
정세윤_crow 2026-02-01 14:47:27 +09:00
parent 2394752748
commit 9f841c4828
6 changed files with 202 additions and 0 deletions

View File

@ -3508,6 +3508,105 @@ Transform:
m_CorrespondingSourceObject: {fileID: 7588602306031819191, guid: dd314a3f767a46446b652103ace62042, type: 3} m_CorrespondingSourceObject: {fileID: 7588602306031819191, guid: dd314a3f767a46446b652103ace62042, type: 3}
m_PrefabInstance: {fileID: 590924598} m_PrefabInstance: {fileID: 590924598}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
--- !u!1 &1177009317
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1177009320}
- component: {fileID: 1177009319}
- component: {fileID: 1177009321}
m_Layer: 0
m_Name: GameObject (3)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!61 &1177009319
BoxCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1177009317}
m_Enabled: 1
serializedVersion: 3
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: 1
m_UsedByEffector: 1
m_CompositeOperation: 0
m_CompositeOrder: 0
m_Offset: {x: 0, y: 0}
m_SpriteTilingProperty:
border: {x: 0, y: 0, z: 0, w: 0}
pivot: {x: 0, y: 0}
oldSize: {x: 0, y: 0}
newSize: {x: 0, y: 0}
adaptiveTilingThreshold: 0
drawMode: 0
adaptiveTiling: 0
m_AutoTiling: 0
m_Size: {x: 1, y: 5}
m_EdgeRadius: 0
--- !u!4 &1177009320
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1177009317}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -1.72, y: -5.7, z: 0}
m_LocalScale: {x: 2.03, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!253 &1177009321
BuoyancyEffector2D:
serializedVersion: 2
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1177009317}
m_Enabled: 1
m_UseColliderMask: 1
m_ColliderMask:
serializedVersion: 2
m_Bits: 4294967295
m_SurfaceLevel: 2.4
m_Density: 0
m_LinearDamping: 20
m_AngularDamping: 10
m_FlowAngle: 0
m_FlowMagnitude: 0
m_FlowVariation: 0
--- !u!1 &1190488655 --- !u!1 &1190488655
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -5069,3 +5168,4 @@ SceneRoots:
- {fileID: 1478180731} - {fileID: 1478180731}
- {fileID: 1995838084} - {fileID: 1995838084}
- {fileID: 2026865174} - {fileID: 2026865174}
- {fileID: 1177009320}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 48a39c9b49fa6a441a9b788f5209c16e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,62 @@
using UnityEngine;
using System.Collections.Generic;
public class Rope2D : MonoBehaviour
{
[SerializeField] private Transform startPoint;
[SerializeField] private Transform endPoint;
[SerializeField] private GameObject ropeSegmentPrefab;
[SerializeField] private int segmentCount = 10;
[HideInInspector] public List<GameObject> ropeSegments = new List<GameObject>();
[ContextMenu("Generate Rope")]
private void GenerateRope()
{
RemoveRope();
Vector3 startPos = startPoint.position;
Vector3 endPos = endPoint.position;
Rigidbody2D previousRigidbody = null;
for (int i = 0; i < segmentCount; i++)
{
float t = (float)i / (segmentCount - 1);
Vector3 spawnPos = Vector3.Lerp(startPos, endPos, t);
GameObject segment = Instantiate(ropeSegmentPrefab, spawnPos, Quaternion.identity, transform);
ropeSegments.Add(segment);
HingeJoint2D joint = segment.GetComponent<HingeJoint2D>();
if (i == 0)
{
segment.GetComponent<Rigidbody2D>().bodyType = RigidbodyType2D.Static;
}
else
{
joint.connectedBody = previousRigidbody;
}
previousRigidbody = segment.GetComponent<Rigidbody2D>();
}
}
private void RemoveRope()
{
foreach (GameObject segment in ropeSegments)
{
DestroyImmediate(segment);
}
ropeSegments.Clear();
}
private void OnDrawGizmos()
{
Gizmos.color = Color.yellow;
for (int i = 0; i < segmentCount; i++)
{
float t = (float)i / (segmentCount - 1);
Vector3 pos = Vector3.Lerp(startPoint.position, endPoint.position, t);
Gizmos.DrawSphere(pos, 0.1f);
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 1cee6270fbd1842429e1ec4d6350bbc4

View File

@ -0,0 +1,28 @@
using UnityEngine;
[RequireComponent(typeof(LineRenderer))]
public class RopeRenderer : MonoBehaviour
{
[SerializeField] private Rope2D ropeCreator;
private LineRenderer lineRenderer;
private void Start()
{
lineRenderer = GetComponent<LineRenderer>();
}
private void Update()
{
if (ropeCreator == null || ropeCreator.ropeSegments.Count == 0)
{
return;
}
lineRenderer.positionCount = ropeCreator.ropeSegments.Count;
for (int i = 0; i < ropeCreator.ropeSegments.Count; i++)
{
lineRenderer.SetPosition(i, ropeCreator.ropeSegments[i].transform.position);
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: e418e743fe84926449be9bd03e646603