unity

unityで攻撃に当たり判定をつける方法

投稿日:

Pocket

うも、チャーさんです。

あなたはunityで攻撃に当たり判定をつけたいですか?

 

この記事では、当たり判定をつける

方法を書いてるので、読めば当たり判定をつけれます。

 

ということで、unityで攻撃に当たり判定を

つけたければこのまま読んでください。

 

スポンサードサーチ

unityで攻撃に当たり判定をつけるには

 

でまず結論ですが、

unityで攻撃に当たり判定をつけるには、

 

・コライダーコンポーネントを両方のオブジェクトにつけること、

(例えば味方の剣と敵オブジェクトの両方になど)

 

・コライダーに関するスクリプトを書く

(OnCollisionEnterなどの関数)

 

この2点をやりましょう。

すると当たり判定をつけることができます。

 

 

理由ですが、unityでの当たり判定発生には、

コライダーという衝突を検知してくれる

コンポーネントが必要だからです。

 

また、コライダーだけでは当たったことや衝突を

検知してくれますが、それだけでは特にダメージ表示したり、

 

攻撃を受けて仰け反るような攻撃時の当たり判定に

付随させるアニメーションをつけたりなどはできません。

 

 

ですがコライダーに関するスクリプトを

かくと、攻撃時の当たり判定演出(ダメージを与えたり)

仰け反りアニメーションをつけたり色々できます。

 

ということでこの2点をやれば、

ゲームにおける攻撃時の当たり判定は可能です。

 

 

当たり判定の2タイプ

 

で、ここで大事なのですが、

攻撃時の当たり判定には2つパターンが

ありまして、あなたが実現したい方を選ぶ必要があります。

 

 

・1つが、衝突するタイプ(物理現象が発生するやつ、例:攻撃したら

オブジェクトが吹っ飛ぶとか)

 

・もう1つが、攻撃はすり抜けるけど敵にダメージを与えたりなどの

当たり判定を発生させることができるタイプ。

 

このどちらにするかで当たり判定に関するスクリプトは

変わります。

 

 

ということでスクリプトに関し簡単に説明すると、

 

攻撃の当たり判定をすり抜けないタイプにしたいなら、

OnCollisionEnter()関数を。

(こっちの場合は、両オブジェクトにRigidbodyがついてる必要があります。)

 

 

攻撃がすり抜ける当たり判定(剣を振っても相手が吹っ飛ばない)

などにしたい場合は、

OnTriggerEnter()関数を使いましょう。

 

(この場合はコライダーコンポーネントのIs Triggerに

チェックをつける必要があります)

 

 

この両方の関数は、どちらも当たり判定に使える

関数でして、オブジェクトとオブジェクトが触れ合った場合

に反応してくれます。

 

(厳密にはオブジェクトとオブジェクトのコライダーが

衝突した(触れ合った)場合、反応してくれる関数です。)

 

 

なので例えば攻撃するときに、

攻撃側の剣のコライダーが相手のコライダーに衝突した瞬間に

反応してくれる関数ってわけです。

 

なのでこの機能を使えば、

unityで攻撃の当たり判定を発生させることが

できます。

 

 

で両関数とも割と使い方は簡単でして、

普通にスクリプトの中に、

記述を書くだけで当たり判定を実装できます。

 

例えば、衝突する方であれば、

OnCollisionEnterを使うので、以下のように

書きます。

 

void OnCollisionEnter(Collision col){ 
            Debug.Log (HIT);
    }

 

ちなみに上記のコードのようにかくと、OnCollisionEnterの{}

の中に書いた記述が、コライダーとコライダーが

触れ合った瞬間に呼ばれて、

 

{}内の記述が実行されます。

(ものにぶつかるとHITとデバッグに表示されます。)

 

 

このように、コライダー同士が当たった瞬間

中の記述が呼ばれるのでこれで攻撃時の当たり判定を

設定できるというわけです。

 

