【Unity】RayCastを使って障害物との距離を測る

”障害物を乗り越える”をテーマに挑戦している日々なんですが、 曲がりなりにも越える処理を作る事ができました。 しかし、処理時間と転倒時に乗り越えモードの終了ができない、 二つの問題点が残っています(T-T) グスッ これを解決するのに四苦八苦しているのですが、 いろいろ考えて思いついたので、記事にまとめてみます。 まず、動作の安定感を出す為に問題点を出してみました。 乗り越えモーションは、 障害物(黒ブロック)の左にあるOverZone(青のCollider)と言うトリガーを利用して、 OverComeModeに切り替えています。 ゾーンの内部で上キーを押せば、乗り越えモーションに切り替わるように 設定しているのですが、ゾーンの幅が1.5スケールあります。 当然、接触と同時にキー入力すれば差は1.5となりますが、 障害物寄りでキー入力すると距離は変化します。 ブロックの幅が1スケールでモーション起点が0~1.5スケールあるので、 距離としては、1~2.5の幅ができます。 最大速度を10としてるので、通過時間に0.1~0.25秒の差があります。 なので、モーションの時間を0.5秒として処理していましたが、 速度も変化するって事が最大の難点になっています。 仮に速度を2で移動させた場合、 1スケール進むのに0.5秒掛かってしまいます。 ゾーンの左端でモーションを起動すると幅が1.5あるので、 障害物の手前で処理が終…

続きを読む

【Unity】障害物を乗り越える処理を考える

