private void Update() { var moveForce = Vector3.zero; for (int i = 0; i < cats.Count; i++) { var cat = cats[i]; var direction = (transform.position - cat.transform.position); var distance = direction.magnitude; if (distance > forgetRadius) { forgetCats.Add(cat); } } foreach (var cat in forgetCats) { cats.Remove(cat); if (chosenCat && chosenCat.Equals(cat)) { chosenCat = null; } } forgetCats.Clear(); if (chooseTimer > 0) { chooseTimer -= Time.deltaTime; } if ((!chosenCat || chooseTimer <= 0) && cats.Count > 0) { var index = Random.Range(0, cats.Count); chosenCat = cats[index]; chooseTimer = Random.Range(chooseTimeMin, chooseTimeMax); } if (chosenCat) { var chosenDirection = (transform.position - chosenCat.transform.position); var dirNorm = chosenDirection.normalized; moveForce += dirNorm * fleeForce; moveForce.y += fleeForce * 0.1f; } if (moveForce.magnitude > maxForce) { moveForce = moveForce.normalized * maxForce; } if (fleeWhileSticked || !stickyScript.stuckToVicky) { stickyScript.rb.AddForce(Time.deltaTime * moveForce); } if (!fleeWhileSticked && stickyScript.stuckToVicky) { cats.Clear(); } }
public void AttachObject(ObjectStickScript objectScript) { if (chargeCooldown > 0 || stickedObjects.Contains(objectScript)) { return; } AddFixedJoint(gameObject, objectScript.rb); stickedObjects.Add(objectScript); objectScript.stuckToVicky = true; }
public void AttachObjectToAnother(ObjectStickScript anchorScript, ObjectStickScript extendedScript) { if (chargeCooldown > 0 || !stickedObjects.Contains(anchorScript) || stickedObjects.Contains(extendedScript)) { return; } AddFixedJoint(anchorScript.gameObject, extendedScript.rb); stickedObjects.Add(extendedScript); extendedScript.stuckToVicky = true; }