1. svn -> git
This commit is contained in:
108
Assets/DO_Studio/D2D_DragToShoot_obi.cs
Normal file
108
Assets/DO_Studio/D2D_DragToShoot_obi.cs
Normal file
@@ -0,0 +1,108 @@
|
||||
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<Rigidbody2D>();
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 마우스가 내려간 오브젝트를 가지고 옵니다.
|
||||
/// </summary>
|
||||
/// <returns>선택된 오브젝트</returns>
|
||||
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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user