2013. 6. 26. 14:52

이전 글에서 취생몽사님 께서 만드신 샘플을 약간만 수정하면 스크립트가 적용된 오브젝트를 클릭한 효과를 구현 할 수 있습니다.

(참고 : [Unity] 오브젝트 드래그 하기)


1. 코드

이전 코드와 달라진 것은 스크립트가 들어 있는 오브젝트와 클릭판정을 받은 오브젝트가 같은지 확인하는 코드가 추가됩니다.

 

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; 
    } 
} 

테스트용으로 클릭 되면 스케일을 조절했습니다.



2. 테스트
큐브를 추가하고 스크립트를 추가합니다.