Unityを使った3Dゲームの作り方(かめくめ)ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。2016.04.25今回は主人公キャラクターがロープ(滑車付きロープでもいいかも)を掴んで下りていく機能を作成します。ダークソウル2?にあった板が重なり合ったステージで初心者には道案内の白が必要なエリアにあった機能を作ってみました。わたくしもよく白になって道案内をしていました。・・・やったことない人にはまったくわからないですね、やった事ある人もわからないかもしれませんが・・・。そのステージにあったロープを掴んで下りる機能を作成していきます。PS3が壊れたのでどんなんだったか忘れていますが・・・・(^_^;)まずはロープ等のゲームオブジェクトを作成します。スポンサーリンクロープや坂、ロープを掴むエリアを作成ロープはCubeのサイズを変更して作成しました。ロープなのでCylinderで作る事をお勧めします・・・・・(T_T)作った後に気がつくおバカさん上のように階層を作ります。RopeSystemは空のゲームオブジェクトで作成し、その子要素にロープ系のゲームオブジェクトを詰め込みます。RopeSystemの子要素に空のゲームオブジェクトを作成し、名前をMoveHandPosとしてます。MoveHandPosはキャラクターの手の位置を合わせる場所でロープを掴んで降りる時に動かします。MoveHandPosの子要素にはIKで指定する右手(RightHand)、左手(LeftHand)の位置と角度を合わせる空のゲームオブジェクトを作成します。最初に設定する位置や角度は後で調整するので大体で設定しておきます。RopeObj(CubeもしくはCylinderで作成)はロープ自体の見た目のゲームオブジェクト、SearchArea(Cubeで作成)はキャラクターがロープを下る場所に来たかどうかを判断するエリアとして使います。StartBasePosition(空のゲームオブジェクトで作成)はロープを降りる時の最初のキャラクターの位置で、EndHandPos(空のゲームオブジェクトで作成)はロープを降り切ったとする手の位置になります。上のような感じになります。主人公がロープを掴む動作をするエリアSearchAreaにスクリプトを設定SearchAreaのゲームオブジェクトは上の画像のbaePositionの辺りにCubeを使って作成します。Colliderを取り付けるだけでもOK)。このエリアと接触したらロープを掴み降りていく動作をさせます。SearchAreaオブジェクトにSearchCharaというスクリプトを作成し設定します。{col.gameObject.GetComponent<RopeChara>().SetState(RopeChara.State.Rope);}}}今回はOnTriggerEnterでSearchAreaに進入したキャラ(厳密にはコライダ)にPlayerタグが設定されたものだったら、そのゲームオブジェクトに設定されているRopeCharaスクリプトのSetStateメソッドを呼び出しキャラクターの状態を変更します。キャラクター操作スクリプトにロープを掴んでいる時の処理を追加する主人公操作スクリプトにロープを掴んで下りていく間は移動機能を無効化する必要があります。defaultStartPosition;}}ロープを掴んでいる状態を追加しています。キャラクター移動処理はState.Normalの時だけ実行し、ロープを掴んで下りている時は動作しないようにします。ロープを掴んでいる間は重力も働かせないようにします。StartメソッドではMoveHandPosの位置とStartBasePositionの位置の差を取得しておきます。これはロープを掴んでいる時にMoveHandPosを動かしますが、それに合わせてキャラクターの位置も動かしたい為、最初にその差を取得しておき、キャラクターの位置はMoveHandPosにその差を加味した位置に移動させる為です。MoveHandPosは移動させるので、キャラクターがロープを離した時に元の位置に戻す必要があります。その為、MoveHandPosの最初の位置はdefalutStartPositionにあらかじめ保持しておきます。キャラクターがState.Ropeの状態の時はVector3.Leapで徐々にEndHandPosに移動させます。ある程度EndHandPosに近付いたらキャラクターの状態をState.Normalに戻します。RightHand、LeftHandの位置や角度もUnityの実行時に位置と角度を調整します。RightHand、LeftHandは実行時にインスペクタのTransformの歯車をクリックしCopyComponentを選択した後実行を解除し、Transformの歯車からPasteComponentValuesを選択し実行時の値をペーストします。SetStateメソッドではノーマル状態とロープを掴んだ状態に応じて設定を変更しています。SetRopePositionメソッドはロープのサーチエリア内に入った時、キャラクターの位置と角度をStartBasePositionと合わせます。その為、StartBasePositionのローカルのZ方向(青い矢印)はロープを下っていく方向に回転させておきます。することでキャラクターがロープのサーチエリアに入ったらロープを降りる方向に向くようになります。ResetHandPosメソッドは動かしたMoveHandPosを元の位置に戻す処理です。機能の確認をしてみるこれでロープを掴んで下りる機能が完成しました。HandIKは↑のように設定します。それでは実行して確認してみましょう。上のように手はロープを掴みキャラクターも移動します。上半身のアップだけだと分かりづらいので全体を確認します。上のようにロープを掴んで下りてくる動作が確認出来ました。ロープを下りる時は専用のカメラに切り替えて主人公の頭の後ろから覗くような感じにするのもいいかもしれません。0.1f)としている0.1fのところの数字を大きくすると目的地より前のスピードがある時にロープを離します。これでは目的地の所で離さず手前で離してしまって本来の目的地とは違う場所になります。それが嫌だという方は目的地との距離ではなく検知エリアを作りそこにキャラクターが入ったらロープを離すようにするといいかもしれません。MoveTowardsを使って同じ速度でロープの移動を行うもっと簡単に等速度でロープを降りたい時はVector3.MoveTowardsを使います。Time.deltaTimeのままだと遅いので5をかけました。↑のように同じ速度で最初の位置から目的地の位置まで移動するようになります。ダークソウル風のロープを降りる機能が出来ました!アクションゲームでロープをつたって降りる機能を作りたい時は参考にしてみてください。コピーかめくめちゃんをフォローする7Unityを使った3Dゲームの作り方(かめくめ)Unityを使った3Dゲームの作り方(かめくめ)関連記事プログラムUnityでRPGゲームのメッセージ表示機能を作るUnityでロールプレイングゲームのメッセージ表示機能を作成していきます。RPG以外でキャラクターの発言を表示したりする時にも使えますプログラムUnityでキャラクターがジャンプ出来るようにするUnityのゲームでキャラクターがジャンプ出来るようにする機能を作成します。プログラムUnityでタイムアタックゲームとリスタート機能を作るUnityでシンプルな最速タイムを競うゲームの作成とゲームオーバー時のリスタート機能を作るプログラムUnityのゲームキャラクター操作をすべてマウス操作で行うUnityのゲームで使用するキャラクターの移動やカメラの回転、カメラのズーム機能、カメラの壁対策、人との会話、敵を攻撃等のすべてをマウス操作で行う為の機能を作成していきます。プログラムUnityでゲームデータのセーブ・ロードを行う方法Unityのゲームで進行具合やキャラクターのステータスをデータとして保存しておき、それらのデータを読みだして続きから再開するというのは必須の機能になっています。その為に今回はゲームデータのセーブとロードが出来るようにしてみたいと思います。プログラムUnityで銃を構えた時バイオハザード風にカメラをキャラに寄せるUnityのガンシューティングゲームで銃を構えた時バイオハザード風にカメラをキャラに寄せる機能を作成しますUnityのアクションゲームで連続攻撃を実現する方法Unityでマウスクリックした位置にキャラクターを移動させる方法ホームプログラムスポンサーリンクサイト内検索が出来ますプロフィール管理人のかめくめちゃんです。(-_-)メールはこちらにお願いします(記事に関する質問は送らないでください、返信は期待しないでください(._.))。kamekumechan@gmail.comいずれはSIRENやバイオハザードみたいなアクションゲームを作りたいと思っています。ゲームシナリオが書けないので面白いゲームはなかなか作れません・・・・。(^_^;)名前の由来はカメが好きだからです。プロフィールになってないな・・・・(-.-)Unityをこれから始める人へこれからUnityを使ってみようという方はUnityを使った3Dゲームの作り方(かめくめ)の歩き方Unityを使った3Dゲームの作り方(かめくめ)で、はじめてUnityの学習をする時の当ブログの記事を読む順番を書きました。機能を積み上げていく形になるので便利かも?gametukurikata.com2019.06.21の記事に記載の順番で見て頂くとUnityの基本的な使い方がわかり、簡単なアクションゲームや、TPSゲームの作成までが出来ます。自作タイピングゲームタイピングゲームを作りました。WebGL形式なのでPCのブラウザで遊べます。以下からプレイ出来ます。FinalTypingUnityを使って作成したローマ字入力のタイピングゲームです。gametukurikata.com2022.01.02お知らせ2023/01/24個人的にUnity2022.2.3f1をインストールしました。2022/10/14UnityのIKを使って足の位置と角度を地面に合わせる機能Unityのゲームでキャラクターの両足が別の高さの地面の上にある時にそれぞれの足をそれぞれの地面につけるようにする機能を作成しますgametukurikata.com2016.04.11機能を少し修正しました。2020/09/19コメント欄は閉鎖しました。今までコメントを投稿してくださった方はありがとうございました。(^^)/2018/08/07わたくしに出来る事は既に記事にしてあるので、ブログ右上の検索窓を活用してください。(._.)またブログの最初の方の機能を積み上げていく記事に関しての疑問点は当ブログ記事のスクリプトの説明と寄せられた質問への回答Unityを使った3Dゲームの作り方(かめくめ)の機能積み上げ形式の記事のスクリプトの説明と寄せられた記事の機能についての質問への回答を掲載しています。gametukurikata.com2019.08.01Unityを使い始めたばかりの人がつまづきやすい点を解消するUnityを使い始めたばかりの人が結構な確率で陥る不具合や疑問点を解消していきます。基本的にはブログに寄せられた質問への回答という感じです。gametukurikata.com2018.12.04も参照してみてください。小・中学生によるデジタルコンテンツ開発の全国大会ですuycc.unity3d.jp2022年大会の先行エントリーが開始されているようです。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。記事の内容に質問がある方へUnityを使った3Dゲームの作り方(かめくめ)の歩き方UnityのJavaScriptとC#を読み替えてどちらでも対応出来るようにするホーム検索トップサイドバータイトルとURLをコピーしました。