using UnityEngine; [AddComponentMenu("Destructible 2D/D2D Drag To Shoot")] public class D2D_DragToShoot_obi : MonoBehaviour { public GameObject Bullet; public float Power = 3.0f; public float AngleOffset; public float AngleRandomness; public SpriteRenderer Indicator; private bool down; public GameObject startFirePosition = null; // Use this for initialization void Start() { if (Indicator != null) Indicator = Instantiate(Indicator); } protected virtual void Update() { // End dragging? if (Input.GetMouseButton(0) == false && down == true) { down = false; // Fire? if (Camera.main != null && Bullet != null) { var endMousePosition = Input.mousePosition; //var startPos = Camera.main.ScreenToWorldPoint(startMousePosition); var startPos = startFirePosition.transform.position; var endPos = Camera.main.ScreenToWorldPoint(endMousePosition); var vec = endPos - startPos; var angle = D2D_Helper.Atan2(vec) * -Mathf.Rad2Deg + AngleOffset + Random.Range(-0.5f, 0.5f) * AngleRandomness; var clone = D2D_Helper.CloneGameObject(Bullet, null, startPos, Quaternion.Euler(0.0f, 0.0f, angle)); var cloneRb2D = clone.GetComponent(); if (cloneRb2D != null) { cloneRb2D.velocity = (startPos - endPos) * Power; } } } // Show dragging? if (Indicator != null) { Indicator.enabled = down; if (Camera.main != null && down == true) { var currentMousePosition = Input.mousePosition; //var startPos = Camera.main.ScreenToWorldPoint( startMousePosition); var startPos = startFirePosition.transform.position; var currentPos = Camera.main.ScreenToWorldPoint(currentMousePosition); var scale = Vector3.Distance(currentPos, startPos); var angle = D2D_Helper.Atan2(currentPos - startPos) * Mathf.Rad2Deg; //Indicator.transform.position = Camera.main.ScreenToWorldPoint(startMousePosition); Indicator.transform.position = startFirePosition.transform.position; Indicator.transform.localRotation = Quaternion.Euler(180.0f, 0.0f, angle); Indicator.transform.localScale = new Vector3(scale, scale, scale); } } } void OnMouseDown() { if (Input.GetMouseButton(0) == true && startFirePosition != null) { down = true; } } /// /// 마우스가 내려간 오브젝트를 가지고 옵니다. /// /// 선택된 오브젝트 private GameObject GetClickedObject() { //충돌이 감지된 영역 RaycastHit hit; //찾은 오브젝트 GameObject target = null; //마우스 포이트 근처 좌표를 만든다. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //마우스 근처에 오브젝트가 있는지 확인 if (true == (Physics.Raycast(ray.origin, ray.direction * 10, out hit))) { //있다! //있으면 오브젝트를 저장한다. target = hit.collider.gameObject; } return target; } }