MoveCtrl.cs 3.33 KB
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class MoveCtrl : MonoBehaviour {

	public enum MoveType
    {
        WAY_POINT,
        LOOK_AT,
        DAYDREAM
    }


    public GameObject UIManager;
    GameObject controller_R;
    public MoveType moveType = MoveType.WAY_POINT; // 이동 방식
    public float speed = 1.0f;                     // 이동 속도
    public float damping = 3.0f;                   // 회전 속도를 조절할 계수
    private Transform tr;
    private Transform camTr;
    private CharacterController cc;
    private Transform[] points;                    // 웨이포인트를 저장할 배열
    private int nextIdx = 1;                       // 다음에 이동해야 할 위치 변수
    private static GameObject apple;
    public static bool isStopped = false;

    void Start()
    {
        tr = GetComponent<Transform>();
        camTr = Camera.main.GetComponent<Transform>();
        cc = GetComponent<CharacterController>();
        points = GameObject.Find("WayPointGroup2").GetComponentsInChildren<Transform>();
        apple = GameObject.Find("사과4");
        controller_R = GameObject.Find("Controller (right)");

    }

    void Update()
    {
        if (isStopped)
            return;

        switch(moveType)
        {
            case MoveType.WAY_POINT:
                MoveWayPoint();
                break;

            case MoveType.LOOK_AT:
                MoveLookAt();
                break;

            case MoveType.DAYDREAM:
                break;
        }
    }

    void MoveWayPoint()
    {
        // 현재 위치에서 다음 웨이포인트를 바로보는 벡터를 계산
        Debug.Log(nextIdx.ToString());
        if (nextIdx < points.Length)
        {
            Vector3 direction = points[nextIdx].position - tr.position;
            // 산출된 벡터의 회전 각도를 쿼터니언 타입으로 산출
            Quaternion rot = Quaternion.LookRotation(direction);
            // 현재 각도에서 회전해야 할 각도까지 부드럽게 회전 처리
            tr.rotation = Quaternion.Slerp(tr.rotation, rot, Time.deltaTime * damping);

            // 전진 방향으로 이동 처리
            tr.Translate(Vector3.forward * Time.deltaTime * speed);
        }

    }

    void MoveLookAt()
    {
        // 메인카메라가 바라보는 방향
        Vector3 dir = camTr.TransformDirection(Vector3.forward);
        // dir 벡터의 방향으로 초당 speed만큼씩 이동
        cc.SimpleMove(dir * speed);
    }

    void OnTriggerEnter(Collider coll)
    {
        Debug.Log(coll.name);
        // 웨이포인트(Point 게임오브젝트)에 충돌 여부 판단
        if(coll.CompareTag("WAY_POINT"))
        {
            // 맨 마지막 웨이포인트에 도달했을 때 처음 인덱스로 변경
            if (nextIdx < points.Length){
                nextIdx++;
            }
           
        }

        else if(coll.name== "rpgpp_lt_tree_pine_01")
        {
            if (apple.activeSelf == true)
            {
                apple.SetActive(false);
                Debug.Log(apple.activeSelf);
                SceneManager.LoadScene("IntervalTraining");
            }
        }

        else if (coll.CompareTag("NPC"))
        {
            Debug.Log("NPC");
        }


    }
}