[개발일지] 나폴리탄스파게티 20230530

2023. 6. 9. 17:312학년 1학기 프로젝트

 


게임상의 시간 구현

실제 3초가 게임상 시간으로는 1분

이를 UI통해 나타냄

public class TimeController : MonoBehaviour
{
    float gameTime = 3.0f; // 게임상의 시간을 계산 (실제 3초 = 게임속 1분)
    float updateTime = 0.0f; //게임상 시간을 계산하기 위해 실제 시간 데이터를 담은 변수
    public int timeHour = 00; //분
    public int timeMinute = 00; //초
    public Text timeText; //시간을 나타내는 Text UI변수

    void Start()
    {
        // 시작시 시각 00:00
        timeText.text = (timeHour.ToString("00") +" : "+ timeMinute.ToString("00"));
    }

    void Update()
    {
        // 시간 계산 및 Text UI로 띄우기
        if(updateTime > gameTime) // 3초가 지나면 1분을 더함
        {
            updateTime = 0.0f;
            timeMinute ++;

            if(timeMinute > 59) // 60분이 지나면 1시간을 더함
            {
                timeHour ++;
                timeMinute = 0;
            }

            // 00:00형태로 시간을 나타냄
            timeText.text = (timeHour.ToString("00") +" : "+ timeMinute.ToString("00")); 
        }
        else
        {
            updateTime += Time.deltaTime;
        }
    }
}

 


조각상 구현

콜라이더를 사용해 특정 범위 내에 플레이어가 인식될 경우 플레이어를 바라봄

public class Statue : MonoBehaviour
{
    public GameObject playerObject; //PlayerObject
    
    Transform playerTransform; //PlayerObject의 위치 정보를 담을 변수
    Vector3 target; //조각상이 바라볼 Vector3정보를 담을 변수

    void Start()
    {
        playerTransform = playerObject.transform;
    }

    // 조각상이 범위 내에 들어왔을 때만 바라보도록 함
    void OnTriggerStay(Collider collision)
    {
        if(collision.tag == "Player")
        {
            target = new Vector3(playerTransform.position.x, transform.position.y, playerTransform.position.z);
            transform.LookAt(target);
        }
    }
}

 


조명 색상 변경 효과 구현

TimeController와 연동하여 게임상의 시간이 04:44가 되면 조명이 붉은색으로 변경됨

public class LightController : MonoBehaviour
{
    public GameObject timeControllerObj;
    Light lights;
    TimeController timeController;
    void Start()
    {
        lights = GetComponent<Light>();
        timeController = timeControllerObj.GetComponent<TimeController>();
    }

    void Update()
    {   
        // 04:44분이 되면 조명 색상 붉은 색으로 변경
        if(timeController.timeHour == 4)
            {
                if(timeController.timeMinute == 44)
                {
                    lights.color = Color.red;
                }
                // 04:44이 지나면 조명이 원래 색상으로 돌아옴
                else
                {
                    lights.color = Color.white;
                }
            }
    }
}

 


CCTV및 관련 이벤트 구현

CCTV에 시체 오브젝트가 생길 경우 모니터를 재부팅하여 사라지게 함

재부팅하지 않고 시체가 있는 공간으로 갈 경우 이벤트 발생

public class CCTVevent : MonoBehaviour
{
    public GameObject timeControllerObj;
    public GameObject deadBodyObject;
    public GameObject CCTVmonitor;

    Renderer monitorRenderer;
    TimeController timeController;

    void Start()
    {
        deadBodyObject.SetActive(false);
        timeController = timeControllerObj.GetComponent<TimeController>();
        monitorRenderer = CCTVmonitor.GetComponent<Renderer>();
    }

    void Update()
    {
        // 00:01에 시체 오브젝트가 생기는 이벤트 작동(임시)
        if(timeController.timeHour == 0)
            {
                if(timeController.timeMinute == 1)
                {
                    deadBodyObject.SetActive(true);
                }
            }

		// T를 누를 경우 CCTV 재부팅 (임시)
        if(Input.GetKeyDown("t"))
        {
            Debug.Log("재부팅");
            monitorRenderer.material.SetColor("_Color", Color.black);
            Invoke("MonitorOn", 3f);
        }
    }

    // 모니터가 다시 켜짐
    void MonitorOn()
    {
        monitorRenderer.material.SetColor("_Color", Color.white);
        
        //모니터를 재부팅 할 경우 시체가 사라짐
        deadBodyObject.SetActive(false);
    }

	// 플레이어가 모니터를 재부팅하지 않고 시체가 있는 장소에 갈 경우 이벤트 발생
    void OnTriggerStay(Collider collision)
    {
        if(collision.tag == "Player")
        {
            Debug.Log("Event");
        }
    }
}