var stringTarget1:Transform; var stringTarget2:Transform; var stringWidth:float = 0.008; var receiveShadows:boolean = false; var castShadows:boolean = false; var stringMaterials:Material[]; var stringColor:Color = Color.white; var pullTarget:Transform; var pulledPosition:Vector3; private var isPull:boolean = false; private var lineRanderer:LineRenderer; private var myTransform:Transform; function Awake() { myTransform = transform; } function Start() { lineRanderer = GetComponent(LineRenderer); if (!lineRanderer) { lineRanderer = gameObject.AddComponent(LineRenderer); lineRanderer.hideFlags = HideFlags.DontSave; } lineRanderer.materials = stringMaterials; lineRanderer.receiveShadows = receiveShadows; lineRanderer.castShadows = castShadows; lineRanderer.useWorldSpace = false; lineRanderer.SetColors(stringColor, stringColor); lineRanderer.SetWidth(stringWidth, stringWidth); lineRanderer.SetVertexCount(3); lineRanderer.SetPosition(0, stringTarget1.localPosition); lineRanderer.SetPosition(1, stringRelease()); lineRanderer.SetPosition(2, stringTarget2.localPosition); } function Update() { lineRanderer.SetPosition(1, updatePull()); } private function updatePull():Vector3 { if (pullTarget) { pulledPosition = myTransform.InverseTransformPoint(pullTarget.position); isPull = true; } else { if (isPull) { stringRelease(); } } return pulledPosition; } function stringRelease():Vector3 { pullTarget = null; cancelPullQue = true; isPull = false; pulledPosition = (stringTarget1.localPosition -stringTarget2.localPosition) /2 +stringTarget2.localPosition; return pulledPosition; } private var cancelPullQue:boolean = false; function stringPullQueued(target_:Transform, time_:float) { cancelPullQue = false; yield WaitForSeconds(time_); if (!cancelPullQue) { pullTarget = target_; } }