InRangeノードの「Inclusive」とは??
ちょっとした小ネタです。
まず、InRangeノードの意味は分かりますか??
InRangeノードは、
Valueの値が、Min~Maxの範囲内に入っていれば、「True」を返す。
というノードです。
なので、以下のような場合だと↓
Trueになります。↓
Valueの値「-10」は、
Min「-10」~Max「10」の範囲内の値なので当然ですね。
Valueの値が、Min~Maxの範囲外であれば、↓
Falseになります。↓
ここまではいいでしょうか??
では、今回の本題に入りましょう!
InRangeノードを使ってる時、このチェックボックスが何か気になりませんか??
一体どういう意味なんだろう??と気になった方もいるんじゃないでしょうか??
(僕は結構気になってたw)
この
「InclusiveMin」
「InclusiveMax」
の2つは、
結構シンプルな意味を持ってるのです!
では、実際にInRangeノードを使ってみましょう!
まず、「InclusiveMin」「InclusiveMax」にチェックをつけた状態で使ってみましょう!
結果はTrue!
なんだかデジャブ感がありますが、当然の結果ですよねw
では、「InclusiveMin」のチェックを外してもう一度検証してみましょう!
おや??結果がFalseですね。
確かに、Valueの値は、Min~Maxの範囲内に入っている。
ではどうして、
「InclusiveMin」のチェックを外しただけでFalseになってしまったのでしょう??
まず「Inclusive」がどういう意味なのか??
Inclusive・・・~を含めて、入れて
です。
「InclusiveMin」・・・最小を含める(意訳です)
「InclusiveMax」・・・最大を含める(意訳d(ry)
そう、つまりInRangeノードの「Inclusive」チェックは、
最小値を含めて判定するか?(InclusiveMin)
最大値を含めて判定するか?(InclusiveMax)
という意味なのです!
さっき、「InclusiveMin」のチェックを外したらFalseになったのは、
最小値(Minの値)を除いて、Valueの値が範囲内かどうか判定されていたからです!
つまり、
Valueの値「-10」が
Minの値「-9(Minの値『-10』を除いた状態)」
から
Maxの値「10」
の範囲内に入っているかどうか??
と判定されていたので、
当然Falseになりますよね!
逆にInclusiveMaxのチェックだけ外したら、↓
Valueの値「-10」が
Minの値「-10」
から
Maxの値「9(Maxの値『10』を除いた状態)」
の範囲内かどうか
と判定されます!
ちなみにこれは、Trueになります。
ちゃんと範囲内に入ってますもんね。
今回のお話で、InRangeノードの「Inclusive」の意味がお分かりいただけたでしょうか??
お分かりいただけたなら幸いです!
それではまた!^^ノシ
キャラの移動速度と移動アニメーションのレートを左スティックの倒し具合に合わせる方法!
※説明不足・曖昧で適当な表現あり。(まあいつもの事か)
サードパーソンテンプレートを使って紹介する。
※今回はXboxのコントローラーを使用した際の説明になっている。
まず、左スティックを約半分倒した時、
キャラの移動アニメーションはどう見えるか?
※一部分かりやすいようにスローを使っている。
お分かりいただけただろうか。
地面をつるつる滑っている感じで、とても不自然。
地に足をついて歩いている感じがしないだろう。
なので今回は、そんな不自然さを無くすために・・・
左スティックの倒し具合で
キャラの移動速度と
アニメーションのレートを変える方法
を紹介する。
サードパーソンテンプレートに最初っから備わっているグレーマンの移動アニメーション(画像だと「ThirdPerson_IdleRun_2D」)をコピーし、
コピーしたもの(画像だと「ThirdPerson_IdleRun_2D_New」)を開いて改造しよう。
ThirdPerson_IdleRun_2D_New
以下のように改造しよう。
①ThirdPersonWalk
②ThirdPersonRun
グレーマンのアニメーションBP「ThirdPerson_AnimBP」を開こう。
イベントグラフ
関数を2つ作る。
「CalculateGaitValue」
「CalculatePlayRate」
「CalculateGaitValue」
Speed・・・キャラの速度
WalkingSpeed・・・最大歩行速度
RunningSpeed・・・最大走行速度
まず「Gait」の意味は??
Gait・・・足取り、足元、歩き方
である。
だが今回の場合は、「歩き方」という意味で捉えたほうが分かりやすいだろう。
つまり、この関数「CalculateGaitValue」は、
キャラの歩き方を定義するための値を計算する関数なのだ。
キャラのSpeedによって、Gait値を変えるようにしてある。
Gait値
0・・・Idle(直立)
1・・・Walk(歩行)
2・・・Run(走行)
『Idle(0)~Walk(1)に遷移するための処理』
キャラのSpeed(Value)が、「0(InRangeA)」の時、「0(OutRangeA)」を返す。
キャラのSpeed(Value)が「InRangeB(WalkingSpeed)」に設定した値に達した時、「1(OutRangeB)」を返す。
『Walk(1)~Run(2)に遷移するための処理』
キャラのSpeed(Value)が、「0(InRangeA)」の時、「1(OutRangeA)」を返す。
キャラのSpeed(Value)が「InRangeB(WalkingSpeed)」に設定した値に達した時、「2(OutRangeB)」を返す。
A(Speed)の値が、B(WalkingSpeed)の値より大きい場合、
Trueの値をGait変数に格納。そうじゃなければFalseの値を格納。
「CalculatePlayRate」
Gait・・・キャラの歩行状態
WalkAnimSpeed・・・キャラの最大歩行速度
RunAnimSpeed・・・キャラの最大走行速度
Speed・・・キャラの速度
ここら辺ちょっと理解が曖昧ですが・・・w
アニメーションレート
OutRangeA・・・0
OutRangeB・・・1
『歩行アニメーションレート計算処理』
キャラのSpeed(Value)が、「0(InRangeA)」の時、「0(OutRangeA)」を返す。
キャラのSpeed(Value)が「InRangeB(WalkingAnimSpeed)」に設定した値に達した時、「1(OutRangeB)」を返す。
『走行アニメーションレート計算処理』
キャラのSpeed(Value)が、「0(InRangeA)」の時、「0(OutRangeA)」を返す。
キャラのSpeed(Value)が「InRangeB(RunningAnimSpeed)」に設定した値に達した時、「1(OutRangeB)」を返す。
アニムグラフ
Idle
Run
Idle→Run
Run→Idle
グレーマンのBPを開こう。
CharacterMovement(継承)の詳細パネル
MaxWalkSpeedを、設定したRunnnigSpeedの値(375)と同じにする。
↓RunnnigSpeedの値と同じにする。
それでは実際にプレイしてみよう!
走行
左スティック全倒し
歩行
左スティック半倒し
ゆっくり目の歩行
左スティックちょい倒し
左スティックの倒し具合で、キャラのスピードとアニメーションのレートが変わっているのが分かる。
これでかなりリアルな移動アニメーション処理が出来た!
自分でもところどころ理解しきれていない部分があるので、ちょくちょく荒い説明になったかもしれないが、
こんな説明でも伝わってくれたら幸いだ。
それではまた!^^ノシ
簡単な瓦礫の作り方!
今回は、
瓦礫の作成方法!
を紹介する!
※瓦礫を作成する為には被破壊メッシュが必要なので、
被破壊メッシュのプラグインを有効にする。
有効が完了したら、ここから本題に入る。
まず破壊したいメッシュ(画像だと「Pillar_50×500」)の被破壊メッシュを作成。
被破壊メッシュの編集画面を開く。
EnableImpactDamageにチェックを入れる。
これで、この被破壊メッシュは何かしらの衝撃を受けた時に破壊されるようになる。
作成した被破壊メッシュをレベルに配置。
地面から離れた位置に置く。
配置した被破壊メッシュの「SimulatePhysics」を有効にする。
配置したら、シミュレートを開始する。
地面に落ちて崩れるだろう。
崩れた被破壊メッシュにマウスカーソルを重ね、右クリック。
赤枠で囲んである部分を選択。(”Pillar_50×500_DM”をスタティックメッシュへ変換)
スタティックメッシュに変換した被破壊メッシュの名前・保存先を決定する。
(画像では保存先を「コンテンツ」名前を「SM_Rubble」にしている)
変換したスタティックメッシュがしっかり保存されているのが分かる。
これで、被破壊メッシュをスタティックメッシュに変換する事が出来た!
もちろん変換したスタティックメッシュは好きなだけ配置できる。
ただ、変換した時点ではコリジョンがついてないので、コリジョンが必要な場合はスタティックメッシュ編集画面でコリジョンをつけよう。
さあ!君も色んな瓦礫を作ってみよう!( ◠‿◠ )
それではまた!^^ノシ
いつもと違うお話。そして現在の自分の状態
こんちゃ。
現在抑うつ状態です。
原因は、
・仕事
・理想と現実のギャップ
ざっとこの2つですね。
~仕事~
約3年ぐらい工場での仕事を続けています。
マシニングという機械加工による仕事ですね。
僕は、この職場に不満がありました。
・周りからの冷ややかな視線。陰口(これは思い込みの可能性ありw)
・夜勤が定時に来ない。定時の1時間後に来る。必ず。暗黙の了解なのかは不明。
夜勤は全員フィリピン人。17時が定時なのだが1時間後の18時に来る。なので、必ず1時間無駄な残業をしなければならない。ストレスがたまる。
・自分のやりたい仕事程後回しにされる。
「やらなければならない事>やりたい事」になる。
つまり、やりたい仕事よりもやらなければならない仕事のほうが多い。
たまにならまだしも、ほぼ毎回。
あるやらなければならない仕事がようやく終わって、
「よーし!やっとやりたい仕事ができる!」
そしたら社長から、
「次これやって」
・・・・・・やりたくもない仕事が来ました。
そっちよりも、俺こっちやりたいんですよと。
まあでも?僕も一応20歳超した社会人ですから?
「はい!」
快く引き受けます。表面上は。
「まあ、こういうことはどの社会でも起こりうることだよね!」
そう自分に言い聞かせ、我慢して我慢して、全てを割り切って働いてきました。
が、
そんな日々が続いたある日、
もう限界が来ました。
「毎日毎日同じことの繰り返し」
「こんな人生意味あるのか??」
「俺は都合のいいロボットか??」
頭の中でそんな言葉が渦巻きました。
社長から渡された仕事(図面)を握りつぶすぐらい、
頭が鉛のように重く、硬くなってしまうぐらい、
心臓がズキズキ痛むぐらい、
本当にもう限界でした。
誇張表現ではありません。本当に文字通りこんな感じでした。
そして社長に言いました。
「早退します。」
あのまま、また我慢して働いていたら自分がどうなっていたか・・・
考えるだけで頭の震えが止まらない。
心療内科に通い、医師に事情を説明しました。
「適応障害 抑うつ状態 一ヶ月の休職」という内容の診断書を貰い、
寝付けない日々が続いたので、睡眠薬も貰いました。
診断書を会社に渡すために社長に連絡をしました。
そしたら・・・
「皆、君と同じように我慢して働いている。君だけじゃない。だからそんな理由で診断書は出さない方がいい。」
と言われました。
・・・・・・正直ショックでした。
基本的に社長とは結構親しかったので、僕のメンタルの弱さ、そして現在の僕の状態を分かってくれてると思ったので、休ませてくれると思いました。
しかし、受け入れてくれず。浅はかな期待をしてしまったのでしょうか。
現在3日間仕事を休んでいるが、はっきり言ってもう働きたくないのです。
もう、我慢はしたくないのです。
我慢の対価はお金なのでしょうか??
お金を手に入れるには、我慢しかないのでしょうか??
そんなことを真剣に考えるようになりました。
我慢してお金が手に入ったとしても、その分自分のメンタルは擦り減ります。
メンタルが擦り減れば、あらゆるものに対する意欲、欲求、活力が失われます。
紙切れが積み重なる分、自分のメンタルは紙切れのように擦り減っていく。
結果、お金を大して使うこともなく、休みの日はだらだら。
これが毎日毎日続く・・・。
「皆、君と同じように我慢して働いている。君だけじゃない。だからそんな理由で診断書は出さない方がいい。」
皆が我慢してるから、自分もそうしなきゃいけないのでしょうか??
労働=我慢 なのでしょうか??
世の中、好きなことで生きている人が本当にうらやましいです。
堀江貴文さんや西野亮廣さん。HIKAKINさんやその他諸々・・・
僕も、好きなことで生きて生きたい!
「じゃあそうすりゃあいいじゃん。」そう思うでしょう。
ですが、1つだけ不安要素が。
家庭の事です。
~理想と現実のギャップ~
僕の家庭は4人家族です。(母、祖父、祖母、僕)
はっきりいって裕福ではないです。
当然母は働いてますが、母の職場の都合上午前中しか働けないみたいです。
僕は毎月10万家に入れています。
自分の給料から約7、8割ぐらいを渡してるような感じです。
もし、僕が働かなくなって自分の好きなことだけで生きたらどうなるか??
当然家に入れるお金は格段に減るでしょう。
最悪、1万も入れられないかもしれない。
例えばYoutuberをやっていくとしたら??
まあ茨の道でしょう。決して簡単に有名になって稼げるようになるとは思えません。
じゃあ我慢して働くか??
また、何年か働いてボロボロになるか??
そしてまた鬱になって、悶々と悩んで・・・
もうそんなこと繰り返したくはありません。
僕は、自分の好きなことをして生きていきたい。
けど、家庭も守っていきたい。
僕と同じような境遇の方はいますか??
そして、僕と同じような境遇を解決した方はいますか??
いたら、ぜひお話を聞きたいです。
段々文章が雑になってきましたw(いつもの事ですが)
もう文書もメンタルもボロボロなのでこの辺に。
コメントでの感想、質問などお気軽にどうぞ!大歓迎です!
それではまた!^^ノシ
開いて閉じることが出来るバイス作ってみた!
お久です!
最近UE4に心を折られてしばらくPS4でゲーム三昧だったが、またUE4をやりたくなってきたので、今回やったことを書こうと思う。
あまり役に立たなそうな内容かもだがまあ悪しからずw
まずタイトルにあるバイスというのは・・・
これである↓
ハンドルを回転させることで開け閉めが出来、何かを挟む為の器具である。(もっと知りたければggって!)
今回はそのバイスを作った。
こんな感じ↓
自由に開け閉めできてるのが分かるだろう。
ではレシピ。↓
使ったアセット
現在(2018年12月中)なら無料で手に入るので、ぜひ購入してみよう!
それでは本題↓
「BP_Clamp」という名前のActorクラスのBPを作成。
ClampBase↓
MoveClamp↓
MoveClampの位置↓
「X」を「8」にする。これで開ききった状態になる。
閉じ切った位置は「X:-3.5」である。
イベントグラフ
Qキーを押した時に、バイスを閉じる。
放した時に、バイスを開くという処理だ。
Qキー押した時の処理
前回開くアニメーションを停止した位置(StopReverseLocation)から、バイスが閉じ切った位置「X:-3.5」まで動かす。
タイムライン「OffSetClampPlay」
長さは「5秒」
「0秒」の時、値は「0」
「5秒」の時、値は「1」
Qキーを放した時の処理
前回閉じるアニメーションを停止した位置(StopPlayLocation)から、バイスが開ききった位置「X:8」まで動かす。
タイムライン「OffSetClampReverse」
長さは「1秒」
「0秒」の時、値は「0」
「1秒」の時、値は「1」
これで冒頭に載せた動画のように動くはずだ。
閉じるときは「5秒」かけて閉じる。
開くときは「1秒」で素早く開き戻る。
そして閉じてる最中、例えば「2秒」経った時にQキーを放すと、「2秒」経った時(バイスが閉じてる最中)の位置から、バイスが開ききった位置まで戻る。
赤線・・・開ききっている位置
青線・・・閉じてる最中の約「2秒」の時の位置
開ききっている状態↓
閉じてる最中「2秒」の時の状態↓
Qキーを放したら、青線の位置からそのまま赤線の位置に戻っていくという感じだ。
かなり分かりにくい説明だったかもしれない・・・w
分からなければ遠慮なく質問を!
それではまた!^^ノシ
Nearly Equalって??
値同士が同じかどうかを判定する「=」ノード
2つの値のどちらが大か小かは「>」「≧」「≦」「<」を使って判定を行う。
恐らくこれらのノードはよく使うと思う。
だがこれは多分あまり使ったことがないんじゃないんだろうか?
Nearly Equalノード
AとBの値がほぼ等しい場合Trueを返すノードだ。
だが、一体どの程度の差を「ほぼ等しい」というのか。
それは自分で設定できる。
例えば・・・
Aに「10」、Bに「9」を入れた。
まあ感じ方に個人差はあれど、ほぼ等しいと言えるだろうw
実際にプレイしてみると・・・
Falseと判定された。
等しくないと判定されたのだ。
今度はAに「10」、Bに「9.9」と入れてみる。
またもFalseだ。
全然等しくないらしい。
A「10」B「9.9」のまま、Error Toleranceに「0.5」を入れてやってみよう。
今度はTrueが出た。「ほぼ等しい」と判定されたのだ。
しかし何故、
A「10」B「9.9」を入れた状態で、Error Toleranceに「0.5」を入れたら「ほぼ等しい」と判定されたのか?
重要なのは「Error Tolerance」だ。
Error Toleranceは訳すと、「エラー耐性」
「?」と思うかもだが、Error Toleranceとは「ほぼ等しい」と判定される許容範囲を指定できる部分なのだ。
例えば・・・
A「10」B「9」にし、Error Toleranceに「1」を入れてみよう。
Trueと判定された。
理由は、AとBの差が「1以内」に入っていたからだ。
A「10」‐B「9」=「1(Error Toleranceの値)」
確かにAとBの差は「1」以内だ。
A「10」B「9.5」にしても同じ。
AとBの値の差が「1(Error Toleranceの値)以内」に入っているのでTrueになる。
逆にAとBの値の差がError Toleranceの値を超えるようなら当然Falseになる。
※ここで注意※
これは仕様なのか何なのか分からないが、Error Toleranceの値に「0.1」以下の値を入れると、たとえAとBの値の差が「0.1」以内だとしてもFalseと判定されてしまう。
例)
A「10」‐B「9.9」=「0.1」
明らかに「0.1」以内のはずなのだが、False扱いされてしまう。
何でぇ??詳しい方求ム!!!!!!!!
それではまた!^^ノシ
タイマー処理!(十の位とか一の位とかそんな感じの)
今回は、
この表記でのタイマー処理をする。
これがなかなか複雑で難しかった。(もっと効率的な方法があるのかな?)
イベントグラフ(僕はGameModeBaseに処理を組んだが、別にレベルBPでもなんでもいいです)
用意する変数
変数名の解説
Minute・・・分
Second・・・秒
TensPlace・・・十の位
OnePlace・・・一の位
まず「1・2・3・・・・・」と1秒おきにカウントするようにする。
1秒おきに「TimerSecondOnePlace(秒の一の位)」に「1」を足していく。
「TimerSecondOnePlace」が「10」、つまり「10秒」に達したら「TimerSecondTensPlace(秒の十の位)」に「1」を足す。
そして「TimerSecondOnePlace」の値を「0」にセット。
これで、
「TimerSecondTensPlace(1)」と「TimerSecondOnePlace(0)」で「10秒」になったわけだ。
↓これはタイマーが「9分60秒」に達した時、つまり「10分」になる瞬間の処理。
まず先に「10分」に達する前のFalseに繋がってる処理を見よう。
「TimerSecondTensPlace」が「6」、「TimerSecondOnePlace」が「0」、つまり「60秒」に達した時、「TimerMinuteOnePlace(分の一の位)」に「1」を足す。
そして、「TimerSecondTensPlace」を「0」にセット。
この時点で「TimerMinuteOnePlace(1)」と「TimerSecondTensPlace(0)」「TimerSecondOnePlace(0)」なので、「1分」経ったことになる。
次にTrueに繋がる処理を見よう。
「9分60秒」、つまり「10分」に達した時、処理はTrueを通る。
「TimerMinuteTensPlace(分の十の位)」に「1」を足す。そして「TimerMinuteOnePlace」の値を「0」にセット。
その後、「TimerSecondTensPlace」「TimerSecondOnePlace」の値を「0」にセットする。
これで、「10分」経ったことになる。
あとは、タイマーを表示するための処理を作って完成だ。
(UMGによるテキスト表示の説明は省きます・・・泣)
これでプレイ!
10秒に到達した時
1分に到達した時
10分に到達した時
しっかりタイマー処理が行われていた!
それではまた!^^ノシ