9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

qnoteAdvent Calendar 2016

Day 7

Unityでキャラをジャンプさせてみた

Last updated at Posted at 2016-12-06

昨年、Macの使い方がわからなーい!
と嘆いた記事を初めて書いてから1年以上が経ちました。
今はqnoteに入社してMacもそこそこ?使いこなしていると思っている新人。
家ではWindowsを使ってるんですが、変換する時ついついスペースの横を押しちゃうくらいMacに染まりつつあります。

#本題へ
今回はUnityでキャラをジャンプさせるお話。
ほぼ独学でちょっとしたゲームを作っているのですがUnityは奥が深い。使いこなすなんて到底無理!わからない機能ばかり。。。
今度は、Unityの使い方がわからなーい!って記事書けばいいんですかね。。。

冗談は置いときまして本題ですね。
脱線しまくってて申し訳ないです。
というわけで、備忘録も兼ねて書きたいと思います。

先ほどからUnityと言っていますが、正しくはUnity2Dで作成してます。
ジャンルはラン&ジャンプ(ウインドランナー的なあれ)で題名がラン&コナンです。(嘘です)
UnityとMonoDevelopを使います。
使用言語はC#です。
今回参考にさせていただいたサイトはこちら

#ジャンプさせる前に地面に立たせる
現在の画面はこんな感じ
スクリーンショット 2016-12-06 14.13.21.png
背景、地面はAssetStoreから「2d platformer summer (package4)」をダウンロードして使用しました。
キャラクターはプロジェクト作成時に入れられる「Standard Assets」の中からロボットくんを使用しました。
地面に「BoxCollider2D」ロボットくん上半分に「BoxCollider2D」と下半分に「CircleCollider2D」を追加して地面に立つようにします。

余談になりますが
なぜ、ロボットくんに2つColliderを設定するのか。
BoxColliderだけにしてしまうと段差などで引っかかってしまうんですよね。
そのため下半分にはCircleColliderを設定して段差で引っかからないようにします。

#クリックでジャンプ
いよいよジャンプさせてみます!
ロボットくんにC#スクリプトを追加します。

jump.cs
void FixedUpdate()
{
     if (Input.GetMouseButtonDown(0))
   {
       regidbody2D.AddForce(Vector2.up * 250);
     }
}

簡単に書くとこれだけでジャンプできちゃいます。
しかし、このままだと地上、空中関係なく無限にジャンプできてしまうので、地面に接地している時だけジャンプできるようにしましょう。

jump.cs
    [SerializeField]
    bool jump = false;

    void FixedUpdate()
    {
        jump = Physics2D.Linecast(transform.position,
            transform.position - transform.up * 1, ground);


        if (Input.GetMouseButtonDown(0) && jump)
      {
           regidbody2D.AddForce(Vector2.up * 250);
        }
    }

これで地面に接地している時だけジャンプできるようになります。
Physics2D.Linecastを使うと自分の「Collider」と「指定したレイヤーのCollider」の当たり判定を判断してくれます。
実際にスクリプトを反映したスクショを貼って説明します。
スクリーンショット 2016-12-06 20.11.29.png
白い線が入ってるのがわかると思いますが、これが地面と接地している時だけジャンプします。
transform.position
は開始点となりここを基準に下へ伸びています。
transform.position - transform.up * 1
これが開始点からどれだけ伸ばすかというコードになります。
長さは自分で調節する必要がありますね。

最後の
ground
はレイヤー名です。
ここは自分の好きなレイヤー名をつけて構いません。
ただし、オブジェクトに付けたレイヤー名と一致していないと意味ないのでご注意ください。

#まとめ
AdventCalendarに初めて参加させていただきました。
現在業務でもUnityを使っているのでまたUnityのことに関して書けたらなと思います。
※ジャンプスクリプトUpdateと書いていましたが、AddForceを使う場合はFixedUpdateを使います。

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?