void Start() { // Place the arc between place and transition Vector3 sourcePosition = place.getPosition(); Vector3 destinationPosition = transition.getPosition(); transform.position = new Vector3( sourcePosition.x + (destinationPosition.x - sourcePosition.x) / 2, sourcePosition.y + (destinationPosition.y - sourcePosition.y) / 2, sourcePosition.z + (destinationPosition.z - sourcePosition.z) / 2); // Rotate the arc to right angle & according to type float z_angle_deg = (180 / Mathf.PI) * Mathf.Atan( ((sourcePosition.y - destinationPosition.y) / 2) / ((sourcePosition.x - destinationPosition.x) / 2)); if ((sourcePosition.x - destinationPosition.x) > 0) { z_angle_deg = z_angle_deg + 180; } if (type == ConditionType.POSTCONDITION) { z_angle_deg = z_angle_deg + 180; } Vector3 rotationChange = new Vector3(0, 0, z_angle_deg); transform.Rotate(rotationChange); }
void Start() { // Place the arc between place and transition float angle = Vector3.SignedAngle(place.getPosition() - transition.getPosition(), Vector3.right, Vector3.forward); float angleRad = Mathf.Deg2Rad * angle; float placeElementRay = 1F; float transitionElementWidth = 0.1F; Vector3 placePosition = place.getPosition() + new Vector3(-Mathf.Cos(angleRad), Mathf.Sin(angleRad)) * placeElementRay; Vector3 transitionPosition = transition.getPosition() + new Vector3(transitionElementWidth * Mathf.Sign(place.getPosition().x - transition.getPosition().x), -Mathf.Sin(angleRad)); // add small change in the angle caused by transitionElementWidth angle = Vector3.SignedAngle(placePosition - transitionPosition, new Vector3(1, 0, 0), new Vector3(0, 0, 1)); // Rotate the arc according to type if (type == ConditionType.PRECONDITION) { angle += 180; } // position, rotation & scale transform.position = placePosition + (transitionPosition - placePosition) / 2; transform.rotation = Quaternion.AngleAxis(angle, Vector3.back); float distance = Vector3.Distance(placePosition, transitionPosition); transform.localScale = new Vector3(distance / 2, transform.localScale.y); // COEFFICIENT TEXT coefficientText = Instantiate(coefficientText, game.GetComponentInChildren <Canvas>().transform.GetChild(0).transform); coefficientText.GetComponent <UnityEngine.UI.Text>().text = coeff.ToString(); // Move text to its right place + arbitrary numbers added to tune position float transformSign = Mathf.Sign(place.getPosition().x - transition.getPosition().x); if (type == ConditionType.POSTCONDITION) { coefficientText.transform.position = place.getPosition() + new Vector3(-Mathf.Cos(angleRad + transformSign * 0.2F) * 1.5F, Mathf.Sin(angleRad + transformSign * 0.2F) * 1.5F) * placeElementRay; } else { coefficientText.transform.position = transitionPosition + new Vector3(3f * transitionElementWidth * transformSign, 0.3F); } }