左スティックの倒し具合で、歩行・走行を切り替える方法!

皆さんは、

左スティックが

どれだけ倒されたかによって、

移動状態(歩行・走行)を切り替えたいッッッ・・・!

 

と思ったことはないでしょうか??(俺はありますよ??)

 

今回はそんな悩みを抱えた人たちの役に立つかもしれない記事を書きました。

 

やりたいことをそれなりに分かりやすく図にしました。↓

左スティックを上から見た感じの図ですね。

f:id:Free_Gamer:20190216224550p:plain

左スティックを何も倒していない時、Idle(図だと赤の部分の事)
左スティックを少し倒した状態~全開の手前まで倒していれば、Walk(図だと黄色の部分の事
左スティックを全開の手前~全開まで倒していれば、Run(図だと緑の部分の事)


これを実現するための方法を教えます。

 

※サードパーソンテンプレートを使用します。

 

ThirdPersonCharacterBPを開きましょう。

f:id:Free_Gamer:20190216231931p:plain

 

変数

f:id:Free_Gamer:20190216231629p:plain

MovementChangeValue・・・デフォルト値「0.9」 左スティックがこの値を超えた時に歩行状態(歩行・走行)を切り替える

ForwardAxis・・・Axis値

RightAxis・・・Axis値

F-Axis・・・画像の説明の通り

R-Axis・・・画像の説明の通り

 

イベントグラフ

f:id:Free_Gamer:20190216225142p:plain

 

f:id:Free_Gamer:20190216225341p:plain

左スティックがどれだけ倒されているかを
「CalsulateAnalogStickAxisValue」純粋関数で計算します。

自作関数ですね。

f:id:Free_Gamer:20190216225508p:plain

「CalsulateAnalogStickAxisValue」の中身↓

F-Axis・・・左スティックが前、あるいは後ろにどれだけ倒されているかの値

R-Axis・・・左スティックが左、あるいは右にどれだけ倒されているかの値

f:id:Free_Gamer:20190216225638p:plain

 

「GetForward/RightVector」マクロ

f:id:Free_Gamer:20190216225944p:plain

ただ単に見た目をコンパクトにする為だけにマクロにしてるだけですw

「GetForward/RightVector」の中身↓

f:id:Free_Gamer:20190216230028p:plain

 

 

f:id:Free_Gamer:20190216230203p:plain

「MaxInput??」という純粋関数で左スティックがどれだけ倒されているかを判定します。
自作関数です。

f:id:Free_Gamer:20190216230844p:plain

「MaxInput??」の中身↓

f:id:Free_Gamer:20190216230947p:plain

MovementChangeValueというのは、

 

左スティックがどれだけ倒されたかによって
移動状態(歩行、走行)を変える値の事です。

 

例えば、MovementChangeValueのデフォルト値を「0.5」にした場合。

 

左スティックを半分(0.5)以下の量まで倒していれば歩行

左スティックを半分(0.5)以上の量まで倒していれば走行

 

という事になります。

 

歩行時はMaxWalkSpeed・MinAnalogWalkSpeed「200」
走行時はMaxWalkSpeed・MinAnalogWalkSpeed「600」

f:id:Free_Gamer:20190216232346p:plain

さて、さりげなく出てきた

 

MinAnalogWalkSpeed

 

とは何なのか??

 

MinAnalogWalkSpeedとは、

 

左スティックが倒された時の最小歩行速度

 

の事です。

 

例えば、MinAnalogWalkSpeedの値を「100」に設定した場合

 

左スティックを倒し始めた時の最小歩行速度は「100」になります。

 

そこから更に左スティックを倒すと、速度はMaxWalkSpeedの値まで到達しようとします。

 

MinAnalogWalkSpeedの値の設定は、CharacterMovementの詳細パネルで出来ます。

f:id:Free_Gamer:20190217000051p:plain

 

さて、実際にやってみましょう!

 

youtu.be

 

まあ、映像じゃさっぱり分からないですよねww

 

でも実際にやってみればわかります。

 

左スティックを全開まで倒せば走行

それ以外は全部歩行になるはずです。

 

それではまた!^^ノシ

 

 

 

 

 

 

 

ダッシュ中のスタミナの減少・増加方法!

かなりのお久しぶりです。

ちゃんと生きていました。

と言ってもこれだけ更新期間が無ければ、こんなこと言ったところでもうほぼほぼ誰も見ていないと思いますがw

でもこの記事が、今後迷えるUE4ユーザーさんの助けになれば幸いです。

そしてもし頭のいい人がいるなら、僕の教えたやり方を更により良くしてくれても構いません。

さて、長ったらしい前置きはお終い。本題に入りましょう!

 

今回やりたい事

・Shiftキーを押していて、移動中であればダッシュ。キャラのスピードが増加。
 Shiftキーを放す、あるいはShiftキーを押したまま移動をやめたらダッシュ解除。

 通常速度に戻る。

ダッシュ中はスタミナ減少。スタミナが「0」になると、ダッシュ不可。通常速度に戻る。

・スタミナが一定値まで回復するまでは何度Shiftキーを押してもダッシュは不可。

 スタミナが一定値まで回復すればダッシュ可能。

・スタミナが減る条件↓

 ・地面にいること

 ・ダッシュ中であること

 ・スタミナが「0」以上であること

 

 

それではやっていきましょう。

 

 

使うのはサードパーソンテンプレート。キャラクターBPを開きましょう。

f:id:Free_Gamer:20190210130802p:plain

イベントグラフはこんな感じです。

f:id:Free_Gamer:20190210150436p:plain
変数は以下の通り。

f:id:Free_Gamer:20190210131558p:plain

CurrentStamina・・・デフォルト値「100」

SprintSpeed・・・デフォルト値「1200」

MaxStamina・・・デフォルト値「100」

DashResumableValue・・・デフォルト値「30」

DecreaseStaminaRate・・・デフォルト値「0.5」

IncreaseStaminaRate・・・デフォルト値「0.1」

Sprint・・・ダッシュキーが押されたかどうかのBool値。デフォルト値「False」

MyUMG・・・UMGの参照変数

DecreaseStaminaTimer・・・スタミナを減少させるためのタイマー変数。Tickの代わり。

IncreaseStaminaTimer・・・スタミナを増加させるためのタイマー変数。Tickの代わり。

 

まず、ゲーム開始時スタミナゲージを表示するためのUMGを表示。

その後、スタミナ値をインターフェースでUMGに渡します。

f:id:Free_Gamer:20190210150711p:plain

 

キーが押されているかを取得

押しているときは、True
押していないときは、False

f:id:Free_Gamer:20190210133428p:plain

さて、冒頭で述べたように

 

Shiftキーを押していて、移動してればダッシュ

 

と言いました。

 

つまり、移動中「Shiftキーを長押し」していればダッシュ可能という事。

 

ですが生憎、このインプットアクションキーというのは、

 

キーが押された瞬間・キーが放された瞬間しか処理が流れないのです。

では、どうやってキーを押している間処理を走らせるのか??

 

以下のマクロを使用しましょう!

f:id:Free_Gamer:20190210133337p:plain

これは自作マクロです。中身は以下の通り。

キーを押している間は、このマクロ内をひたすらループし、ひたすら処理を流します。

Sprintキーが放されたらループ解除です。

Delayを挟まないと、「おい無限ループしてんぞ!?」みたいな感じでUE4側からお怒りのエラーメッセージが来ますw

f:id:Free_Gamer:20190210133943p:plain

では、実際にダッシュが可能かどうかを判定する処理「SprintCheckGraph」の中身を見てみましょう。

f:id:Free_Gamer:20190210134328p:plain

 

SprintCheckGraphの中身は以下通り。

f:id:Free_Gamer:20190210134732p:plain

 

まず、ダッシュ可能かどうかの判定

f:id:Free_Gamer:20190210134842p:plain

CanSprintというノードは、純粋化(ピュア化)した自作関数です。

中身はこんな感じ。

f:id:Free_Gamer:20190210135045p:plain

 

ダッシュ可能(True)の場合、まずスタミナ値が一定値を超しているかの判定を行います。

f:id:Free_Gamer:20190210135432p:plain

これは冒頭で述べた

 

スタミナが一定値まで回復するまでは何度Shiftキーを押してもダッシュは不可。

 

という仕様を実現させるためです。

 

DashResumableImmediately??というノードも、純粋化した自作関数です。

中身↓

f:id:Free_Gamer:20190210135602p:plain

ダッシュ可能で、現在のスタミナが一定値を超していればダッシュ可能。

 

タイマー処理でダッシュ処理・スタミナ増減処理を行います。

「0.01」のレートでタイマーをループさせてます。Tickの代わりですね。

f:id:Free_Gamer:20190210135856p:plain

TimerノードのFunctionNameには以下のように名前を入れましょう。

この名前は、自分で作ったカスタムイベント名の事です。

この後出てきます。

f:id:Free_Gamer:20190210140215p:plain


SprintCheckGraphは以上です。

 

次は、「SprintSystem」の中身を見ていきましょう。

f:id:Free_Gamer:20190210140443p:plain

中身↓

f:id:Free_Gamer:20190210140546p:plain

 

まず、スタミナ減少処理から見ていきましょう。

 

スタミナ減少処理↓

 

f:id:Free_Gamer:20190210140638p:plain

DecreaseStaminaイベントがTimerノードから呼び出された時、スタミナの減少処理を「CalculateDecreaseStaminaAmount」関数で行います。

これも自作関数です。

 

CalculateDecreaseStaminaAmount関数の中身↓

現在のスタミナをDecreaseStaminaRateの値分減算していきます。

f:id:Free_Gamer:20190210141033p:plain

 

現在のスタミナが「0」かを判定

f:id:Free_Gamer:20190210141250p:plain

 

False・・・スタミナが「0」じゃない場合↓

f:id:Free_Gamer:20190210141345p:plain

現在のスタミナを、スタミナ上限値「MaxStamina」で割り、「1~0」の値にします。

これは、UMGでプログレスバーを使ってスタミナゲージの表示を行うので、割り算をし「1~0」の値に変えているわけです。

プログレスバーは「1~0」の値しか受け付けないので。

割り算した値を、インターフェースでUMGに渡します。

その後、SprintSpeedの値をMaxWalkSpeedにセット。

 

True・・・スタミナが「0」だった場合↓

スタミナ減少処理のタイマーノードを停止。

その後、スタミナ増加処理のタイマーノードを呼び出します。

f:id:Free_Gamer:20190210142329p:plain

 

スタミナ増加処理↓

f:id:Free_Gamer:20190210143148p:plain

IncreaseStaminaイベントがTimerノードから呼び出された時、スタミナの増加処理を「CalculateIncreaseStaminaAmount」関数で行います。

自作関数です。

 

CalculateIncreaseStaminaAmount関数の中身↓

現在のスタミナにIncreaseStaminaRateの値分加算していきます。

スタミナ値が上限値を超えないよう、Clampで範囲を設けています。

f:id:Free_Gamer:20190210143314p:plain

 

スタミナ値が一定値を超しているかを判定。

f:id:Free_Gamer:20190210143603p:plain

 

False・・・スタミナ値が一定値に達していない場合↓

f:id:Free_Gamer:20190210143959p:plain

↑スタミナ値(CurrentStamina)がスタミナ上限値と同じかどうかを判定。

 

上限値と同等じゃない場合は、スタミナ値をスタミナ上限値で割った値をインターフェースでUMGに渡す。

上限値と同等の場合、スタミナ増加処理のタイマーノードを停止。

f:id:Free_Gamer:20190210144448p:plain

 

True・・・スタミナ値が一定値を超している場合↓

f:id:Free_Gamer:20190210144644p:plain

スタミナ増加処理のタイマーノードを停止。スタミナ減少処理のタイマーノードを呼び出す。

 

キャラクターBPは以上になります。

 

 

あとは、スタミナ値を表示するためのUMGを作成しましょう!

「MyUMG」という名前で作成しました。

f:id:Free_Gamer:20190210150915p:plain

 

プログレスバーを左上に設置しただけです。

f:id:Free_Gamer:20190210151023p:plain

 

UMGのイベントグラフです。↓

f:id:Free_Gamer:20190210151254p:plain

 

これですべて完了です!

 

実際にやってみましょう!

www.youtube.com

 

しっかり速度が変化してるか分かりやすくする為に、周りに柱を何本か置きました。

分かりやすければいいのですがw

 

あとは実際にやって色々確かめてみてください!

 

それではまた!^^ノシ







 

InRangeノードの「Inclusive」とは??

ちょっとした小ネタです。

 

まず、InRangeノードの意味は分かりますか??

 

InRangeノードは、

 

Valueの値が、Min~Maxの範囲内に入っていれば、「True」を返す。

 

というノードです。

 

なので、以下のような場合だと↓

f:id:Free_Gamer:20190108002218p:plain

Trueになります。

f:id:Free_Gamer:20190108002239p:plain

Valueの値「-10」は、

Min「-10」~Max「10」の範囲内の値なので当然ですね。


Valueの値が、Min~Maxの範囲外であれば、↓

f:id:Free_Gamer:20190108002432p:plain

Falseになります。

f:id:Free_Gamer:20190108002452p:plain

 

ここまではいいでしょうか??


では、今回の本題に入りましょう!

 

 

InRangeノードを使ってる時、このチェックボックスが何か気になりませんか??

f:id:Free_Gamer:20190108001514p:plain

一体どういう意味なんだろう??と気になった方もいるんじゃないでしょうか??
(僕は結構気になってたw)

 

この
「InclusiveMin」
「InclusiveMax」

の2つは、

 

結構シンプルな意味を持ってるのです!

 

では、実際にInRangeノードを使ってみましょう!

 

まず、「InclusiveMin」「InclusiveMax」にチェックをつけた状態で使ってみましょう!

f:id:Free_Gamer:20190108002218p:plain

結果はTrue!

f:id:Free_Gamer:20190108002239p:plain

なんだかデジャブ感がありますが、当然の結果ですよねw

 

では、「InclusiveMin」のチェックを外してもう一度検証してみましょう!

f:id:Free_Gamer:20190108003147p:plain

おや??結果がFalseですね。

f:id:Free_Gamer:20190108002452p:plain

 

確かに、Valueの値は、Min~Maxの範囲内に入っている。

f:id:Free_Gamer:20190108003436p:plain

 

ではどうして、

「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のチェックだけ外したら、

f:id:Free_Gamer:20190108005038p:plain

Valueの値「-10」が

Minの値「-10」

から

Maxの値「9(Maxの値『10』を除いた状態)」

の範囲内かどうか

 

と判定されます!

 

ちなみにこれは、Trueになります。

ちゃんと範囲内に入ってますもんね。

 

今回のお話で、InRangeノードの「Inclusive」の意味がお分かりいただけたでしょうか??

 

お分かりいただけたなら幸いです!

 

それではまた!^^ノシ

 

 

 

 

キャラの移動速度と移動アニメーションのレートを左スティックの倒し具合に合わせる方法!

※説明不足・曖昧で適当な表現あり。(まあいつもの事か)

 

 

サードパーソンテンプレートを使って紹介する。

f:id:Free_Gamer:20181225001309p:plain

※今回はXboxのコントローラーを使用した際の説明になっている。

 

まず、左スティックを約半分倒した時、

キャラの移動アニメーションはどう見えるか?

※一部分かりやすいようにスローを使っている。

youtu.be

お分かりいただけただろうか。

 

地面をつるつる滑っている感じで、とても不自然。

地に足をついて歩いている感じがしないだろう。

 

なので今回は、そんな不自然さを無くすために・・・

 

左スティックの倒し具合で

キャラの移動速度と

アニメーションのレートを変える方法

 

を紹介する。

 

サードパーソンテンプレートに最初っから備わっているグレーマンの移動アニメーション(画像だと「ThirdPerson_IdleRun_2D」)をコピーし、

コピーしたもの(画像だと「ThirdPerson_IdleRun_2D_New」を開いて改造しよう。

f:id:Free_Gamer:20181225002015p:plain

 

ThirdPerson_IdleRun_2D_New

以下のように改造しよう。

①ThirdPersonWalk

②ThirdPersonRun

f:id:Free_Gamer:20181225002508p:plain

f:id:Free_Gamer:20181225002627p:plain

レーマンのアニメーションBP「ThirdPerson_AnimBP」を開こう。

f:id:Free_Gamer:20181225003424p:plain

 

イベントグラフ

f:id:Free_Gamer:20181225003530p:plain

関数を2つ作る。

「CalculateGaitValue」

「CalculatePlayRate」

f:id:Free_Gamer:20181225003749p:plain

 

「CalculateGaitValue」

Speed・・・キャラの速度

WalkingSpeed・・・最大歩行速度

RunningSpeed・・・最大走行速度

f:id:Free_Gamer:20181225005350p:plain

f:id:Free_Gamer:20181225004330p:plain

まず「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)」を返す。

f:id:Free_Gamer:20181225010053p:plain

『Walk(1)~Run(2)に遷移するための処理』

キャラのSpeed(Value)が、「0(InRangeA)」の時、「1(OutRangeA)」を返す。

キャラのSpeed(Value)が「InRangeB(WalkingSpeed)」に設定した値に達した時、「2(OutRangeB)」を返す。

 f:id:Free_Gamer:20181225010104p:plain

A(Speed)の値が、B(WalkingSpeed)の値より大きい場合、

f:id:Free_Gamer:20181225010859p:plain

Trueの値をGait変数に格納。そうじゃなければFalseの値を格納。

f:id:Free_Gamer:20181225011215p:plain

 

「CalculatePlayRate」

Gait・・・キャラの歩行状態

WalkAnimSpeed・・・キャラの最大歩行速度

RunAnimSpeed・・・キャラの最大走行速度

Speed・・・キャラの速度

ここら辺ちょっと理解が曖昧ですが・・・w

f:id:Free_Gamer:20181225014338p:plain

f:id:Free_Gamer:20181225021355p:plain


アニメーションレート

OutRangeA・・・0

OutRangeB・・・1

 

『歩行アニメーションレート計算処理』

キャラのSpeed(Value)が、「0(InRangeA)」の時、「0(OutRangeA)」を返す。

キャラのSpeed(Value)が「InRangeB(WalkingAnimSpeed)」に設定した値に達した時、「1(OutRangeB)」を返す。

f:id:Free_Gamer:20181225015631p:plain

『走行アニメーションレート計算処理』

キャラのSpeed(Value)が、「0(InRangeA)」の時、「0(OutRangeA)」を返す。

キャラのSpeed(Value)が「InRangeB(RunningAnimSpeed)」に設定した値に達した時、「1(OutRangeB)」を返す。

f:id:Free_Gamer:20181225015644p:plain

 

アニムグラフ

f:id:Free_Gamer:20181225022012p:plain
Idle

f:id:Free_Gamer:20181225021803p:plain

Run

f:id:Free_Gamer:20181225021930p:plain

Idle→Run

f:id:Free_Gamer:20181225022052p:plain

Run→Idle

f:id:Free_Gamer:20181225022123p:plain

 

 

レーマンのBPを開こう。

f:id:Free_Gamer:20181225022738p:plain

CharacterMovement(継承)の詳細パネル

MaxWalkSpeedを、設定したRunnnigSpeedの値(375)と同じにする。

f:id:Free_Gamer:20181225022622p:plain

f:id:Free_Gamer:20181225022919p:plain

↓RunnnigSpeedの値と同じにする。

f:id:Free_Gamer:20181225023053p:plain

 


それでは実際にプレイしてみよう!

走行

左スティック全倒し

youtu.be


歩行

左スティック半倒し

youtu.be

 

ゆっくり目の歩行

左スティックちょい倒し

youtu.be

 

左スティックの倒し具合で、キャラのスピードとアニメーションのレートが変わっているのが分かる。

これでかなりリアルな移動アニメーション処理が出来た!

 

自分でもところどころ理解しきれていない部分があるので、ちょくちょく荒い説明になったかもしれないが、

こんな説明でも伝わってくれたら幸いだ。

 

それではまた!^^ノシ







 

 

簡単な瓦礫の作り方!

今回は、

 

瓦礫の作成方法!

 

を紹介する!

 

※瓦礫を作成する為には被破壊メッシュが必要なので、

 

被破壊メッシュのプラグインを有効にする。

f:id:Free_Gamer:20181221175435p:plain

有効が完了したら、ここから本題に入る。

 

まず破壊したいメッシュ(画像だと「Pillar_50×500」)の被破壊メッシュを作成。

f:id:Free_Gamer:20181221175841p:plain

 

被破壊メッシュの編集画面を開く。

EnableImpactDamageにチェックを入れる。

これで、この被破壊メッシュは何かしらの衝撃を受けた時に破壊されるようになる。

f:id:Free_Gamer:20181221180004p:plain

 

作成した被破壊メッシュをレベルに配置。

地面から離れた位置に置く。

f:id:Free_Gamer:20181221180453p:plain

 

配置した被破壊メッシュの「SimulatePhysics」を有効にする。

f:id:Free_Gamer:20181221181015p:plain

 

配置したら、シミュレートを開始する。

f:id:Free_Gamer:20181221180741p:plain

地面に落ちて崩れるだろう。

f:id:Free_Gamer:20181221181106p:plain

 

崩れた被破壊メッシュにマウスカーソルを重ね、右クリック。

赤枠で囲んである部分を選択。(”Pillar_50×500_DM”をスタティックメッシュへ変換)

f:id:Free_Gamer:20181221181603p:plain

スタティックメッシュに変換した被破壊メッシュの名前・保存先を決定する。

(画像では保存先を「コンテンツ」名前を「SM_Rubble」にしている)

f:id:Free_Gamer:20181221181824p:plain

変換したスタティックメッシュがしっかり保存されているのが分かる。

f:id:Free_Gamer:20181221182043p:plain

これで、被破壊メッシュをスタティックメッシュに変換する事が出来た!

 

もちろん変換したスタティックメッシュは好きなだけ配置できる。

ただ、変換した時点ではコリジョンがついてないので、コリジョンが必要な場合はスタティックメッシュ編集画面でコリジョンをつけよう。

f:id:Free_Gamer:20181221182331p:plain

 

さあ!君も色んな瓦礫を作ってみよう!( ◠‿◠ ) 

 

それではまた!^^ノシ

 

いつもと違うお話。そして現在の自分の状態

こんちゃ。

現在抑うつ状態です。

原因は、

・仕事

・理想と現実のギャップ

ざっとこの2つですね。

 

~仕事~

約3年ぐらい工場での仕事を続けています。

マシニングという機械加工による仕事ですね。

僕は、この職場に不満がありました。

・周りからの冷ややかな視線。陰口(これは思い込みの可能性ありw)

・夜勤が定時に来ない。定時の1時間後に来る。必ず。暗黙の了解なのかは不明。

夜勤は全員フィリピン人。17時が定時なのだが1時間後の18時に来る。なので、必ず1時間無駄な残業をしなければならない。ストレスがたまる。

・自分のやりたい仕事程後回しにされる。

「やらなければならない事>やりたい事」になる。

つまり、やりたい仕事よりもやらなければならない仕事のほうが多い。

たまにならまだしも、ほぼ毎回。

あるやらなければならない仕事がようやく終わって、

「よーし!やっとやりたい仕事ができる!」

そしたら社長から、

「次これやって」

・・・・・・やりたくもない仕事が来ました。

そっちよりも、俺こっちやりたいんですよと。

まあでも?僕も一応20歳超した社会人ですから?

「はい!」

快く引き受けます。表面上は。

「まあ、こういうことはどの社会でも起こりうることだよね!」

そう自分に言い聞かせ、我慢して我慢して、全てを割り切って働いてきました。

 

が、

 

そんな日々が続いたある日、

 

もう限界が来ました。

 

「毎日毎日同じことの繰り返し」

「こんな人生意味あるのか??」

「俺は都合のいいロボットか??」

頭の中でそんな言葉が渦巻きました。

 

社長から渡された仕事(図面)を握りつぶすぐらい、

頭が鉛のように重く、硬くなってしまうぐらい、

心臓がズキズキ痛むぐらい、

本当にもう限界でした。

誇張表現ではありません。本当に文字通りこんな感じでした。

 

そして社長に言いました。

「早退します。」

 

あのまま、また我慢して働いていたら自分がどうなっていたか・・・

考えるだけで頭の震えが止まらない。

 

心療内科に通い、医師に事情を説明しました。

適応障害 抑うつ状態 一ヶ月の休職」という内容の診断書を貰い、

寝付けない日々が続いたので、睡眠薬も貰いました。

 

診断書を会社に渡すために社長に連絡をしました。

そしたら・・・

 

「皆、君と同じように我慢して働いている。君だけじゃない。だからそんな理由で診断書は出さない方がいい。」

 

と言われました。

・・・・・・正直ショックでした。

基本的に社長とは結構親しかったので、僕のメンタルの弱さ、そして現在の僕の状態を分かってくれてると思ったので、休ませてくれると思いました。

 

しかし、受け入れてくれず。浅はかな期待をしてしまったのでしょうか。

 

現在3日間仕事を休んでいるが、はっきり言ってもう働きたくないのです。

 

もう、我慢はしたくないのです。

 

我慢の対価はお金なのでしょうか??

 

お金を手に入れるには、我慢しかないのでしょうか??

 

そんなことを真剣に考えるようになりました。

 

我慢してお金が手に入ったとしても、その分自分のメンタルは擦り減ります。

メンタルが擦り減れば、あらゆるものに対する意欲、欲求、活力が失われます。

紙切れが積み重なる分、自分のメンタルは紙切れのように擦り減っていく。

結果、お金を大して使うこともなく、休みの日はだらだら。

これが毎日毎日続く・・・。

 

「皆、君と同じように我慢して働いている。君だけじゃない。だからそんな理由で診断書は出さない方がいい。」

 

皆が我慢してるから、自分もそうしなきゃいけないのでしょうか??

 

労働=我慢 なのでしょうか??

 

世の中、好きなことで生きている人が本当にうらやましいです。

堀江貴文さんや西野亮廣さん。HIKAKINさんやその他諸々・・・

 

僕も、好きなことで生きて生きたい!

 

「じゃあそうすりゃあいいじゃん。」そう思うでしょう。

 

ですが、1つだけ不安要素が。

 

家庭の事です。

 

~理想と現実のギャップ~

僕の家庭は4人家族です。(母、祖父、祖母、僕)

はっきりいって裕福ではないです。

当然母は働いてますが、母の職場の都合上午前中しか働けないみたいです。

 

僕は毎月10万家に入れています。

自分の給料から約7、8割ぐらいを渡してるような感じです。

 

もし、僕が働かなくなって自分の好きなことだけで生きたらどうなるか??

当然家に入れるお金は格段に減るでしょう。

最悪、1万も入れられないかもしれない。

例えばYoutuberをやっていくとしたら??

まあ茨の道でしょう。決して簡単に有名になって稼げるようになるとは思えません。

 

じゃあ我慢して働くか??

また、何年か働いてボロボロになるか??

そしてまた鬱になって、悶々と悩んで・・・

 

もうそんなこと繰り返したくはありません。

 

僕は、自分の好きなことをして生きていきたい。

けど、家庭も守っていきたい。

 

僕と同じような境遇の方はいますか??

そして、僕と同じような境遇を解決した方はいますか??

 

いたら、ぜひお話を聞きたいです。

 

段々文章が雑になってきましたw(いつもの事ですが)

もう文書もメンタルもボロボロなのでこの辺に。

 

コメントでの感想、質問などお気軽にどうぞ!大歓迎です!

 

それではまた!^^ノシ

開いて閉じることが出来るバイス作ってみた!

お久です!

最近UE4に心を折られてしばらくPS4でゲーム三昧だったが、またUE4をやりたくなってきたので、今回やったことを書こうと思う。

あまり役に立たなそうな内容かもだがまあ悪しからずw

 

まずタイトルにあるバイスというのは・・・

これである↓

f:id:Free_Gamer:20181209222400j:plain

ハンドルを回転させることで開け閉めが出来、何かを挟む為の器具である。(もっと知りたければggって!)

 

今回はそのバイスを作った。

こんな感じ↓

youtu.be

 

自由に開け閉めできてるのが分かるだろう。

 

ではレシピ。↓

 

使ったアセット

f:id:Free_Gamer:20181209225530p:plain

www.unrealengine.com

現在(2018年12月中)なら無料で手に入るので、ぜひ購入してみよう!

 

それでは本題↓

「BP_Clampという名前のActorクラスのBPを作成。

f:id:Free_Gamer:20181210023235p:plain

コンポーネント

f:id:Free_Gamer:20181210023602p:plain

ClampBase↓

f:id:Free_Gamer:20181210023737p:plain

f:id:Free_Gamer:20181210023844p:plain

MoveClamp↓

f:id:Free_Gamer:20181210023905p:plain

f:id:Free_Gamer:20181210023921p:plain

MoveClampの位置↓

f:id:Free_Gamer:20181210025243p:plain

「X」を「8」にする。これで開ききった状態になる。

閉じ切った位置は「X:-3.5」である。

 

イベントグラフ

f:id:Free_Gamer:20181210024202p:plain

Qキーを押した時に、バイスを閉じる。

f:id:Free_Gamer:20181210024646p:plain

放した時に、バイスを開くという処理だ。

f:id:Free_Gamer:20181210024709p:plain

Qキー押した時の処理

f:id:Free_Gamer:20181210024750p:plain

前回開くアニメーションを停止した位置(StopReverseLocation)から、バイスが閉じ切った位置「X:-3.5」まで動かす。

f:id:Free_Gamer:20181210024812p:plain

タイムライン「OffSetClampPlay」

長さは「5秒」

「0秒」の時、値は「0」

「5秒」の時、値は「1」

f:id:Free_Gamer:20181210030241p:plain

Qキーを放した時の処理

f:id:Free_Gamer:20181210024855p:plain

前回閉じるアニメーションを停止した位置(StopPlayLocation)から、バイスが開ききった位置「X:8」まで動かす。

f:id:Free_Gamer:20181210024917p:plain

タイムライン「OffSetClampReverse」

長さは「1秒」

「0秒」の時、値は「0」

「1秒」の時、値は「1」

f:id:Free_Gamer:20181210030419p:plain

 

これで冒頭に載せた動画のように動くはずだ。

閉じるときは「5秒」かけて閉じる。

開くときは「1秒」で素早く開き戻る。

そして閉じてる最中、例えば「2秒」経った時にQキーを放すと、「2秒」経った時(バイスが閉じてる最中)の位置から、バイスが開ききった位置まで戻る。

赤線・・・開ききっている位置

青線・・・閉じてる最中の約「2秒」の時の位置

開ききっている状態↓

f:id:Free_Gamer:20181210031607p:plain

閉じてる最中「2秒」の時の状態↓

f:id:Free_Gamer:20181210031316p:plain

Qキーを放したら、青線の位置からそのまま赤線の位置に戻っていくという感じだ。

 

かなり分かりにくい説明だったかもしれない・・・w

分からなければ遠慮なく質問を!

 

それではまた!^^ノシ