質問編集履歴

1 修正

退会済みユーザー

退会済みユーザー

2020/07/14 19:26  投稿

矢印の方向に飛ばしたい
### 実現したいこと
2Dゲームでプレイヤーを中心に動いている矢印の向いている方向にプレイヤーを飛ばしたい
### 現状
矢印が左を向いていても必ず右側に飛んでしまう
Debug.Log(angle)の結果
矢印が右向きの場合(0.8, -0.6)
矢印が左向きの場合(0.7, 0.8)
### 該当コード
矢印
```
public float angle;
public class PowerMeter : MonoBehaviour
{
   public float angle;
   private GameObject target;
   public Image powermetercolor;
   bool right;
   bool powerstete;
   bool rotationstate;
   public static float fillpower;
   public static Vector2 jumpangle;
   void Start()
   {
       target = GameObject.Find("Player");
       powerstete = true;
       rotationstate = false;
   }
   void Update()
   {
       if (powerstete == true)
       {
           if (powermetercolor.fillAmount < 1)
           {
               powermetercolor.fillAmount += 1.0f / 0.5f * Time.deltaTime;
           }
           else
           {
               powermetercolor.fillAmount = 0;
           }
           if (Input.GetMouseButtonDown(0))
           {
               fillpower = powermetercolor.fillAmount;
               powerstete = false;
               rotationstate = true;
           }
       }
       else if (rotationstate == true)
       {
           float z = transform.localEulerAngles.z;
           // 180度を越えていた場合 -180~0 に変換
           //条件式 ? 条件式が真の時の処理 : 条件式が偽の時の処理
           z = (z > 180) ? z - 360 : z;
           // 右回転処理
           if (right == true)
           {
               Vector3 targetPos = target.transform.position;
               transform.RotateAround(targetPos, Vector3.back, angle * Time.deltaTime);
               // -90度を下回っていれば左回転開始
               if (z <= -90)
               {
                   right = false;
               }
           }
           // 左回転処理
           else if (right == false)
           {
               Vector3 targetPos = target.transform.position;
               transform.RotateAround(targetPos, Vector3.forward, angle * Time.deltaTime);
               // 90度を越えていたら右回転開始
               if (z >= 90)
               {
                   right = true;
               }
           }
           if (Input.GetMouseButtonDown(0))
           {
               Vector2 vecz = new Vector2(Mathf.Cos(z * Mathf.Deg2Rad), Mathf.Sin(z* Mathf.Deg2Rad));
               jumpangle = vecz;
               target.SendMessage("Jump");
           }
       }
       else
       {
           return;
       }
   }
   public void Reset()
   {
       right = true;
       powermetercolor.fillAmount = 0;
       powerstete = true;
       rotationstate = false;
   }
}  
```
プレイヤー
```
public Image PowerColor;
   bool Ground;
   Rigidbody2D rb2d;
   
   public GameObject PowerCanvas;
   private float power;
   private Vector2 angle;
   // Start is called before the first frame update
   void Start()
   {
       rb2d = GetComponent<Rigidbody2D>();
   }
   // Update is called once per frame
   void Update()
   {
       if (Ground == true)
       {
           PowerCanvas.SetActive(true);
       }
       else
       {
           PowerCanvas.SetActive(false);
       }
   }
   public void Jump()
   {
       power = PowerMeter.fillpower*10;
       angle = PowerMeter.jumpangle;
       rb2d.AddForce(angle * power, ForceMode2D.Impulse);
       Debug.Log(power);
       Debug.Log(angle);
   }
   public void OnCollisionEnter2D(Collision2D collision)
   {
       if (collision.gameObject.CompareTag("Stage"))
       {
           if (Ground == false)
           {
               Ground = true;
           }
       }
   }
   public void OnCollisionExit2D(Collision2D collision)
   {
       if (Ground == true)
       {
           Ground = false;
       }
   }
```
  • Unity

    9419 questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る