コード例 #1
0
    void Update()
    {
        if (currentPlayer < 0)
        {
            currentPlayer = 0;
        }


        // 모든 플레이어의 숫자 확인
        if (currentPlayer != previousPlayer)
        {
            // 다른 플레이어가 입장했을때
            if (currentPlayer > previousPlayer)
            {
                // 적당한 위치에 놓고
                rpc.transform.position = spawnPoint.position;

                // 활성화
                rpc.SetActive(true);

                // 상태 전환하기
                rpc_A = rpc_State.GetCloser;
            }

            // 다른 플레이어가 빠져나갔을때
            if (currentPlayer < previousPlayer)
            {
                // 플레이어에게 접근 취소
                rpc_A = rpc_State.TakePhoto;
            }

            // 이전 플레이어 수 동기화
            previousPlayer = currentPlayer;
        }

        // RPC를 플레이어에게 접근시키기
        switch (rpc_A)
        {
        case rpc_State.GetCloser:
            Approach();
            break;

        case rpc_State.TakePhoto:
            GSManager.Take_A_Photo();

            // 반복 안 하게 enum 바꿔주기
            rpc_A = rpc_State.None;
            break;

        case rpc_State.GetAway:
            RunAway();
            break;
        }
    }
コード例 #2
0
    // 플레이어에게 접근하기!!
    void Approach()
    {
        // 타겟과의 거리가 일정 거리 이상이면 접근하고, 일정 거리 미만이면 그만 접근하기
        float distance = Vector3.Distance(playerObj.position, rpc.transform.position);

        if (distance >= 3f)
        {
            rpc.transform.position = Vector3.Lerp(rpc.transform.position, playerObj.position, approachSpeed * Time.deltaTime);
        }
        else
        {
            rpc.transform.SetParent(follower);
            // 그만 접근하기
            rpc_A = rpc_State.Stay;
            GSManager.currentScene = GameSceneManager.Scenes.MatchFound;
        }
    }
コード例 #3
0
    void Start()
    {
        GSManager = GameSceneManager.Instance;
        // 다른 플레이어 캐릭터 만들어두기
        for (int i = 0; i < MaxRPCs; i++)
        {
            // 1. 다른 플레이어의 캐릭터를 만들어서,
            rpc = Instantiate(RPC_prefab);

            // 2. 비활성화하기
            rpc.SetActive(false);
        }

        // 오브젝트 가져오기
        playerObj = GSManager.player.transform;
        follower  = GameObject.FindGameObjectWithTag("Respawn").transform;


        rpc_A = rpc_State.None;
    }
コード例 #4
0
    void RunAway()
    {
        // 탈출 포인트 가져오기
        Transform leavePoint = follower.GetChild(1);

        // 타겟과의 거리가 일정 거리 이상이면 접근하고, 일정 거리 미만이면 비활성화하기
        float distance = Vector3.Distance(leavePoint.position, rpc.transform.position);

        if (distance >= 2f)
        {
            rpc.transform.position = Vector3.Lerp(rpc.transform.position, leavePoint.position, approachSpeed * Time.deltaTime);
        }
        else
        {
            Prefab_Float rpcPF = rpc.GetComponentInChildren <Prefab_Float>();
            rpcPF.EndFloating();
            rpc.transform.SetParent(null);
            rpc.SetActive(false);

            // 그만 접근하기
            rpc_A = rpc_State.None;
            GSManager.currentScene = GameSceneManager.Scenes.FindMatch;
        }
    }