Пример #1
0
    public void ride_car_Update()
    {
        //상하만 요청함.

        //back
        if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            transform.rotation = Quaternion.Euler(.0f, .0f, 180.0f);

            directionX = 0;
            directionY = 1;

            str_Sound_mag.PlayEffect(8);
            move_speed = 3.0f;
        }

        //front
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            transform.rotation = Quaternion.Euler(.0f, .0f, .0f);

            directionX = 0;
            directionY = 1;

            str_Sound_mag.PlayEffect(8);
            move_speed = 3.0f;
        }

        if (move_speed >= .0f)
        {
            move_speed -= 1.0f * Time.deltaTime;
        }
        else
        {
            move_speed = 0;
        }

        //자동차가 방향키를 손에서 때면 서서히 멈추게 끔 하기를 기획자가 요구함.
        transform.Translate(new Vector3(directionX, directionY, 0) * Time.deltaTime * move_speed);


        ////////////////////////////////////이동관련////////////////////////////////////////////////

        if (transform.position.y >= -3.3f)
        {
            str_Game_Mag.char_update     = false; //충돌하면 사람은 움직일 필요없고.
            str_Game_Mag.ride_car_update = false; //차량도 움직일 필요없음.
            str_Game_Mag.ride_car_Evnet  = true;  //매니저에서 이벤트 loop
        }
    }
Пример #2
0
    public void Character_Update()
    {
        if (char_on == true)
        {
            float h = Input.GetAxisRaw("Horizontal");
            float v = Input.GetAxisRaw("Vertical");

            walking = true;

            //right
            if (h > 0)
            {
                directionX = 1;
                directionY = 0;
                wall_check[0].transform.position = new Vector3(transform.position.x + 0.5f,
                                                               transform.position.y,
                                                               transform.position.z);
            }//left
            else if (h < 0)
            {
                directionX = -1;
                directionY = 0;
                wall_check[0].transform.position = new Vector3(transform.position.x - 0.5f,
                                                               transform.position.y,
                                                               transform.position.z);
            }//front
            else if (v > 0)
            {
                directionX = 0;
                directionY = 1;
                wall_check[0].transform.position = new Vector3(transform.position.x,
                                                               transform.position.y + 1.1f,
                                                               transform.position.z);
            }//back
            else if (v < 0)
            {
                directionX = 0;
                directionY = -1;
                wall_check[0].transform.position = new Vector3(transform.position.x,
                                                               transform.position.y - 1.1f,
                                                               transform.position.z);
            }
            else
            {
                str_sound_mag.PlayEffect(7);
                walking = false;
            }

            if (walking)
            {
                transform.Translate(new Vector3(directionX, directionY, 0) * Time.deltaTime * C_speed);
            }

            animator.SetFloat("DirectionX", directionX);
            animator.SetFloat("DirectionY", directionY);
            animator.SetBool("Walking", walking);
        }

        c_move = Physics2D.Linecast(transform.position, wall_check[0].transform.position, 1 << LayerMask.NameToLayer("Wall"));

        //캐릭터 벽과 충돌 처리 예외처리.
        if (c_move)
        {
            C_speed = .0f;
        }
        else
        {
            C_speed = 2.0f;
        }
    }
