이전 글에서 취생몽사님 께서 만드신 샘플을 약간만 수정하면 스크립트가 적용된 오브젝트를 클릭한 효과를 구현 할 수 있습니다.
(참고 : [Unity] 오브젝트 드래그 하기)
이전 코드와 달라진 것은 스크립트가 들어 있는 오브젝트와 클릭판정을 받은 오브젝트가 같은지 확인하는 코드가 추가됩니다.
using UnityEngine;
using System.Collections;
public class claMouseClick : MonoBehaviour
{
Camera _mainCam = null;
/// <summary>
/// 마우스의 상태
/// </summary>
private bool _mouseState;
/// <summary>
/// 마우스가 다운된 오브젝트
/// </summary>
private GameObject target;
/// <summary>
/// 마우스 좌표
/// </summary>
private Vector3 MousePos;
//4.x 버전에서는 'void Start()'로 바꿔 주세요.
void Awake()
{
_mainCam = Camera.main;
}
// Update is called once per frame
void Update ()
{
//마우스가 내려갔는지?
if ( true == Input.GetMouseButtonDown(0))
{
//내려갔다.
//타겟을 받아온다.
target = GetClickedObject();
//타겟이 나인가?
if ( true == target.Equals(gameObject))
{
//있으면 마우스 정보를 바꾼다.
_mouseState = true;
}
}
else if ( true == Input.GetMouseButtonUp(0))
{
//마우스가 올라 갔다.
//마우스 정보를 바꾼다.
_mouseState = false;
}
//마우스가 눌렸나?
//스케일을 조절하여 클릭됬음을 확인한다.
if (true == _mouseState)
{
//눌렸다!
transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
}
else
{
transform.localScale = new Vector3(1f, 1f, 1f);
}
}
/// <summary>
/// 마우스가 내려간 오브젝트를 가지고 옵니다.
/// </summary>
/// <returns>선택된 오브젝트</returns>
private GameObject GetClickedObject()
{
//충돌이 감지된 영역
RaycastHit hit;
//찾은 오브젝트
GameObject target = null;
//마우스 포이트 근처 좌표를 만든다.
Ray ray = _mainCam.ScreenPointToRay(Input.mousePosition);
//마우스 근처에 오브젝트가 있는지 확인
if( true == (Physics.Raycast(ray.origin, ray.direction * 10, out hit)))
{
//있다!
//있으면 오브젝트를 저장한다.
target = hit.collider.gameObject;
}
return target;
}
}
테스트용으로 클릭 되면 스케일을 조절했습니다.