/// <summary> /// 与えられた引数の一つ下に床があるか調べる処理 /// </summary> /// <param name="ver">縦</param> /// <param name="side">横</param> /// <param name="high">高さ</param> /// <returns>True:床が有る/False:床が無い</returns> public bool Obj_Ground_Check(int ver, int side, int high, GameObject dice_obj) { //落下先が埋まるか、配列の範囲外になるまで繰り返す for (int pointer = high - 1; pointer >= g_zero_Count; pointer--) { //同じ親フラグ初期化 g_same_parent_flag = false; //検索先に埋まっているオブジェクトのタイプ取得 int type = g_game_Con_Script.Get_Obj_Type(ver, side, pointer); //検索先がダイスの時、ダイスが検索用ダイスと同じ階層にあるか調べる if (type == 100) { //検索用ダイスの親オブジェクトを取得 GameObject dice_parent = dice_obj.transform.parent.gameObject; //検索先のダイス取得 GameObject next_dice = g_game_Con_Script.Get_Obj(ver, side, pointer); //検索先のダイスの親オブジェクトを取得 GameObject next_parent = next_dice.transform.parent.gameObject; //ダイスが検索用ダイスと同じ階層にあるか調べる if (dice_parent == next_parent) { //同じならフラグON g_same_parent_flag = true; } } //移動先オブジェクトが空白ではないなら(床があるなら) if (type != 0 && !g_same_parent_flag) { //処理終了 //床がある状態を返す return(true); } } return(false); }
/// <summary> /// ダイスをどれだけ落下させるか調べる処理 /// </summary> private void Fall_Check() { //最小値初期化 g_min_counter = g_min_Start; //ダイスの個数分だけ処理を繰り返す for (int dice_count = g_zero_Count; dice_count < g_work_dices.Length; dice_count++) { g_fall_counter = g_zero_Count; //ダイスのスクリプト取得 g_child_Script = g_work_dices[dice_count].GetComponent <Dice_Squares>(); //ダイスの現在位置取得 (g_dice_ver, g_dice_side, g_dice_high) = g_child_Script.Get_Dice_Pointer(); //落下先が埋まるか、配列の範囲外になるまで繰り返す for (int pointer = g_dice_high - 1; pointer >= g_zero_Count; pointer--) { //同じ親フラグ初期化 g_same_parent_flag = false; //検索先に埋まっているオブジェクトのタイプ取得 int type = g_game_Con_Script.Get_Obj_Type(g_dice_ver, g_dice_side, pointer); //検索先がダイスの時、ダイスが検索用ダイスと同じ階層にあるか調べる if (type >= 100) { //検索用ダイスの親オブジェクトを取得 GameObject dice_parent = g_work_dices[dice_count].transform.parent.gameObject; //検索先のダイス取得 GameObject next_dice = g_game_Con_Script.Get_Obj(g_dice_ver, g_dice_side, pointer); //検索先のダイスの親オブジェクトを取得 GameObject next_parent = next_dice.transform.parent.gameObject; //ダイスが検索用ダイスと同じ階層にあるか調べる if (dice_parent == next_parent) { //同じならフラグON g_same_parent_flag = true; } } //移動先オブジェクトが空白ではないなら(床があるなら) if (type != 0 && !g_same_parent_flag) { //処理終了 break; } //検索先の移動回数+1 g_fall_counter++; } //移動回数が最小値より小さいなら if (g_fall_counter < g_min_counter) { //最小値上書き g_min_counter = g_fall_counter; } } }
public void Dice_Push() { if (g_play_con_Script.Get_MoveFlag()) { return; } //プレイヤーが現在向いている方向を取得 int direction_para = g_direction_Script.Get_Player_Direction(); //プレイヤーの現在のポインター取得 (g_player_ver, g_player_side, g_player_high) = g_play_con_Script.Get_Player_Pointer(); //検索する向きに応じて処理を変える switch (direction_para) { //縦プラス方向 case g_ver_plus_Para: g_player_ver = g_player_ver + 1; break; //縦マイナス方向 case g_ver_minus_Para: g_player_ver = g_player_ver - 1; break; //横プラス方向 case g_side_plus_Para: g_player_side = g_player_side + 1; break; //横マイナス方向 case g_side_minus_Para: g_player_side = g_player_side - 1; break; } //検索先に格納されているオブジェクトのタイプ int type = g_game_con_Script.Get_Obj_Type(g_player_ver, g_player_side, g_player_high); //取得したオブジェクトのタイプに応じて処理 //ダイスの時 //ダイスを移動させる if (type >= 100) { //Debug.Log("ダイスを押す"); //操作対象のダイスを取得 GameObject dice_obj = g_game_con_Script.Get_Obj(g_player_ver, g_player_side, g_player_high); //取得したダイスを中心に回転させる g_dice_con_Script.Storage_Control_Obj(dice_obj, direction_para); } }
/// <summary> /// 指定した位置に格納されているオブジェクトのタイプを取得する /// </summary> /// <param name="this_ver">縦</param> /// <param name="this_side">横</param> /// <param name="this_high">高さ</param> private void Check_Type(int this_ver, int this_side, int this_high, int change_para) { //タイプ取得 int type = g_game_Con_Script.Get_Obj_Type(this_ver, this_side, this_high); //取得したタイプがサイコロだった時 if (type >= 100) { //接触された側のオブジェクトを取得 g_next_dice_Obj = g_game_Con_Script.Get_Obj(this_ver, this_side, this_high); //接触された側のスクリプトを取得 g_next_dice_Script = g_next_dice_Obj.GetComponent <Dice_Squares>(); //移動側の接触面のパラメータを保持 g_adhesive_para = change_para; //接触面を調べてくっつくか調べる Docking_Check(); } }