アクションを作ると言う事で試行錯誤しているのですが、 前回、障害物で転倒する処理を作りました。 ただ、障害物をジャンプで越えるだけでは、少しツマラナイので、 手を加えたいなと考えています。 追加するのは、「乗り越え」です。 当然、上手く作れないので、悪戦苦闘してる毎日なんですが、 とにかく挑戦あるのみでっす。(^.^; オホホホ さて、乗り越えって事なんですが… 操作としては、障害物の近くでキー入力すると 速度を落とさずに乗り越えて行く感じにしたいな~ なんて考えています。 思いついたのはいいですが、実際作るのは難しいので、 試行錯誤しながら記事にしていこうと思います。 正直作れるかも分からないんで、興味のない方は読み飛ばして下さい。 ┐(´~`;)┌ かんべんシテネ 現状、ジャンプは速度が落ちないので、乗り越えとの格差がありません。 この辺りを修正する必要があります。 まず、通常ジャンプと乗り越えで速度を変える為にスクリプトを調整します。 調整としては、ジャンプの速度を落とすようにします。 ActionTest private const float speedMax = 10f; //最高速度 private const float speedMin = 2f; //最低速度 void Update() { SetLineca…

続きを読む

【Unity】Animationカーブを使って加速を演出

2021/8/8 グラフの数値を訂正・追記 2021/8/11一部修正 前回、転倒モーションを作ってみたのですが、 内容は、障害物に躓くと一回転して座り込む感じで処理をしました。 座り込む際に止まって、立ち上がると走り出す感じなんですが、 走り出しでトップスピードになるのも少々困りものでっす(- .-)ヾ ポリポリ やはり走り出しは、加速していく感じにしたいので、 処理を考えてみました。 当初は、Updateで秒数を読み取りスピードに加算する方法にしたのですが、 調べてみるとAnimationカーブってのが存在するそうなので、 折角なら使ってみたいですよね(^.^; オホホホ 上手く作れたかは置いといて、処理を考えたので記事にします。 (;^o^) \(ToT )あんたほんとにそれでいいの まず、Animationカーブってなんぞや?てことなんですが、 アニメーションクリップでそのプロパティーの変化を時系列に制御 スクリプトリファレンス抜粋 書いてみましたが、ちょっと何言ってるかわかんない(-_-)ゞ゛ウーム 簡単に言うと、グラフを使って時間に沿った処理を行えるみたいです。 位置、大きさ、etc 本来、アニメーションクリップと連動させて使うみたいですが、 スクリプトからグラフの曲線を読み取る事ができるようなので、 利用してみたいと思います。 まずテスト用に床と移動用のボールを作ります。 加速の違いを比…

続きを読む

【Unity】転倒モーションを作ってみる

スライディングまで作る事ができたので、 少しづつモーションを増やしていこうと思っているのですが、 キャラの制御処理が複雑になって、バグ祭り真っ最中のケロです(T-T) グスッ コロナで軒並み夏祭りが中止になっているのに、バグの祭りは大盛況でっす。 ( ̄ .  ̄)ノ" ナンデヤネン コロナとバグは早く治まって欲しいでっす。 愚痴から始めてしまいましたが、 そろそろ本題に戻ります。 今回は、店頭… もとい、転倒モーションを追加してみたので、 記事にしてみます。 まず転倒と言う事で、簡単に処理するならZ軸をフリーにするのが手っ取り早いのですが、 そうすると床との摩擦で回転するようになるので、 正直おすすめできません。 特に手足のモーションを入れていると 走ったままの態勢で回転するので、見た目に転倒していません(^.^; オホホホ 当然、アニメーションを追加して転倒モーションを作る必要があります。 転倒モーションの条件として、 ・障害ブロックで転倒する ・転倒したら動きが止まる この辺りを作る必要があるので、考えてみたいと思います。 アニメーションを作るのですが、 キャラの動作範囲が分かるように白背景を設定しておきます。 転倒は上下動が入ってくるので、 白背景の上下を基準にアニメーションの座標を設定します。 ただコケるだけでは見た目が面白くないので、 回転する要素を入れてみます。 当然、転倒回転中…

続きを読む

【Unity】スライディングをさせてみる

アクション物を作ると言う事で、 いろいろと試行錯誤しているのですが、 通常アクションの、走る、ジャンプ、落下まで作る事ができました。 これで動きができたので、 いよいよ自分好みのアクションを作って行くことになるわけなんですが… 今作っているアクション物は、逃げる系を想定しています。 なので、壁や谷間を上手く越えて逃げ切るようなアクションにしたいなと。 ただ、飛んで越えるだけでは面白くないんで、 隙間なんかを、スライディングで抜けれるとバリエーションも増えるので、 処理を作ってみたいと思います。 まず、スライディングなんですが、 ・寝かせるモーション ・床に接触している時だけできる ・モーションは、一定時間で走る動作にもどす この辺りが課題になりそうです。 まず、寝かせるモーションが必要なので、アニメーションクリップを作成します。 走ってる最中に寝かせるので、少しアングルを作ります。 開始0秒 0.1秒後 0.2秒でスライディングの態勢になります。 スライディングの時間をどれくらいに設定するかで、 態勢を何秒キープさせておくかになるんですが、 長くとりたい処理ができると編集し直す必要がでてくるので、 とりあえず4秒間キープするように設定しました。 これでモーションが出来たので、スクリプトを考えていきます。 まずスライディングは、一定時間で走るモーションに戻す必要があるので、 Upd…

続きを読む

【Unity】ジャンプと落下にモーションをつける

いろいろと移動処理を作ってきたのですが、 移動ができるとアクションにモーションを設定したくなってきます。 今回は、アクション系なら欲しいモーション ジャンプと落下のアニメーション連動を考えていこうと思います。 長い間、ブログの更新と勉強をお休みしていたのですが、 その辺りは無かった事にして、シレっと続きを書いていこうと思います。 ダメダコリャ!( ~っ~)/ σ(^_^;) さて、ジャンプと落下のモーションを作るって事なんですが、 まず床を走っている状態を作ります。 アニメーションのお勉強(IK編)で作った走るモーションを使います。 Linecastの設定は端折るので、共に過去記事を参考にして下さい。 ActionTest using System.Collections; using System.Collections.Generic; using UnityEngine; public class ActionTest : MonoBehaviour { [Header("レイヤーマスク")] public LayerMask floorLayer; private Rigidbody2D playerRB; //Rigidbody取得 private Animator motion; //Animator取得 pri…

続きを読む

【Unity】列挙体でAnimationの切り替え

長期放置をしていたプログラムなんですが、 ようやく忙しさが抜けてきたので、 ボチボチではありますが、復帰して行こうと思います。 長い間、いじってなかったんですが、 合間なんかに処理を考えていました。 考えた処理を実際に動かすと上手くいかなかったり、バグったりします。 なので、ブログに挙げる事ができなかったりするので、 まだまだカメ更新となりそうでっす。 (;^o^) \(ToT )あんたほんとにそれでいいの 本題に戻りますが、アクションが増えると アニメーションの切り替えが増えて困らないでしょうか? クリップの遷移方法には、int、float、bool、triggerとありますが、 ケロはintを使って、クリップをナンバー化したものを呼び出しています。 ナンバー化と言っても目で見える訳ではないので、 正直、スクリプトを組んでいると、どのクリップが何番? なんてことが多々あります。 いちいちアニメーターのトランジションを確認しなくてはいけないうえ、 数値を間違えると違うクリップが再生されて、パニくります (T-T) グスッ 少しでも面倒な部分や間違いを回避できるように 処理を考えてみました。 まず、今作ってるアニメーターのステートなんですが、 アクションが増えるとアニメーターも複雑になります。(;^_^A アセアセ・・・ ステートにナンバーを振ってみましたが、 正直、トランジションを確認しないと、 本当に、こ…

続きを読む

【Unity】カメラの移動を考える

長い間、冬眠ならぬ初夏眠しておりました。 2カ月も放置する事になるとは… (..*) オハズカシイ・・ 休んでる間に沢山の方に見に来ていただいて、 これではイカンなと思いまして、PCを立ち上げた次第です。 暫くPCから離れていて何も出来てないので、 ブログの内容がショボイですが、よろしくお願い致します。_(._.)_ ユルシテ さて、更新と言う事なんですが… アクションの続きを書きたい所なんですが、 作成や検証ができてないので、続きを書く事ができません。 そこで、今まで触れてこなかった、 カメラワークを記事にしてみようと思います。 アクションでは、キャラの移動に合わせて、 カメラや背景を動かす必要があります。 シューティング系なら背景移動がメインなので、固定もできるのですが、 アクションの場合は、そうもいきませんよね~ (-_-)ゞ゛ウーム なので、少し検証をしてみようと思います。 まずカメラの移動を考える際、二つのやり方があります。 ・スクリプトを組まずに移動させる ・スクリプトで移動させる スクリプトを組まずに移動させる これは、一番簡単で処理が楽になるパターンです。 キャラの中にメインカメラを入れてしまう方法です。 カメラが子になるので、必然的に追従してくれます。 操作で移動させるような、例えば、ドラクエのマップ移動 これならスクリプトを組まなくても処理できます。 しかし… アク…

続きを読む

【Unity】Colliderの設定とジャンプの高さ

アクション物を作ると言う事で、 いろいろと試している所なんですが、 改めて難しいと感じる今日この頃でっす。 ようやく動きも出来てきたのですが、 アニメーションで作った、アンドロイド君を動かせるように 試行錯誤していて気付いたというか、知らないというか… Colliderってどうやって設定するの?って事です。 (;^o^) \(ToT )今更かよ! 初心者本や説明サイトを見ていると キャラ全体にColliderが設定してあります。 手や足が動かせるので、大まかに設定するより パーツ単位で設定する方が、いろいろとよさそうな感じなんで、 Colliderの設定を考えてみたいと思います。 まず、本などでよく見かける設定方法を 親になる胴体でColliderを設定しました。 正直、手や足の稼働範囲を考えると、こんな感じになります。 しかし、これでは折角の手足の動きが自由になってるのに 使えないのが残念になります。 また、スライディングを考えているので、寝かせてみると… Colliderだけ置いてけぼりになります。(T-T) グスッ これでは意味がないので、パーツ毎にColliderを設定します。 試しに、左腕にColliderを設定してみました。 この状態で腕を動かすと やはりColliderが置いてけぼりになります。(T^T) ヒック 稼働範囲のColliderを設定するしかないのでしょうか… …

続きを読む

【Unity】壁の移動処理で悩む

前回、Rayの設定まで出来たので、 キャラクターの移動処理を考え行きます。 横スクロールのアクションと言う事で、 横に移動しながら、ジャンプ・壁を登る・スライディング・落下 こんな動きを実装したいなと考えています。 そこで、キャラクターを移動させる方法を勉強してみたいと思います。 簡単に移動実装させるならCharacterControllerがあるみたいですが、 折角なんで自前で考えてみようと思います。 ちなみにAndroidアプリを意識しているので、 横移動は、強制的に右移動させる予定です。 まず移動処理なんですが、今まではTransformを使っていました。 しかし、Rigidbodyを積んでるキャラには使えないって言うか向いてません。 なぜかと言うと、Transformは座標移動を強制的に行うので、 物理計算が効きません。 単純に言うと壁をすり抜けたりします。 また、Transform移動中でも物理計算が行われている為、 物理計算の移動と違う移動量だと物理計算が再計算を繰り返す為、 リソースを取るんだとか、 なのでTransformを使う場合はKinematicにする必要があります。 アクション系は、物理計算を使いたいので、 Transformは封印して、違う方法を探す事に… Google先生に聞いたところ、 Rigidbodyには、直接移動命令を出す事ができるって事です。 これなら物理計算の恩恵を受け…

続きを読む