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 } }
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; } }
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; } }
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; //이벤트 실행 } } } }