Пример #3
0
    public void character_event(Event_ event_)
    {
        //랜덤에 쓰일 변수.
        float x_value = .0f;
        float y_value = .0f;

        switch (event_)
        {
        //차에 타고있다가 차에 치였을 경우.
        case Event_.ride_car:
        {
            //충돌차량 생성.
            dump_car_create(str_ride_car.transform);

            if (car_dis >= 2.5f)
            {
                if (GameObject.Find("dump_car(Clone)"))
                {
                    GameObject Dump_car = GameObject.Find("dump_car(Clone)");
                    car_dis = Vector2.Distance(str_ride_car.transform.position, Dump_car.transform.position);
                    Dump_car.transform.Translate(car_dir * (dump_speed * Time.deltaTime));
                }
            }
            else
            {
                //충돌 폭파 실행. 프리팹 생성 1회실행
                if (car_attack == false)
                {
                    //충돌 사운드 실행
                    str_sound_mag.PlayEffect(1);

                    //충돌 이미지 변경.
                    str_ride_car.transform.GetComponent <SpriteRenderer>().sprite = damage_car;

                    //폭파 이미지 생성
                    Instantiate(explosion_car, boom_car.transform.position, boom_car.transform.rotation);

                    //true가 되는순간 충돌차량은 뒤로 밀려남.
                    car_attack = true;
                }
            }

            ///////////////////////////////////여기 까지는 충돌 차량 설정///////////////////////////////////

            if (car_speed >= 0 && car_attack == true)
            {
                //speed * time = 거리.
                str_ride_car.transform.Translate(Vector2.up * (car_speed * Time.deltaTime));
                str_ride_car.transform.Rotate(0, 0, car_roll * Time.deltaTime);
                car_speed -= 3 * Time.deltaTime;

                if (car_speed <= 0)
                {
                    //불나게 카툰 렌더
                    fire_car.GetComponent <ParticleSystemRenderer>().enabled = true;
                    Instantiate(fire_car, burning_car.transform.position, burning_car.transform.rotation);

                    //엔딩화면 호출
                    StartCoroutine(end_ing(1));
                }
            }
            break;
        }

        case Event_.cross_line:
        {
            //충돌 차량 생성
            dump_car_create(str_char.transform);

            if (car_dis >= 2.4f)
            {
                if (crash_human == false)
                {
                    crash_human = true;
                    str_sound_mag.PlayEffect(2);
                }
                if (GameObject.Find("dump_car(Clone)"))
                {
                    GameObject Dump_car = GameObject.Find("dump_car(Clone)");
                    car_dis = Vector2.Distance(str_char.transform.position, Dump_car.transform.position);
                    Dump_car.transform.Translate(car_dir * (dump_speed * Time.deltaTime));
                }
            }
            else if (car_dis <= 2.4f)
            {
                if (GameObject.Find("Player"))
                {
                    str_char.animator.enabled = false;
                    GameObject.Find("Player").GetComponent <SpriteRenderer>().sprite = blood_[1];
                }
                //true가 되는순간 캐릭터 파편 실행
                car_attack = true;
            }

            if (dir_p_set == false)
            {
                //y만 랜덤이고 x는 일정 간격.
                x_value = -1.0f;
                y_value = .0f;

                for (int i = 0; i < 4; i++)
                {
                    x_value += 0.5f;
                    y_value  = Random.Range(0.5f, 2.0f);

                    player_p_dir[i].transform.position = new Vector3(str_char.transform.localPosition.x + x_value,
                                                                     str_char.transform.localPosition.y + y_value,
                                                                     str_char.transform.localPosition.z - 2);
                }
                dir_p_set = true;
            }
            if (car_attack == true)
            {
                dir_character_p(0);         //파편 이동함수.
            }
            break;
        }

        case Event_.trash:
        {
            x_value = 0f;
            y_value = 0f;

            steel_down();

            if (dir_p_set == false && steel_attack == true)
            {
                for (int i = 0; i < 4; i++)
                {
                    if (i == 0)
                    {
                        x_value = Random.Range(.0f, -1.2f);
                        y_value = Random.Range(.0f, 1.2f);
                    }
                    else if (i == 1)
                    {
                        x_value = Random.Range(.0f, 1.2f);
                        y_value = Random.Range(.0f, 1.2f);
                    }
                    else if (i == 2)
                    {
                        x_value = Random.Range(.0f, -1.2f);
                        y_value = Random.Range(.0f, -1.2f);
                    }
                    else if (i == 3)
                    {
                        x_value = Random.Range(.0f, 1.2f);
                        y_value = Random.Range(.0f, -1.2f);
                    }

                    player_p_dir[i].transform.position = new Vector3(str_char.transform.localPosition.x + x_value,
                                                                     str_char.transform.localPosition.y + y_value,
                                                                     str_char.transform.localPosition.z - 2.0f);
                }
                dir_p_set = true;
            }
            if (steel_attack == true)
            {
                dir_character_p(3);         //파편 이동함수.
            }
            break;
        }

        case Event_.sunstroke:
        {
            //아이스크림을 일정 높이까지 갔는데 먹지 않을경우 캐릭터가 죽는.
            if (str_Game_mag.ice_cream == false)
            {
                if (str_char.transform.position.x <= -3.06f && str_char.transform.position.y >= 6.0f)
                {
                    //캐릭터 죽음
                    str_Game_mag.char_update = false;
                    GameObject.Find("Player").GetComponent <Animator>().enabled = false;
                    str_char.transform.rotation = Quaternion.Euler(.0f, .0f, 90f);

                    //캐릭터한테 불붙임.
                    if (crash_human == false)         //다른 이벤트 조건에서 사용되는 1회용bool인데 중복이 되지 않음으로 가져와 썻는데 다음에는 무언가 공통적으로 쓸수있게끔 변수명을 붙여 줘야겠다.
                    {
                        crash_human = true;
                        Instantiate(fire_char, str_char.transform.position, transform.rotation);
                    }

                    StartCoroutine(end_ing(2));
                }
            }
            break;
        }

        default:
            return;
        }
    }
