void Update() { if (!initialized_) { return; } #if UNITY_EDITOR muscle_motion_.getRootNode().set(GetComponent <MuscleMotionRenderer>().getRootTransform()); muscle_motion_.setTarget(posture_); muscle_motion_.set(GetComponent <MuscleMotionRenderer>().getRootTransform(), MuscleMotion.Parts.Root); muscle_motion_.update(1f / 60f); draw_buffer_.beginRender(); muscle_motion_.renderUpdate(ref draw_buffer_, DrawBuffer.Type.MuscleMotionPlayer); draw_buffer_.endRender(); for (var i = 0; i < draw_buffer_.object_num_; ++i) { switch (draw_buffer_.object_buffer_[i].type_) { case DrawBuffer.Type.MuscleMotionPlayer: int parts = draw_buffer_.object_buffer_[i].versatile_data_; if (parts == (int)MuscleMotion.Parts.Root) { break; } GetComponent <MuscleMotionRenderer>().render(ref draw_buffer_.object_buffer_[i]); break; } } #endif // UNITY_EDITOR }
void Update() { if (muscle_motion_ == null) { return; } set_params_body(body_damper_, body_spring_); set_params_arm(arm_damper_, arm_spring_); set_params_leg(leg_damper_, leg_spring_); muscle_motion_.setTarget(current_posture_); if (lookat_sphere_ != null) { var radius = 0.5f; lookat_sphere_.transform.position = new Vector3(Mathf.Sin(Time.time * 2f) * radius, Mathf.Cos(Time.time * 2.5f) * radius, Mathf.Cos(Time.time * 1f) * radius) + new Vector3(0f, 0.5f, 0f); } if (gui_hand_ || gui_lookat_ > 0f) { lookat_sphere_.SetActive(true); } else { lookat_sphere_.SetActive(false); } if (gui_lookat_ > 0f) { var node_head = muscle_motion_.getNode(MuscleMotion.Parts.Head); var pos = lookat_sphere_.transform.position; node_head.rigidbody_.addTargetTorque(ref pos, gui_lookat_ * 10000f); } if (lookat_sphere_ != null && gui_hand_) { var diff = lookat_sphere_.transform.position - muscle_motion_.getNode(MuscleMotion.Parts.Head).rigidbody_.transform_.position_; diff = Quaternion.Inverse(muscle_motion_.getRootNode().rigidbody_.transform_.rotation_) * diff; if (diff.x < 0) { var node_upper_arm = muscle_motion_.getNode(MuscleMotion.Parts.L_UpperArm); var node_fore_arm = muscle_motion_.getNode(MuscleMotion.Parts.L_ForeArm); var node_wrist = muscle_motion_.getNode(MuscleMotion.Parts.L_Wrist); var rot = Quaternion.LookRotation(diff); rot = rot * Quaternion.Euler(40, 90, 0); node_upper_arm.setTarget(ref rot); node_fore_arm.setTargetDirect(ref CV.QuaternionIdentity); var rot0 = Quaternion.Euler(0, 0, -45); node_wrist.setTargetDirect(ref rot0); } else { var node_upper_arm = muscle_motion_.getNode(MuscleMotion.Parts.R_UpperArm); var node_fore_arm = muscle_motion_.getNode(MuscleMotion.Parts.R_ForeArm); var node_wrist = muscle_motion_.getNode(MuscleMotion.Parts.R_Wrist); var rot = Quaternion.LookRotation(diff); rot = rot * Quaternion.Euler(0, 90, 0); node_upper_arm.setTarget(ref rot); node_fore_arm.setTargetDirect(ref CV.QuaternionIdentity); var rot0 = Quaternion.Euler(0, 0, 45); node_wrist.setTargetDirect(ref rot0); } } if (gui_rotate_) { muscle_motion_.getRootNode().rigidbody_.addTorqueY(400f); } muscle_motion_.update(Time.deltaTime); for (var i = 0; i < transform.childCount; ++i) { Transform child = transform.GetChild(i); if (update_parts(child, "Hip", MuscleMotion.Parts.Hip)) { continue; } if (update_parts(child, "R_SusoBack", MuscleMotion.Parts.R_SusoBack)) { continue; } if (update_parts(child, "R_SusoFront", MuscleMotion.Parts.R_SusoFront)) { continue; } if (update_parts(child, "R_Thigh", MuscleMotion.Parts.R_Thigh)) { continue; } if (update_parts(child, "R_Knee", MuscleMotion.Parts.R_Knee)) { continue; } if (update_parts(child, "R_Ancle", MuscleMotion.Parts.R_Ancle)) { continue; } if (update_parts(child, "R_Toe", MuscleMotion.Parts.R_Toe)) { continue; } if (update_parts(child, "L_SusoBack", MuscleMotion.Parts.L_SusoBack)) { continue; } if (update_parts(child, "L_SusoFront", MuscleMotion.Parts.L_SusoFront)) { continue; } if (update_parts(child, "L_Thigh", MuscleMotion.Parts.L_Thigh)) { continue; } if (update_parts(child, "L_Knee", MuscleMotion.Parts.L_Knee)) { continue; } if (update_parts(child, "L_Ancle", MuscleMotion.Parts.L_Ancle)) { continue; } if (update_parts(child, "L_Toe", MuscleMotion.Parts.L_Toe)) { continue; } if (update_parts(child, "Ribs", MuscleMotion.Parts.Ribs)) { continue; } if (update_parts(child, "Ribs2", MuscleMotion.Parts.Ribs2)) { continue; } if (update_parts(child, "Ribs3", MuscleMotion.Parts.Ribs3)) { continue; } if (update_parts(child, "R_Shoulder", MuscleMotion.Parts.R_Shoulder)) { continue; } if (update_parts(child, "R_UpperArm", MuscleMotion.Parts.R_UpperArm)) { continue; } if (update_parts(child, "R_ForeArm", MuscleMotion.Parts.R_ForeArm)) { continue; } if (update_parts(child, "R_Wrist", MuscleMotion.Parts.R_Wrist)) { continue; } if (update_parts(child, "R_FingerIndexA", MuscleMotion.Parts.R_FingerIndexA)) { continue; } if (update_parts(child, "R_FingerIndexB", MuscleMotion.Parts.R_FingerIndexB)) { continue; } if (update_parts(child, "R_FingerMiddleA", MuscleMotion.Parts.R_FingerMiddleA)) { continue; } if (update_parts(child, "R_FingerMiddleB", MuscleMotion.Parts.R_FingerMiddleB)) { continue; } if (update_parts(child, "R_FingerPinkyA", MuscleMotion.Parts.R_FingerPinkyA)) { continue; } if (update_parts(child, "R_FingerPinkyB", MuscleMotion.Parts.R_FingerPinkyB)) { continue; } if (update_parts(child, "R_FingerRingA", MuscleMotion.Parts.R_FingerRingA)) { continue; } if (update_parts(child, "R_FingerRingB", MuscleMotion.Parts.R_FingerRingB)) { continue; } if (update_parts(child, "R_FingerThumbA", MuscleMotion.Parts.R_FingerThumbA)) { continue; } if (update_parts(child, "R_FingerThumbB", MuscleMotion.Parts.R_FingerThumbB)) { continue; } if (update_parts(child, "Neck", MuscleMotion.Parts.Neck)) { continue; } if (update_parts(child, "Head", MuscleMotion.Parts.Head)) { continue; } if (update_parts(child, "R_Ribbon1", MuscleMotion.Parts.R_Ribbon1)) { continue; } if (update_parts(child, "R_Ribbon2", MuscleMotion.Parts.R_Ribbon2)) { continue; } if (update_parts(child, "R_Tale1", MuscleMotion.Parts.R_Tale1)) { continue; } if (update_parts(child, "R_Tale2", MuscleMotion.Parts.R_Tale2)) { continue; } if (update_parts(child, "R_Tale3", MuscleMotion.Parts.R_Tale3)) { continue; } if (update_parts(child, "R_Tale4", MuscleMotion.Parts.R_Tale4)) { continue; } if (update_parts(child, "L_Ribbon1", MuscleMotion.Parts.L_Ribbon1)) { continue; } if (update_parts(child, "L_Ribbon2", MuscleMotion.Parts.L_Ribbon2)) { continue; } if (update_parts(child, "L_Tale1", MuscleMotion.Parts.L_Tale1)) { continue; } if (update_parts(child, "L_Tale2", MuscleMotion.Parts.L_Tale2)) { continue; } if (update_parts(child, "L_Tale3", MuscleMotion.Parts.L_Tale3)) { continue; } if (update_parts(child, "L_Tale4", MuscleMotion.Parts.L_Tale4)) { continue; } if (update_parts(child, "L_Shoulder", MuscleMotion.Parts.L_Shoulder)) { continue; } if (update_parts(child, "L_UpperArm", MuscleMotion.Parts.L_UpperArm)) { continue; } if (update_parts(child, "L_ForeArm", MuscleMotion.Parts.L_ForeArm)) { continue; } if (update_parts(child, "L_Wrist", MuscleMotion.Parts.L_Wrist)) { continue; } if (update_parts(child, "L_FingerIndexA", MuscleMotion.Parts.L_FingerIndexA)) { continue; } if (update_parts(child, "L_FingerIndexB", MuscleMotion.Parts.L_FingerIndexB)) { continue; } if (update_parts(child, "L_FingerMiddleA", MuscleMotion.Parts.L_FingerMiddleA)) { continue; } if (update_parts(child, "L_FingerMiddleB", MuscleMotion.Parts.L_FingerMiddleB)) { continue; } if (update_parts(child, "L_FingerPinkyA", MuscleMotion.Parts.L_FingerPinkyA)) { continue; } if (update_parts(child, "L_FingerPinkyB", MuscleMotion.Parts.L_FingerPinkyB)) { continue; } if (update_parts(child, "L_FingerRingA", MuscleMotion.Parts.L_FingerRingA)) { continue; } if (update_parts(child, "L_FingerRingB", MuscleMotion.Parts.L_FingerRingB)) { continue; } if (update_parts(child, "L_FingerThumbA", MuscleMotion.Parts.L_FingerThumbA)) { continue; } if (update_parts(child, "L_FingerThumbB", MuscleMotion.Parts.L_FingerThumbB)) { continue; } } }
public override void update(float dt, double update_time) { var controller = Controller.Instance.getLatest(); muscle_motion_.setTarget(posture_apose_); if (controller.isLeftButtonUp()) { throwing_cnt_l_ = (int)(0.5f / dt); } if (controller.isRightButtonUp()) { throwing_cnt_r_ = (int)(0.5f / dt); } if (throwing_cnt_l_ > 0) { muscle_motion_.setTarget(posture_throw_l_arm_); // muscle_motion_.addTorqueY(MuscleMotion.Parts.Ribs2, 8000f); // muscle_motion_.addTorqueY(MuscleMotion.Parts.Hip, 8000f); // muscle_motion_.addTorqueX(MuscleMotion.Parts.L_Thigh, 8000f); // muscle_motion_.addTorqueX(MuscleMotion.Parts.L_Knee, 8000f); if (throwing_cnt_l_ < (int)(0.45f / dt)) { fire_left(update_time); } --throwing_cnt_l_; } if (throwing_cnt_r_ > 0) { muscle_motion_.setTarget(posture_throw_r_arm_); // muscle_motion_.addTorqueY(MuscleMotion.Parts.Ribs2, -8000f); // muscle_motion_.addTorqueY(MuscleMotion.Parts.Hip, -8000f); // muscle_motion_.addTorqueX(MuscleMotion.Parts.R_Thigh, 8000f); // muscle_motion_.addTorqueX(MuscleMotion.Parts.R_Knee, 8000f); if (throwing_cnt_r_ < (int)(0.45f / dt)) { fire_right(update_time); } --throwing_cnt_r_; } if (controller.isLeftButtonDown()) { MuscleMotion.Node node = muscle_motion_.getNode(MuscleMotion.Parts.L_Wrist); fire_left(update_time); left_held_bullet_ = Bullet.create(ref node.rigidbody_.transform_.position_, ref CV.QuaternionIdentity); } if (controller.isRightButtonDown()) { MuscleMotion.Node node = muscle_motion_.getNode(MuscleMotion.Parts.R_Wrist); fire_right(update_time); right_held_bullet_ = Bullet.create(ref node.rigidbody_.transform_.position_, ref CV.QuaternionIdentity); } if (controller.isLeftButton()) { throwing_cnt_l_ = 0; throwing_cnt_r_ -= (int)(0.25f / dt); muscle_motion_.setTarget(posture_pre_throw_l_arm_); bullet_tame_left_ += dt; } if (controller.isRightButton()) { throwing_cnt_l_ -= (int)(0.25f / dt); throwing_cnt_r_ = 0; muscle_motion_.setTarget(posture_pre_throw_r_arm_); bullet_tame_right_ += dt; } if (left_held_bullet_ != null) { MuscleMotion.Node node = muscle_motion_.getNode(MuscleMotion.Parts.L_Wrist); left_held_bullet_.setPosition(ref node.rigidbody_.transform_.position_); left_held_bullet_.setPower(Mathf.Clamp(bullet_tame_left_, 0.25f, 2f)); } if (right_held_bullet_ != null) { MuscleMotion.Node node = muscle_motion_.getNode(MuscleMotion.Parts.R_Wrist); right_held_bullet_.setPosition(ref node.rigidbody_.transform_.position_); right_held_bullet_.setPower(Mathf.Clamp(bullet_tame_right_, 0.25f, 2f)); } if (controller.isJumpButton() && on_ground_) { muscle_motion_.getRootNode().rigidbody_.addRelativeTorqueX(1000f); muscle_motion_.setTarget(posture_pre_jump_, MuscleMotion.PartsBit.LowerBody | MuscleMotion.PartsBit.Ribs | MuscleMotion.PartsBit.Ribs2 | MuscleMotion.PartsBit.Ribs3); jump_tame_duration_ += dt; } if (controller.isJumpButtonUp()) { if (jump_tame_duration_ > 0.5f) { jump_propel_remain_ = Mathf.Min((jump_tame_duration_ - 0.5f) + 0.5f, 1f) * 2f; rigidbody_.addForceY(1000f); WaterSurface.Instance.makeBump(ref rigidbody_.transform_.position_, -1f /* value */, 1f /* size */); on_ground_time_ = 0f; somersault_ = MyRandom.Probability(0.25f); } jump_tame_duration_ = 0f; } float hori = controller.getHorizontal(); float ground_height = 1.25f; if (hori != 0f) { ground_height = 1f; } if (jump_propel_remain_ > 0f) { rigidbody_.addForceY(100f); jump_propel_remain_ -= dt; } on_ground_ = (rigidbody_.transform_.position_.y <= 1f); rigidbody_.addTargetTorque(ref look_at_, 500f /* torque_level */, -1f /* max_level */); rigidbody_.addRelativeForceX(hori * 64f); if (hori != 0f) { rigidbody_.addRelativeForceZ(10f); } rigidbody_.addForceY(-9.8f * 5f); // gravity if (rigidbody_.transform_.position_.y < ground_height) { rigidbody_.addSpringForceY(ground_height, 100f); } rigidbody_.solveForGround(0.0f /* ground_height */, dt); rigidbody_.addRelativeTorqueZ(-hori * 100f); { var forward = rigidbody_.transform_.rotation_ * CV.Vector3Forward; var q = Quaternion.LookRotation(forward); rigidbody_.addSpringTorque(ref q, 10000f); } rigidbody_.update(dt); if (rigidbody_.transform_.position_.y < 5f) { WaterSurface.Instance.makeBump(ref rigidbody_.transform_.position_, -0.05f /* value */, 0.6f /* size */); var pos = rigidbody_.transform_.position_; pos.y = -2f; float vel_y; if (hori != 0f) { vel_y = MyRandom.Range(7f, 9f); } else { vel_y = MyRandom.Range(5f, 7f); } var vel = new Vector3(0f, vel_y, 0f); if (MyRandom.Probability(0.2f)) { WaterSplash.Instance.spawn(ref pos, ref vel, update_time); } } var root_node = muscle_motion_.getRootNode(); root_node.rigidbody_.transform_.position_ = rigidbody_.transform_.position_ + new Vector3((Mathf.PerlinNoise((float)update_time * 4f, 0.0f) - 0.5f) * 0.04f, (Mathf.PerlinNoise((float)update_time * 4f, 0.5f) - 0.5f) * 0.04f, (Mathf.PerlinNoise((float)update_time * 4f, 1.0f) - 0.5f) * 0.04f); if (somersault_ && on_ground_time_ < 0.25f) { root_node.rigidbody_.addRelativeTorqueX(-3000f); muscle_motion_.getNode(MuscleMotion.Parts.Ribs).rigidbody_.addRelativeTorqueX(-3000f); muscle_motion_.getNode(MuscleMotion.Parts.Ribs2).rigidbody_.addRelativeTorqueX(-3000f); muscle_motion_.getNode(MuscleMotion.Parts.Ribs3).rigidbody_.addRelativeTorqueX(-3000f); muscle_motion_.getNode(MuscleMotion.Parts.Hip).rigidbody_.addRelativeTorqueX(-3000f); } else { root_node.rigidbody_.addTorqueY(hori * 1000f); root_node.rigidbody_.addRelativeTorqueZ(-hori * 1000f); root_node.rigidbody_.addSpringTorque(ref rigidbody_.transform_.rotation_, 4000f); } muscle_motion_.addTorqueX(MuscleMotion.Parts.L_Tale1, MyRandom.Range(500f, 1200f)); muscle_motion_.addTorqueX(MuscleMotion.Parts.L_Tale4, MyRandom.Range(-4000f, 4000f)); muscle_motion_.addTorqueX(MuscleMotion.Parts.R_Tale1, MyRandom.Range(500f, 1200f)); muscle_motion_.addTorqueX(MuscleMotion.Parts.R_Tale4, MyRandom.Range(-4000f, 4000f)); muscle_motion_.addTorqueX(MuscleMotion.Parts.L_SusoBack, MyRandom.Range(300f, 600f)); muscle_motion_.addTorqueX(MuscleMotion.Parts.L_SusoFront, MyRandom.Range(-600f, -300f)); muscle_motion_.addTorqueX(MuscleMotion.Parts.R_SusoBack, MyRandom.Range(300f, 600f)); muscle_motion_.addTorqueX(MuscleMotion.Parts.R_SusoFront, MyRandom.Range(-600f, -300f)); Vector3 e_pos; if (jump_tame_duration_ > 0.75f || on_ground_time_ < 1f) { var node = muscle_motion_.getNode(MuscleMotion.Parts.Head); node.rigidbody_.addRelativeTorqueX(-4000f); } else if (MyCollider.getNearestEnemyPosition(out e_pos)) { muscle_motion_.getNode(MuscleMotion.Parts.Head).rigidbody_.addSpringTorque(ref e_pos, 4000f); } { var intersect_point = CV.Vector3Zero; if (MyCollider.getHitOpponentForPlayer(collider_, ref intersect_point) == MyCollider.Type.EnemyBullet) { var node = muscle_motion_.getNode(MuscleMotion.Parts.Ribs3); var torque = MyRandom.onSphere(1f) * 5000f; node.rigidbody_.addTorque(ref torque); Shield.Instance.spawn(ref intersect_point, ref rigidbody_.transform_.position_, update_time, Shield.Type.Green); SystemManager.Instance.registSound(DrawBuffer.SE.Shield); // hit_time_ = (float)update_time; // hit_position_ = intersect_point; } MyCollider.updatePlayer(collider_, ref rigidbody_.transform_.position_); } muscle_motion_.update(dt); on_ground_time_ += dt; }