이전 글에서 취생몽사님 께서 만드신 샘플을 약간만 수정하면 스크립트가 적용된 오브젝트를 클릭한 효과를 구현 할 수 있습니다.
(참고 : [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; } }
테스트용으로 클릭 되면 스케일을 조절했습니다.