Пример #4
0
    void Update()
    {
        Event_loop();

        //타 클래스 업데이트.
        str_Event_Mag.Event_Update();
        str_Camera_Mag.Camera_Update();

        //플레이어 오브젝트와 자동차 오브젝트의 거리 계산.
        c_distance = Vector2.Distance(str_Character.transform.position, str_ride_car.transform.position);
        //플레이어 오브젝트와 쓰래기통의 거리 계산.
        t_distance = Vector2.Distance(str_Character.transform.position, obj_trash.transform.position);

        //거리에 따라 true 와 false를 update해주는.
        car_check = if_check(c_distance);

        //쓰래기통.
        trash_check = if_check(t_distance);

        //캐릭터가 ON일 경우.
        if (char_update == true)
        {
            str_Character.Character_Update();

            //camera set
            str_Camera_Mag.player_camera_set(str_Character.transform);
        }
        //자동차가 ON일 경우.
        if (ride_car_update == true)
        {
            str_ride_car.ride_car_Update();

            //camera set
            str_Camera_Mag.player_camera_set(str_ride_car.transform);
        }

        if (Input.anyKeyDown)
        {
            if (GameObject.Find("how_to_play"))
            {
                GameObject how = GameObject.Find("how_to_play");
                Destroy(how);
                if (Input.GetKeyDown(KeyCode.F))
                {
                    return;
                }
            }
        }

        if (Input.GetKeyDown(KeyCode.F) && F_key_ == true)
        {
            //쓰래기 버리는 체크.
            if (trash_check)
            {
                //아이스크림을 안 먹었을경우.
                if (GameObject.Find("Player_ice_cream") && ice_cream == false)
                {
                    ice_cream             = true;
                    spriteRenderer.sprite = sprite_trash_con;

                    //ice_cream_eat_effect
                    AudioSource.PlayClipAtPoint(Effect_Audio[0], transform.position);

                    return;
                }

                if (GameObject.Find("Player_ice_cream"))
                {
                    GameObject trash = GameObject.Find("Player_ice_cream");
                    Destroy(trash);
                    steel_down = true;
                    //변경된 텍스쳐 지워주는걸로.
                }
                shoot_ = false; //쓰래기를 버렸으니 던지지 못하게.
                return;         //조건이 맞으면 밖으로 나가야함 쓰래기 던지는 조건 때문에.
            }

            if (ride_car_update == false)
            {
                //거리 1.0f보다 작을 경우.
                if (car_check)
                {
                    //차를 탑승.
                    str_Character.GetComponent <Renderer>().enabled = false;

                    //car_ride effect sound
                    str_sound_Mag.PlayEffect(5);

                    //업데이트 교환.
                    ride_car_update = true;
                    char_update     = false;

                    eat_ice_cream = false;
                    return;
                }
            }
            else
            {
                AudioSource.PlayClipAtPoint(Effect_Audio[2], transform.position);
                //차에서 내림
                str_Character.GetComponent <Renderer>().enabled = true;

                //캐릭터가 차량에서 내릴경우 시작할 위치.
                str_Character.transform.position = new Vector3(str_ride_car.transform.position.x + 1.0f,
                                                               str_ride_car.transform.position.y,
                                                               str_ride_car.transform.position.z);
                eat_ice_cream   = true;
                ride_car_update = false;
                char_update     = true;

                return;
            }

            //아이스크림 먹는 체크.
            if (GameObject.Find("Player_ice_cream") && eat_ice_cream == true && ice_cream == false)
            {
                ice_cream = true; //위에 쓰래기통 앞에서 안먹엇을경우와 길가다 먹는 경우를 구분하기 위해서.

                //ice_cream_eat_effect
                AudioSource.PlayClipAtPoint(Effect_Audio[0], transform.position);

                spriteRenderer.sprite = sprite_trash_con;
                shoot_ = true;
                return;
            }

            if (shoot_ == true)
            {
                //아이콘에 있던 쓰래기 콘을 없애주고
                if (GameObject.Find("Player_ice_cream"))
                {
                    GameObject trash = GameObject.Find("Player_ice_cream");
                    Destroy(trash);
                }
                //프리팹 콘 생성
                Instantiate(trash_con, str_Character.transform.position, str_Character.transform.rotation);

                GameObject C_trash_con = GameObject.Find("trash_con(Clone)");
                dir_con = (str_Character.wall_check[0].transform.position - C_trash_con.transform.position).normalized;

                trash_shoot_ = true;
                shoot_       = false;
            }
        }

        if (trash_shoot_ == true)
        {
            if (GameObject.Find("trash_con(Clone)"))
            {
                GameObject C_trash_con = GameObject.Find("trash_con(Clone)");

                //던졋을때 쓰래기와 쓰래기통의 거리를 비교하기 위해서.
                float trash_shoot_dis = Vector2.Distance(obj_trash.transform.position, C_trash_con.transform.position);

                if (trash_dis >= .0f)
                {
                    C_trash_con.transform.Translate(dir_con * (8.0f * Time.deltaTime));
                    trash_dis -= 0.2f;
                }
                else if (trash_shoot_dis <= 1.0f)
                {
                    AudioSource.PlayClipAtPoint(Effect_Audio[1], transform.position);

                    steel_down = true;
                    Destroy(C_trash_con);
                }
                else if (trash_shoot_dis >= 1.0f)
                {
                    //trash_effect
                    AudioSource.PlayClipAtPoint(Effect_Audio[1], transform.position);

                    char_update  = false; //못움직이게
                    trash_shoot_ = false; //루프 안돌게
                    trash_Event  = true;  //이벤트 실행
                }
            }
        }
    }