Question by
Ulluses · Jun 27, 2017 at 03:29 PM ·
arraysif-statementsadvicedragrigidbody
Getting Component In An Array To Add To An Array
I have a working script for dragging around solo objects through a scene, it works alright but I need to allow the player to drag objects that overlap their selection zone. I'm still a learning programmer but I figure I need two arrays, I need to add all the parent objects to an array of viruses and then get the spring joint 2ds of all the parent objects in that array and then add them to a second array and set the connected anchor of each spring joint 2d to the input position.
I haven't used arrays much so I'd appreciate any insight to the construction of this logic, am I on the right path? Do I need two arrays? What would be the best way to do it?
[SerializeField] private SpringJoint2D DragSpringJoint;
[SerializeField] private SpringJoint2D[] DragSpringJoints;
[SerializeField] private GameObject ActiveVirus;
[SerializeField] private GameObject[] ActiveViruses;
[SerializeField] private bool IsDragging;
void Start ()
{
}
void Update()
{
DragVirus();
}
// Drags a virus around by it's spring joint
public void DragVirus()
{
// Updates the mouse position every frame
Vector3 inputPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
// If the player isn't already dragging and uses the left mouse button
if (Input.GetMouseButtonDown(0) && !IsDragging)
{
// Creates a ray from the camera through a matrix into mouse position
Ray ray = Camera.main.GetComponent<Camera>().ScreenPointToRay(Input.mousePosition);
// Gets the hit object
RaycastHit2D hit = Physics2D.Raycast(ray.origin, ray.direction, Mathf.Infinity);
// If the clicked object is a virus object or it's selection zome
if (hit.rigidbody.gameObject.tag == "Virus" || hit.rigidbody.gameObject.tag == "VirusZone")
{
// Declares the active virus for dragging
ActiveVirus = hit.transform.gameObject;
// Declares the dragging spring joint to be the active virus' spring joint
DragSpringJoint = ActiveVirus.GetComponent<SpringJoint2D>();
// Enables the spring joint
DragSpringJoint.enabled = true;
// Toggles the draggin bool
IsDragging = true;
}
}
// The above logic carries through to this statement by enabling IsDragging
if (Input.GetMouseButton(0) && IsDragging)
{
// Sets the anchor point for the spring joint to the mouse position
DragSpringJoint.connectedAnchor = inputPosition;
}
// If the player stops dragging then it flows from the previous statement to this one
if (Input.GetMouseButtonUp(0) && IsDragging)
{
// Turns off the spring joint
DragSpringJoint.enabled = false;
// Sets the spring joint back to it's default value
DragSpringJoint = null;
// Sets the active virus back to none
ActiveVirus = null;
// Resets the dragging bool back to false ready for a new drag
IsDragging = false;
}
}
Comment