Oops! It appears that you have disabled your Javascript. In order for you to see this page as it is meant to appear, we ask that you please re-enable your Javascript!

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

unityで他のオブジェクトを取得する方法

どうもチャーさんです。   あなたはunityで他のオブジェクトを 取得したいがわからず困ってますか?   この記事では、unityで他のオブジェクトを 取得する方法を書いてます。 …

no image

Unityでオブジェクトに重力を1分以内につける方法

  どうも、チャーさん(@chaa___san)です。   あなたはUnityでオブジェクトに重力をつけたいですか?   この記事ではUnityでオブジェクトに、 重力を …

no image

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

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

no image

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

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

no image

unityで動く床にのるとオブジェクトが滑る場合の解決法

どうも、大石です。   unityで動く床を作ったのに オブジェクトが上に乗ると滑って 一緒に付いて行かずに落ちる、、   みたいなことで悩んでますか?     …

no image

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

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

no image

unityアセットの使い方を初心者でもわかるように説明。

  どうも、チャーさんです。   あなたはunityのアセットの使い方が、 わからず困ってませんか?   この記事ではunityのアセットの使い方を、 1から説明してます …

no image

unityでカメラを追従させる簡単なコードと方法の説明をする記事

  どうも、チャーさんです。   あなたはunityでカメラの追従をさせたい、 こう思ってませんか?   この記事ではオブジェクトをカメラで追従させる、 (カメラが追いか …

no image

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

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

no image

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

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

no image

unityでoculus questの開発をしたい方必見!手順まとめました

どうも、チャーさんです。   あなたはunityでoculus questの 開発をしたい、そう思ってませんか?     この記事ではunityでoculus quest …

no image

unityでオブジェクトをスクリプトで削除する方法

どうも、チャーさんです。   あなたはunityでゲームオブジェクトを、 スクリプトなどから削除したいですか?   この記事では、関数を使い、 ゲームオブジェクトを削除する方法を書 …

no image

unityで矢印キーでオブジェクトを移動させるには(3d)

どうも、チャーさんです。 あなたはunityで矢印キーで3dオブジェクトを 移動させたいですか?   この記事では矢印キーによる3dオブジェクトの 移動を実現する方法を書いてるので、 読めば …

no image

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

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

no image

unity上でblender作成モデルが透ける時の解決法

どうも、チャーさんです。   あなたはunityにblenderで作ったモデルを 持ってきたものの、面が透ける現象が起こって 困っていませんか?     この記事は、透け …

最新記事

チャーさん

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

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

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