# Fruit Cannon Drag the ball to push fruits into corresponding contours ![[DESIGNS/TOYS/FruitCannon.gif]] ## Code #### Cannon Controller ```cs using System.Collections; using System.Collections.Generic; using UnityEngine; public class DrNDr_III_Cannon : MonoBehaviour { public List<GameObject> fruitsList = new List<GameObject>(); public Vector2 forceVector = new Vector3(5, 5); public Transform firePosition; private void Start() { InvokeRepeating("ShootFruits", 0, 2); } private void ShootFruits() { int fruitIndex = Random.Range(0, fruitsList.Count); GameObject fruit = Instantiate(fruitsList[fruitIndex], firePosition.position, Quaternion.identity); fruit.name = fruitsList[fruitIndex].name; fruit.GetComponent<Rigidbody2D>().AddForce( forceVector, ForceMode2D.Impulse); } } ``` #### Ball Dragger ```cs using System.Collections; using System.Collections.Generic; using UnityEngine; public class DrNDr_III_Football : MonoBehaviour { private bool isDragged; private void OnMouseDown() { isDragged = true; } private void OnMouseUp() { isDragged = false; } private void DragObject() { if (isDragged) { Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position; transform.Translate(mousePos); } } private void Update() { DragObject(); } } ``` #### UI Controller ```cs using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; public class DrNDr_III_UI : MonoBehaviour { public TMP_Text pearCounter; public TMP_Text bananaCounter; public TMP_Text grapesCounter; private int pearNum; private int bananaNum; private int grapesNum; public void UpdateCounter(string fruitName) { if (fruitName == "Pear") pearNum++; if (fruitName == "Banana") bananaNum++; if (fruitName == "Grape") grapesNum++; DisplayUpdatedUI(); } public void DisplayUpdatedUI() { pearCounter.text = pearNum.ToString(); bananaCounter.text = bananaNum.ToString(); grapesCounter.text = grapesNum.ToString(); } } ```