Files
Fishing2/Assets/Scripts/PhysicsTools/Segment.cs
2025-06-17 22:45:55 +08:00

59 lines
1.9 KiB
C#

// using UltimateWater;
using UnityEngine;
namespace PhysicsTools
{
public class Segment
{
public GameObject seg;
public Rigidbody body;
public Joint prev;
public Joint next;
public CapsuleCollider capsuleCollider;
public MeshFilter meshFilter;
public MeshRenderer meshRenderer;
// public WaterInteractive waterInteractive;
public Segment(string name, float len, Vector3 pos, Quaternion q, SegmentPropertiesBase segProperties, Rope r)
{
SegmentPropertiesCylinder segmentPropertiesCylinder = (SegmentPropertiesCylinder)segProperties;
float radius = segmentPropertiesCylinder.radius;
seg = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
capsuleCollider = seg.GetComponent<CapsuleCollider>();
meshFilter = seg.GetComponent<MeshFilter>();
meshRenderer = seg.GetComponent<MeshRenderer>();
body = seg.AddComponent<Rigidbody>();
capsuleCollider.sharedMaterial = r.ropeMaterial;
capsuleCollider.enabled = r.useColliders;
r.lstComponentsCreated.Add(seg);
seg.hideFlags = (r.HideChildren ? HideFlags.HideInHierarchy : HideFlags.None);
meshRenderer.enabled = true;
r.linkMesh.defaultMesh = meshFilter.sharedMesh;
r.linkMesh.defaultMeshMaterial = meshRenderer.sharedMaterial;
r.linkMesh.defaultTransform = Matrix4x4.identity;
if (r.linkMesh.getMesh() != null)
{
meshFilter.sharedMesh = r.linkMesh.getMesh();
meshRenderer.sharedMaterial = r.linkMesh.meshMaterial;
}
seg.name = name;
seg.transform.localScale = new Vector3(radius * 2f, len / 2f, radius * 2f);
seg.transform.localPosition = pos;
seg.transform.localRotation = q;
body.maxAngularVelocity = 1f;
body.angularDamping = segmentPropertiesCylinder.angularDamping;
body.linearDamping = segmentPropertiesCylinder.linearDamping;
body.mass = segmentPropertiesCylinder.massPerUnitLength * segmentPropertiesCylinder.length;
body.solverIterations = segmentPropertiesCylinder.solverCount;
body.isKinematic = r.kinematic;
}
}
}