/// <summary> /// クイックブースト /// </summary> public void QuickBoost() { if (BreakCheck()) { return; } //現在の速度の方向を確認 float nowAngle = FuncBox.TwoPointAngleD(Vector3.zero, transform.right); float velocityAngle = FuncBox.TwoPointAngleD(Vector3.zero, rBody.velocity); float diff = Mathf.Abs(Mathf.DeltaAngle(nowAngle, velocityAngle)); //差が一定以上なら速度をほぼにする if (diff >= 45f) { rBody.velocity *= 0.2f; } Vector3 v = transform.right * quickBoostOutput; //移動量 float e = quickBoostEnergy; //使用エネルギー if (!AddVelocity(v, e)) { return; } //エフェクト IndicateQuickBoostEffect(true); }
//始点からの角度を求める(スワイプ中のみ) public float GetAngle() { if (flagSwipe) { return(FuncBox.TwoPointAngleD(currentPosition, startPosition)); } else { return(-1f); } }
/// <summary> /// 方向表示の更新 /// </summary> protected void UpdateDirectionIndicator() { //自身の playerDirection.transform.eulerAngles = player.transform.eulerAngles; //ロック対象の if (player.lockObject) { Vector3 angles = Vector3.zero; angles.z = FuncBox.TwoPointAngleD(player.transform.position, player.lockObject.transform.position); lockObjectDirection.transform.eulerAngles = angles; } }
/// <summary> /// 方向表示の更新 /// </summary> public void UpdateDirectionIndicator() { //機体角度 shipDirection.transform.eulerAngles = player.transform.eulerAngles; //ロック対象との角度 if (player.lockObject) { Vector3 angles = Vector3.zero; angles.z = FuncBox.TwoPointAngleD(player.transform.position, player.lockObject.transform.position); lockObjectDirection.transform.eulerAngles = angles; } //マーカーの表示 //float cameraSize = sm.mainCamera.targetSize; //if(cameraSize >= ship.collisionRadius * 30f) { // shipMarker.gameObject.SetActive(true); //} else { // shipMarker.gameObject.SetActive(false); //} }
public List <GameObject> buttons; //ボタンオブジェクト(デフォルトでは子オブジェクトのリスト) #region 関数 /// <summary> /// 指定角度内で一番近くの子オブジェクトを取得する /// </summary> protected GameObject GetNearChildren(float minAngle, float maxAngle) { if (buttons.Count == 0) { SetChildren(); } if (!nowTarget) { SetNewTarget(startTarget); return(null); } //二次元平面(xy)で一番近いオブジェクトを探す float disX = float.MaxValue; float disY = 0; GameObject near = null; for (int i = 0; i < buttons.Count; i++) { if (nowTarget == buttons[i]) { continue; } if (!buttons[i].activeInHierarchy) { continue; } //角度計測 float angle = FuncBox.TwoPointAngleD(nowTarget.transform.position, buttons[i].transform.position); Debug.Log(angle); if (minAngle <= angle && angle <= maxAngle) { //距離計測 disY = Vector3.Distance(nowTarget.transform.position, buttons[i].transform.position); if (disX > disY) { near = buttons[i]; disX = disY; } } } return(near); }
/// <summary> /// 角度移動 /// </summary> public void MoveAngle(Vector2 direction) { if (BreakCheck()) { return; } float angle = FuncBox.TwoPointAngleD(Vector2.zero, direction); //速度ベクトルの向きを変更 float fromAngle = FuncBox.TwoPointAngleD(Vector2.zero, rBody.velocity); float angleDistance = Mathf.Abs(Mathf.DeltaAngle(angle, fromAngle)); //角度差が一定範囲の場合でブーストしている場合 if (30 < angleDistance && angleDistance <= 170f && flagBoost) { float lerpAngle = Mathf.LerpAngle(fromAngle, angle, steering * Time.deltaTime); Vector3 velocityAngle = FuncBox.DegreeToVector3(lerpAngle); //速度の向き変更 rBody.velocity = velocityAngle * (rBody.velocity.magnitude); } //角度を設定 transform.eulerAngles = new Vector3(0f, 0f, angle); }
//スワイプ操作 protected void Swipe(int input = 0) { if (Input.GetMouseButton(input)) { if (flagSwipe) { //マウスがどれだけ移動しているかを取得する prevPos = InverseMousePoint(); offset = startPos - prevPos; //カメラの移動 if (flagCameraMove) { Vector3 cPos = targetCamera.transform.position; bool isOut; Vector3 p = FuncBox.MoveArea(cPos, offset, area, out isOut); targetCamera.transform.position = p; if (isOut) { offset = Vector3.zero; } } //スプライト if (sprite) { //長さを求める distance = sprite.transform.localScale; distance.x = Vector3.Distance(prevPos, startPos); sprite.transform.localScale = distance; //角度を求める angle = FuncBox.TwoPointAngleD(startPos, prevPos); sprite.transform.eulerAngles = new Vector3(0f, 0f, angle); } } else { //マウスの位置を記憶しておく startPos = InverseMousePoint(); flagSwipe = true; //スプライト if (sprite) { //sprite.transform.localPosition = startPos; sprite.gameObject.SetActive(true); } } } else { //直前までスワイプしていた場合 if (flagSwipe) { Debug.Log("スワイプ終了"); if (sprite) { sprite.gameObject.SetActive(false); } //円形UIとの連携 if (circleUI) { string str = circleUI.GetCircleValue(angle, distance.x); if (activeDistance <= distance.x) { if (circleUIIventHandler) { circleUIIventHandler.SendMessage(circleUIIventName + str, angle); } } } } flagSwipe = false; } }