private void update_sub3() { // 表示内容更新 for (int idx = 0; idx < m_EnemyObjectViewControls.Length; idx++) { BattleEnemyObjectViewControl battle_enemy_object_view_control = m_EnemyObjectViewControls[idx]; if (battle_enemy_object_view_control != null) { battle_enemy_object_view_control.m_Hp = m_BattleEnemys[idx].m_EnemyHP; battle_enemy_object_view_control.m_HpMax = m_BattleEnemys[idx].m_EnemyHPMax; battle_enemy_object_view_control.m_AttackWaitTurn = m_BattleEnemys[idx].m_EnemyTurn; battle_enemy_object_view_control.m_TargetCursorObject.SetActive(idx == m_LockOnTarget); // 死亡済みでもテクスチャロードが終わるまではアクティブにしておく bool is_active = battle_enemy_object_view_control.isLoadingTexture() || m_BattleEnemys[idx].isShow(); battle_enemy_object_view_control.gameObject.SetActive(is_active); // 攻撃アニメーションが終わったらレイヤーを元に戻す. if (battle_enemy_object_view_control.m_ImageObject.layer != battle_enemy_object_view_control.gameObject.layer) { if (battle_enemy_object_view_control.isPlayingAnim() == false) { battle_enemy_object_view_control.m_ImageObject.layer = battle_enemy_object_view_control.gameObject.layer; } } } } }
// プレイヤーがタッチしている敵を取得.タッチしていなければ -1 が返る public int checkTouchEnemy(bool is_long_touch) { BattleTouchInput battle_touch_input = BattleTouchInput.Instance; bool triger = false; if (is_long_touch) { triger = battle_touch_input.isTouching() && battle_touch_input.isDrag() == false && battle_touch_input.getTouchingTime() >= 0.5f; } else { triger = battle_touch_input.isTapped(); } if (triger) { BattleScene.FieldCollision field_collision = GetComponent <BattleScene.FieldCollision>(); if (field_collision != null) { if (field_collision.IsMouseOver) { Vector2 mouse_position = battle_touch_input.getPosition(); float dist_sqr_min = 1.0e+30f; int touch_index = -1; for (int idx = 0; idx < m_EnemyObjectViewControls.Length; idx++) { BattleEnemyObjectViewControl enemy_view_control = m_EnemyObjectViewControls[idx]; if (enemy_view_control != null) { Vector3 enemy_screen_position = battle_touch_input.getScreenPosition(enemy_view_control.m_TargetCursorObject.transform.position); Vector2 dir = mouse_position - new Vector2(enemy_screen_position.x, enemy_screen_position.y); float dist_sqr = dir.sqrMagnitude; if (dist_sqr < dist_sqr_min) { dist_sqr_min = dist_sqr; touch_index = idx; } } } return(touch_index); } } } return(-1); }
public void destroyEnemy() { m_BattleEnemys = null; if (m_EnemyObjectViewControls != null) { for (int idx = 0; idx < m_EnemyObjectViewControls.Length; idx++) { BattleEnemyObjectViewControl battle_enemy_object_view_control = m_EnemyObjectViewControls[idx]; if (battle_enemy_object_view_control != null) { if (battle_enemy_object_view_control.gameObject != null) { GameObject.Destroy(battle_enemy_object_view_control.gameObject); } } } m_EnemyObjectViewControls = null; } hideDropObject(); }
private void update_sub1(ref Vector2 enemy_size) { for (int idx = 0; idx < m_EnemyObjectViewControls.Length; idx++) { BattleEnemyObjectViewControl battle_enemy_object_view_control = m_EnemyObjectViewControls[idx]; if (battle_enemy_object_view_control != null) { if (m_BattleEnemys[idx].getMasterDataParamEnemy().pos_absolute != MasterDataDefineLabel.BoolType.ENABLE) { float enemy_width = battle_enemy_object_view_control.getCharaWidth(); enemy_size.x += enemy_width; } float tall = battle_enemy_object_view_control.getCharaTall() + battle_enemy_object_view_control.getEnemyDispOffset().y; if (tall > enemy_size.y) { enemy_size.y = tall; } } } }
private void update_sub2(ref Vector2 enemy_size) { // 表示位置調整 // 敵パーティが画面内に収まらなかったら遠くに表示して収まるようにする float z_offset = 0.0f; { // 表示可能領域サイズを計算 Vector2 enemy_area_size; { // 敵表示領域の原点(中央下)(スクリーン座標系) Vector3 area_base_2d = m_Camera.WorldToScreenPoint(gameObject.transform.localPosition + m_Camera.transform.position); // 画面右上位置(ワールド座標系。この座標はステータスバーなどを考慮した表示領域の右上の座標) Vector3 top_right_world = BattleSceneManager.Instance.m_TopRightAnchor.transform.position; // 画面右上位置(スクリーン座標系) Vector3 top_right_2d = m_Camera.WorldToScreenPoint(top_right_world); enemy_area_size = top_right_2d - area_base_2d; enemy_area_size *= 1.0f / 128.0f / m_Canvas.scaleFactor; // 敵グループサイズに単位を合わせる. enemy_area_size *= 0.95f; // 画面端ぎりぎりまで表示されないように少し狭める. enemy_area_size.x *= 2.0f; } // 敵グループサイズが表示可能領域をどれくらい上回っているか判定 float scale_x = enemy_size.x / enemy_area_size.x; float scale_y = enemy_size.y / enemy_area_size.y; float scale = Mathf.Max(scale_x, scale_y); if (scale > 1.0f) { float enemy_base_z = gameObject.transform.localPosition.z; float new_z = enemy_base_z * scale; z_offset = new_z - enemy_base_z; } } float x = enemy_size.x * -0.5f; for (int idx = 0; idx < m_EnemyObjectViewControls.Length; idx++) { BattleEnemyObjectViewControl battle_enemy_object_view_control = m_EnemyObjectViewControls[idx]; if (battle_enemy_object_view_control != null) { MasterDataParamEnemy enemy_master = m_BattleEnemys[idx].getMasterDataParamEnemy(); Vector3 offset = battle_enemy_object_view_control.getEnemyDispOffset(); float Z_OFFSET_SCALE_Y = gameObject.transform.localPosition.y / gameObject.transform.localPosition.z; // 敵表示の大きさ補正をすると敵の表示位置が下に移動してしまうのを抑制するための値. offset.y += z_offset * Z_OFFSET_SCALE_Y; offset.z += z_offset; if (m_BattleEnemys[idx].getMasterDataParamEnemy().pos_absolute != MasterDataDefineLabel.BoolType.ENABLE) { // 位置指定がされていない場合は左から並べる float enemy_width = battle_enemy_object_view_control.getCharaWidth(); battle_enemy_object_view_control.gameObject.transform.localPosition = new Vector3(x + enemy_width * 0.5f, 0.0f, 0.0f) + offset; x += enemy_width; } else { // 位置指定がされている場合はその位置に出す Vector3 pos = new Vector3(enemy_master.posx_offset, enemy_master.posy_offset, enemy_master.posz_value) / 128.0f; battle_enemy_object_view_control.gameObject.transform.localPosition = pos + offset; } // カメラへ向くように補正(左右方向を補正) { battle_enemy_object_view_control.gameObject.transform.up = gameObject.transform.up; Vector3 forward = m_Camera.transform.position + gameObject.transform.up * battle_enemy_object_view_control.gameObject.transform.localPosition.y - battle_enemy_object_view_control.gameObject.transform.position; battle_enemy_object_view_control.gameObject.transform.forward = -forward.normalized; } if (enemy_master != null) { // HPゲージ表示位置 { battle_enemy_object_view_control.setHpGaugeType(enemy_master.hp_gauge_type); Vector2 hp_offset = new Vector2(enemy_master.hp_posx_offset, enemy_master.hp_posy_offset) / 128.0f; battle_enemy_object_view_control.setHpGaugeOffest(hp_offset); } // ターゲットカーソル位置 { Vector2 target_offset = Vector2.zero; if (enemy_master.target_pos_absolute == (int)MasterDataDefineLabel.BoolType.ENABLE) { target_offset = new Vector2(enemy_master.target_posx_offset, enemy_master.target_posy_offset) / 128.0f; } battle_enemy_object_view_control.setTargetCursorOffset(target_offset); } } } } }
// インスタンス生成 public void instanceObject(BattleEnemy[] enemy_params) { destroyEnemy(); m_BattleEnemys = enemy_params; if (m_BattleEnemys != null) { m_EnemyObjectViewControls = new BattleEnemyObjectViewControl[m_BattleEnemys.Length]; hideDropObject(); m_DropUnitObjects = new GameObject[m_BattleEnemys.Length]; for (int idx = 0; idx < m_EnemyObjectViewControls.Length; idx++) { if (m_BattleEnemys[idx] != null) { GameObject battle_enemy_object = Instantiate(m_BattleEnemyObjectPrefab); if (battle_enemy_object != null) { BattleEnemyObjectViewControl battle_enemy_object_view_control = battle_enemy_object.GetComponent <BattleEnemyObjectViewControl>(); if (battle_enemy_object_view_control != null) { battle_enemy_object_view_control.m_EnemyCharaID = (int)m_BattleEnemys[idx].getMasterDataParamChara().fix_id; switch (m_BattleEnemys[idx].getMasterDataParamChara().element) { case MasterDataDefineLabel.ElementType.FIRE: battle_enemy_object_view_control.m_ShadowColor = m_ShadowColorFire; break; case MasterDataDefineLabel.ElementType.WATER: battle_enemy_object_view_control.m_ShadowColor = m_ShadowColorWater; break; case MasterDataDefineLabel.ElementType.WIND: battle_enemy_object_view_control.m_ShadowColor = m_ShadowColorWind; break; case MasterDataDefineLabel.ElementType.LIGHT: battle_enemy_object_view_control.m_ShadowColor = m_ShadowColorLight; break; case MasterDataDefineLabel.ElementType.DARK: battle_enemy_object_view_control.m_ShadowColor = m_ShadowColorDark; break; case MasterDataDefineLabel.ElementType.NAUGHT: battle_enemy_object_view_control.m_ShadowColor = m_ShadowColorNaught; break; default: battle_enemy_object_view_control.m_ShadowColor = Color.black; break; } m_EnemyObjectViewControls[idx] = battle_enemy_object_view_control; battle_enemy_object_view_control.setAilment(m_BattleEnemys[idx].m_StatusAilmentChara); battle_enemy_object.transform.parent = gameObject.transform; battle_enemy_object.transform.localPosition = Vector3.zero; battle_enemy_object.transform.localRotation = Quaternion.identity; battle_enemy_object.transform.localScale = Vector3.one; } else { GameObject.Destroy(battle_enemy_object); } } } } } }