またこれはOnTriggerEnterも同じです。

 

引数について

でここでおそらくあなたは疑問に思うのが、

 

void OnCollisionEnter(Collision col){

の引数の部分Collision colの部分でしょう。

 

 

迷わぬように説明します。

 

この引数はとても便利でして、

衝突した対象(オブジェクトの情報)を

unityが自動で取得してくれるものです。

 

そしてCollisonというのは、変数型の名前でして、

colというのが、変数名に当たる部分です。

 

なのでこのcolという部分は好きな名前にできます。

 

 

でこの引数の部分が便利という話に戻りまして、

衝突した対象の情報が変数に格納されます。

 

例えば、以下のコードみてください。

void OnCollisionEnter(Collision col){ 
        if (col.gameObject.name == Cube) {
            Debug.Log (HIT);
        }
    }

 

このコードの

if (col.gameObject.name == Cube) {

では衝突したゲームオブジェクトの名前がCubeで

あれば、という風に

 

衝突した対象の情報を読み取ることが可能です。

 

 

つまり攻撃したものなんでもかんでもに対して

当たり判定を発生させてしまうのを避け、

上記のように、対象オブジェクトを限定できたりします。

 

これは結構重要でして、例えば壁や床に攻撃があたり、

予想しない当たり判定出てきても困るのですが、

引数を使えばその辺りがうまく制御できます。

 

なので当たり判定をつける際に役立つので

覚えておくと良いでしょう。

 

 

 

 

スポンサードサーチ

攻撃時の当たり判定実装手順

 

ということで、上記の説明で

だいたい攻撃の当たり判定に使う

コライダーのスクリプトについて理解が進んだと思います。

 

ということで、ここからは攻撃時の

当たり判定を実装するまでの手順を書いときます。

 

コライダーつけましょう

 

まず、攻撃する側とされる側両方に、

コライダーをつけましょう。

 

例えば剣で攻撃するなら、

剣にコライダーをつけましょう。

 

 

そして敵は、全身を覆うようにコライダー

つけましょう。

 

コライダーは丸いのや、四角いのや色々

種類ありますが、当たり判定の広さを考えながら

選んでみてください。

 

判定タイプを選ぶ

 

次に、当たり判定のタイプを

衝突ありにするかすり抜けるタイプにするか

選びましょう。

 

衝突するなら、両方のオブジェクトに

Rigidbodyもつけましょう。

 

そして使う記述は以下です。

OnCollisonEnter(Collison col){

ここに記述

}

 

 

またすり抜けるなら

OnTriggerEnter(Collider col){

ここに記述

}

 

でコライダーコンポーネントの中にある、

Is Triggerにチェックをつけましょう。

 

であとは、実際に再生してみて、

ちゃんと意図した通りに動いてるか試してみましょう。

 

 

あなたが意図した記述の動きをすれば

成功です。

 

 

スポンサードサーチ

まとめ

 

ということでまとめに入ります。

 

unityで攻撃時に当たり判定をつけたければ、

大まかに言って、

 

コライダーコンポーネントを両方のオブジェクトにつけること、

(例えば味方の剣と敵オブジェクトの両方になど)

 

コライダーに関するスクリプトを書く

(OnCollisionEnterなどの関数)

 

 

この2つをやりましょう。

 

そうすればあなたはunityで攻撃時の

当たり判定を実装できますよ。

 

それでは、読んでもらってありがとうございました。

 

チャーさん

 

 

-unity

==========

Unity用の3Dモデルを探してる方、欲しい方ご注目!

自作のUnity用3Dモデルを販売(基本的に無料版あり)してますので、
以下のリンクより一度ご覧ください。

Unity用3Dモデルを見てみる

==========


スポンサードサーチ

関連記事

no image

blenderで作ったモデルをunityにインポートする方法「簡単です」

どうも、チャーさんです。   あなたはblenderで作ったものを、 unityで表示(インポート)したいと、 思っていませんか?   この記事では、あなたが作ったblenderの …

no image

unityでコンポーネントを取得する方法を詳しく解説

どうも、チャーさんです。 あなたはunityでコンポーネントを取得する方法を 探していますか?   この記事ではコンポーネントを取得する方法、 その際の変数宣言の書き方や、 コンポーネント名 …

no image

unityで弾の発射の向きを敵に向ける方法(自動)

どうも大石です。   あなたはunityで弾を発射するときの向き をコントロールしたいと思っていませんか?   この記事を読めば、あなたはunityで 弾を敵に向かって発射させれる …

no image

unityで弾を発射する方法(簡単3ステップ)

どうも、大石です。   あなたは、unityで弾を発射したいですか? この記事を読めば、あなたはunityで弾を発射 できるようになります。   なので、弾を発射したければ、 この …

no image

unityで敵を索敵する方法

どうも、大石です。   あなたはunityでプレイヤーが敵を索敵する 機能をつけたいですか?   この記事を読めば、敵を索敵する 機能を簡単に作れますよ。   ということ …

no image

unityでprefabを複製する(スクリプトで)方法

どうも、大石です。 あなたはunityでprefabをスクリプトで複製 したいですか?   この記事を読めば、あなたはprefabをスクリプトで 複製できるようになります。   な …

no image

unityで敵を移動させる方法(詳細にわかりやすく説明します)

どうも、チャーさんです。   あなたはunityで敵を移動させたい、 そう思っていませんか?   コライダーなどでもできるが、他の方法が ないかと探してませんか?   & …

no image

unityでマウスの座標を取得する方法(超簡単です)

どうも、大石です。   あなたはunityでマウスの座標を取得したい ですか?   この記事を読めば、あなたはすぐに マウスの座標を取得できますよ。   スポンサードサー …

no image

unityで弾の発射位置をコントロールする方法

どうも、大石です。 あなたはunityで弾の発射位置を自由に コントロールしたいですか?   この記事を読めばあなたの好きな位置から 弾を発射できるようになりますよ。   スポンサ …

no image

unityでターン制のゲームを作るにはコレを使いましょう

どうも、チャーさんです。 あなたはunityでターン制ゲームを作りたい そう思っていませんか?   この記事ではunityでターン制のゲームを 作る方法を書いています。   なので …

no image

unityでキー入力で攻撃する方法(3分以内にできます)

どうも、チャーさんです。   あなたはunityでキー入力による攻撃を したいですか?   この記事ではunityでキー入力で攻撃を する方法を書いてますので、あなたがこれを読めば …

no image

[unity]foreach内でget componentを使う方法

どうも、チャーさんです。   この記事ではunityのforeachループで get componentする方法を書きます。     なのでこの記事を読めば、 &nbsp …

no image

unityでオブジェクトを回転させる方法「1分でできます」

どうも、チャーさんです。   あなたはunityでオブジェクトを回転させたいですか?   unityでゲームなど作るとオブジェクトを 回転させたい場面がありますよね。   …

no image

unityで敵に近づくと追いかけてくるコードとコードの解説記事

どうも、チャーさんです。   あなたはunityで敵に近づくと、 プレイヤーを追いかけてくるという機能を つけたいと思っていませんか?   この記事ではそれを実現するコードと方法や …

no image

unityで地形を作る方法「初心者でもできるように丁寧に説明してます」

どうも、チャーさんです。   あなたはunityでいい感じの地形を作りたい。 でも、やり方がわからない。と悩んでいませんか?   この記事では、unityで地形を作る方法を、 ステ …

最新記事

チャーさん

プログラミング・筋トレ・unity系の記事などを書いてます。

大学卒業後→開業→個人事業主7年目ぐらいです。webサイト制作したり、unityでゲーム開発しております。

youtubeもやってまして、主にプログラミング動画とかunity系の動画をあげてるので見てください。