質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

3093閲覧

Unity2D プレイヤーの落下モーションを実装するために落下検出したい。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1グッド

1クリップ

投稿2019/03/24 01:52

実現したいこと

Unity2D キャラクターをジャンプした後に落下するときの落下モーションを導入したいのですがその落下を検知する方法が知りたい。
プレイヤーのy座標の数値が下がっていることを検知できればあとはそこをif文等にすれば落下モーションを実現できるのですが
教えてくれますでしょうか?

該当のソースコード

Unity c#
player.cs
※ソースはプロジェクト内に一つだけです。

public class PlayerController : MonoBehaviour { public float JumpForce = 200.0f; public float speed = 0.5f; private bool isJump; private bool isRun; private bool isGround; private Animator animator; private Transform tr; private Transform tr2; // Use this for initialization void Start () { // rigidbody = GetComponent<Rigidbody2D>(); tr = GetComponent<Transform>(); tr2 = GetComponent<Transform>(); animator = GetComponent<Animator>(); isJump = false; isRun = false; isGround = false; } // Update is called once per frame void Update () { int key = 0; //if(transform.position.y < ) if(Input.GetKey(KeyCode.Space)) { if (!isJump) { GetComponent<Rigidbody2D>().AddForce(new Vector2(0, JumpForce)); animator.SetBool("Jump",true); isJump = true; } } if(isJump == false) { animator.SetBool("Jump",false); } if (Input.GetKey(KeyCode.RightArrow)) { key = 1; transform.Translate(Vector3.right * speed); if(isRun == false && isJump == false) { animator.SetBool("Run",true); } } if (Input.GetKey(KeyCode.LeftArrow)) { key = -1; transform.Translate(Vector3.left * speed); if(isRun == false && isJump == false) { animator.SetBool("Run",true); } } if(key == 0 || isJump == true) { isRun = false; animator.SetBool("Run",false); } if(key != 0) { transform.localScale = new Vector3(key,1,1); } } private void OnCollisionEnter2D(Collision2D collision) { isJump = false; isGround = true; } }
bochan2👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

質問頂きありがとうございます。

C#

1public class PlayerController : MonoBehaviour { 2 float lastY; 3 //中略 4 void Update(){ 5 lastY=transform.position.y; 6 if(lastY>transform.position.y) 7 { 8 //落下 9 }//以下略 10}

差分を検知するならこんな感じですね
ただ、rigidbody2Dが速度データを持ってるので、下のやり方の方が正確になります。

C#

1if(GetComponent<Rigidbody2D>().velocity.y<0)

あと、本筋とは関係ないのですがGetComoponentは毎フレーム呼ぶのは(一応)非推奨なので変数でもっておいた方がいいと思います。

投稿2019/03/24 03:57

bochan2

総合スコア2050

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問