Question by
Geneve-Goh · Jul 16, 2016 at 08:51 AM ·
unity 2d
Allowing unity game to have unlimited runs
public float maxStretch = 3.0f;
public LineRenderer catapultLineFront;
public LineRenderer catapultLineBack;
private SpringJoint2D spring;
private Transform catapult;
private Ray rayToMouse;
private Ray leftCatapultToProjectile;
private float maxStretchSqr;
private float circleRadius;
private bool clickedOn;
private Vector2 prevVelocity;
private Vector3 velocity;
void Awake()
{
spring = GetComponent <SpringJoint2D> ();
catapult = spring.connectedBody.transform;
}
// Use this for initialization
void Start ()
{
LineRendererSetup();
rayToMouse = new Ray(catapult.position, Vector3.zero);
leftCatapultToProjectile = new Ray(catapultLineFront.transform.position, Vector3.zero);
maxStretchSqr = maxStretch * maxStretch;
CircleCollider2D circle = GetComponent<Collider2D>() as CircleCollider2D;
circleRadius = circle.radius;
}
// Update is called once per frame
void Update (){
if (clickedOn)
Dragging();
if (spring != null){
if (!GetComponent<Rigidbody2D>().isKinematic && prevVelocity.sqrMagnitude > GetComponent<Rigidbody2D>().velocity.sqrMagnitude){
Destroy(spring);
GetComponent<Rigidbody2D>().velocity = prevVelocity;
}
if (!clickedOn)
prevVelocity = GetComponent<Rigidbody2D>().velocity;
LineRendererUpdate();
}
else
{
catapultLineFront.enabled = false;
catapultLineBack.enabled = false;
}
}
void LineRendererSetup()
{
catapultLineFront.SetPosition(0, catapultLineFront.transform.position);
catapultLineBack.SetPosition(0, catapultLineBack.transform.position);
catapultLineFront.sortingLayerName = "Foreground";
catapultLineBack.sortingLayerName = "Foreground";
catapultLineFront.sortingOrder = 3;
catapultLineBack.sortingOrder = 1;
}
void OnMouseDown()
{
spring.enabled = false;
clickedOn = true;
}
void OnMouseUp()
{
spring.enabled = true;
GetComponent<Rigidbody2D>().isKinematic = false;
clickedOn = false;
}
void Dragging()
{
Vector3 mouseWorldPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 catapultToMouse = mouseWorldPoint - catapult.position;
if (catapultToMouse.sqrMagnitude > maxStretchSqr)
{
rayToMouse.direction = catapultToMouse;
mouseWorldPoint = rayToMouse.GetPoint(maxStretch);
}
mouseWorldPoint.z = 0f;
transform.position = mouseWorldPoint;
}
void LineRendererUpdate()
{
Vector2 catapultToProjectile = transform.position - catapultLineFront.transform.position;
leftCatapultToProjectile.direction = catapultToProjectile;
Vector3 holdPoint = leftCatapultToProjectile.GetPoint(catapultToProjectile.magnitude + circleRadius);
catapultLineFront.SetPosition(1, holdPoint);
catapultLineBack.SetPosition(1, holdPoint);
}
Comment
Hello, I am actually creating a game that is similar to angry birds. When I hold and release the catapult, the asteroid on the catapult will be shooting towards the direction I'm ai$$anonymous$$g. However, I can only let it shoot once, not more than once. I think there's a problem with my asteroid code which I displayed it at the top. When I shoot once, it will go back to the catapult after hitting. But then, I couldn't move it anymore.
Really hope someone can help out as this is rather urgent.. Thank you!