Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

【Unity】 振り子を作る 【HingeJoint + LineRenderer】

今回はUnityネタをやっていきます。
Unityで振り子を作る方法についてまとめておきます

 

直近のUnity 1週間ゲームジャムでリール動画を作成しました。

youtu.be

 

お題が表示されるシーンはUnityで作成していて、その時の実装方法についてまとめておきます。

 

 

開発環境

Unity 2021.3.12f1

 

 

支点と振り子の作成

支点となるオブジェクトと、振り子(揺れる)となるオブジェクトを作成します。

支点の作成

シーン内にCubeを作成、名前を「Pivot」に変更。
Rigidbodyをアタッチし、IsKinematicにチェックを入れます。

 

振り子の作成

シーン内にSphereを作成、名前を「Furiko」に変更。
Rigidbodyをアタッチします。

HingeJointのアタッチ

振り子の揺れる処理はHingeJointコンポーネント*1を使用します。
これは2つのRigidbodyをつなげて動きに制限をつけるコンポーネントです。

docs.unity3d.com

 

 

「Furiko」にHingeJointコンポーネントをアタッチ
ConnectedBodyにPivotを指定、AnchorのYを5、今回は横にだけ揺らしたいのでAxisのZを1AutoConfigureConnectedのチェックを外しておきます。

Anchorは支点との距離です。

 

この状態で、ゲームを起動し「Pivot」を動かすと「Furiko」が振り子のような挙動をするのが確認できます。

 

 

揺れの調整

そのままだとゆったりした揺れになるので調整します。
HingeJointのUseSpringにチェックを入れておきます。

 

Springで揺れる力を調整

Springは振り子が元の位置(この場合支点の真下)に戻る力の強さです。
この値が大きいほど振り子の動きが大きくなります

 

 

Damperで減衰力を調整

Damperは揺れの減衰を表します。
この値が大きいほど揺れが早く収まります

 

上のSpring1000の状態でDamperを100にした場合のGIF。

 

 

 

振り子の糸を作る

支点と振り子を糸でつなぎます。

LineRendererのアタッチ

糸の描画にはLineRendererコンポーネントを使用します。
「Pivot」にLineRendererをアタッチ。

 

そのままだとピンクの太い線になるので、Widthを小さくMaterialsにDefault-Lineを設定します。



LineRendererの制御

LineRendererの制御用Scriptを作成します。
下記のFurikoLine.csを「Pivot」にアタッチ。

using UnityEngine;

public class FurikoLine : MonoBehaviour
{
    [SerializeField] LineRenderer lineRenderer;
    [SerializeField] Transform startPoint;
    [SerializeField] Transform endPoint;

    void Update()
    {
        var positions = new Vector3[] { startPoint.position, endPoint.position, };
        lineRenderer?.SetPositions(positions);
    }
}

 

LineRendererとStartPointには「Pivot」を紐づけ、EndPointには「Furiko」を紐づけます。

これで振り子の糸ができました。

 

 

リール動画でやっていること

糸の色

LineRendererの色を調整し、最初の方を透明にすることでイイカンジの糸に仕上げました。

 

糸の終点

文字を使う関係上LineRendererの終点が真ん中だと困るので、
参照用の空のGameObjectを上側に配置することでイイカンジにしました。

 

インチキ

揺れ方など何度調整しても動画にぴったりな絵がなかなか撮れなかったので、
最終的にTimescaleを変更して良さそうな絵を撮りました。
こういうのもアリ

 

 

 

まとめ

・HingeJointを使って振り子を作成しました。揺れの大きさと減衰力もパラメータで調整できます。
・振り子の糸はLineRendererで作成しました。

 

 

以上です。

 

*1:ヒンジで連結するかのような制約をつけられるのでHingeJointといいます

【アセット紹介】Feel でヒットストップを作る【Unity】

今回はアセット「Feel」を使ってヒットストップを実装する方法についてまとめます。

 

 

どんなアセット?

音やエフェクトなどゲームに様々な演出を簡単に実装するアセットです。
過去に紹介記事を投稿しています。

 

基本的な概要や使い方はこちらの記事をどうぞ

raspberly.hateblo.jp

今回は、発展的な内容として、ヒットストップを実装する手段をまとめます

 

 

開発環境

Unity 2021.3.12f1

Feel ver3.12

 

 

やりたいこと

Feelを使ってヒットストップを実装します。

以下の3種類の方法を用いて解説します。

・Time.timeScaleを0にする

・Animator.speedを0にする

・Animator.speedを遅くする

 

 

下準備

アセットとかの準備

プレイヤーにSD ユニティちゃん、敵にCubeを用意。

 

攻撃モーションとエフェクトも用意します。
モーションとエフェクトは下記のアセットを使用しています。これはなんでもいいです。

 

 

プレイヤーの作成

シーンに空のGameObjectを作成、名前をPlayerにしてユニティちゃんを配置、手のボーンに剣を持たせます。

剣には攻撃判定用のColliderをアタッチしておきます。

 

 

PlayerのAnimator

Animatorを作成。
ステートを2つ作成し、待機モーションと攻撃モーションを持たせます。
bool型パラメータattackを追加し、attackのオンオフでステートが切り替わるようにします。

 

PlayerのScript

以下のFeelPlayer.csを作成し、Playerにアタッチ。
キーボードのスペースキーを押すと、登録したFeedbacksを再生する単純なScriptです。

using UnityEngine;
using UnityEngine.InputSystem;
using MoreMountains.Feedbacks;

public class FeelPlayer : MonoBehaviour
{
    [SerializeField] MMFeedbacks attackFeedbacks;

    void Update()
    {
        if(Keyboard.current.spaceKey.isPressed)
        {
            attackFeedbacks?.PlayFeedbacks();
        }

        // 旧InputManagerでやりたい人用
        //if(Input.GetKeyDown(KeyCode.Space))
        //{
        //    attackFeedbacks?.PlayFeedbacks();
        //}
    }
}

 

攻撃Feedbacksを作成

空のGameObjectを作成、名前をAttackFeedbacksに。

 

MMFeedbacksコンポーネントをアタッチし、各種Feedbackを実装していきます。
攻撃時にAnimatorのパラメーターを書き換えるAnimationと、
攻撃判定用ColliderのActiveを切り替えるSetActiveを追加。

 

Animationの方は、対象のAnimatorとパラメータを設定。

 

Feedbackの紐づけ

PlayerにFeelPlayer.csをアタッチし、AttackFeedbacksを紐づけます。

 

これでゲームを開始しスペースキーを押すと攻撃します。

 

わかりにくいですが、攻撃モーション中ColliderもActiveになっています。

これでPlayerは完成。

 

 

敵の作成

空のGameObjectを作成、名前をEnemyにしてCubeを配置します。

EnemyのScript

以下のFeelEnemy.csを作成。
OnTriggerEnterで登録したFeedbacksを再生する単純なScriptです。

using UnityEngine;
using MoreMountains.Feedbacks;

public class FeelEnemy : MonoBehaviour
{
    [SerializeField] MMFeedbacks hitFeedbacks;

    private void OnTriggerEnter(Collider other)
    {
        hitFeedbacks?.PlayFeedbacks();
    }
}

 

ヒットFeedbacksを作成

攻撃が当たったときにエネミーが呼び出すFeedbacksを作成します。
空のGameObjectを作成、名前をAttackFeedbacksに。

 

MMFeedbacksコンポーネントをアタッチし、各種Feedbackを実装していきます。
Cubeの大きさが変化するScaleと、攻撃時にエフェクトを出すParticlesPlayを追加。

 

ヒットストップとは直接関係ない賑やかしなので、特になくてもいいです。
ここはお好みで。

 

 

 

最後、EnemyにFeelEnemy.csをアタッチ、ColliderとRigidbodyもアタッチします。
HitFeedbacksも紐づけます。



 

これでEnemyの準備を完了。
後はヒットストップを追加していくだけです。

 

 

 

MMTimeManagerを配置

最後に空のGameObjectを作成し、MMTimeManagerをアタッチします。
これはFeelで時間を制御する時に必要なコンポーネントです。シーン内に必ず存在する必要があります。

 

 

これで下準備は終わり。
次からヒットストップを実装していきます。

 

 

ヒットストップを実装

TimeScaleを0にする

一番手早いヒットストップ。Time.timeScaleを0にします。
特徴は時間が止まるため、他のオブジェクトやエフェクトも全て停止するという点です。

HitFeedbacksに、Time/FreezeFrameを追加します。
これは指定の秒数、時間を止めるFeedbackです。

 

今回は0.2秒止めてみます。FreezeFrameDurationに0.2を設定



これで完成、攻撃ヒット時0.2秒間Time.timeScaleが0になります。

 

 

 

プレイヤーのアニメーションを止める

攻撃ヒット時、プレイヤーのアニメーションを一瞬止めます。

HitFeedbacksに、GameObject/AnimatorSpeedを追加します。
これはAnimatorの再生速度を変えるFeedbackです。


今回は0.3秒止めてみます。
Bound AnimatorにユニティちゃんのAnimatorを紐づけ、
ModeをInstant Then Resetに、Durationを0.3にします。



これで完成、攻撃ヒット時0.3秒間アニメーションの再生速度が0になります。

 

 

プレイヤーのアニメーションを遅くする

攻撃ヒット時、プレイヤーのアニメーションを遅くします。
やり方はさっきとほとんど同じです。New Speed Minに0.05を設定します。

 

 

これで完成、攻撃ヒット時0.3秒間アニメーションの再生速度が0.05倍になります。

 

 

 

まとめ

今回はアセット「Feel」を使って、ヒットストップを実装しました。
Time.timeScaleを0にする方法、Animatorの再生速度を0にする方法、
Animatorの再生速度を遅くする方法の3つを紹介しました。

 

 

プレイヤーに爽快感や良い手触りを与える演出ですが、FeelならScriptを編集せずに実装できますね。
参考資料にある動画も、タメになるのでぜひどうぞ。

以上です。

 

 

参考資料

youtu.be

youtu.be

wikiwiki.jp

 

 

 

 

他のアセットの紹介記事はこちら↓

raspberly.hateblo.jp

 

 

 

※本記事にはAssetStoreアフィリエイトリンクが含まれています。

他、間違っている箇所、わかりにくい所がありましたらコメントにお願いします。

【イベントレポ】: Indie Games Connect 2023

イベントのレポート(メモ)です。
参加したのはこちら、「Indie Games Connect 2023」

www.konami.com

 

ハッシュタグ : #IGC2023 #IGC

 

 

 

Indie Games Connect 2023とは

インディーゲームの展示会です
参加サークルは60+サポーター枠8、入場無料

以下公式サイトより引用

「自らのアイデアを注ぎ込んだ渾身のゲームをより多くの人に楽しんでもらいたい」
そんなアナタを応援します!
「自分の手で作り上げた作品をより多くの人に楽しんでもらいたい」
そう願っているクリエイターの想いに応えるため、
KONAMIでは少しでもたくさんの方々の手に触れていただくための、
クリエイターとユーザー、またはクリエイター同士の交流の場を作りたいと考え、
2022年より開催しています。

 

 

前回のレポはこちら

raspberly.hateblo.jp

 

 

※以下体験させていただいたサークル及び作品の紹介です
※掲載している写真は全て許可を得て撮影しています
(人が写っている写真はトリミングや黒塗りなどの加工をしています)

今回はセミナーにも参加したので少なめ

 

No.12 JetCola

コーラ型コントローラーを使うのが特徴。
コーラを大きく速く振り、宙高くまで飛ばすゲームです。

全力でコーラを振るのでものすっごい疲れる!

最後は飛んでいく様子を見られますが、コーラが惑星を越えていく様は壮観。

 

 

 

No.22 錬魂のレナフィーネ

5つのネイト」でおなじみ「ねこどらソフト」の新作。
魔王軍として、魔物を召喚・育成し敵と戦うゲームです。
序盤だけの体験でしたが、ストーリーはかなりダークそう。

 

事前登録受付中!

yoyaku-top10.jp

 

 

 

No.59 NyanCommando-にゃんこマンドウ-

ねこを操作した全方位シューティングゲームです。マウスパッドがかわいい
ねこには4つの能力があり、使いこなしながらボスを倒します。
ボス以外に雑魚敵が大量に出現し、それらをクジラで吹き飛ばすのがとても気持ちいい。

ボスはもうとにかくデカイ

 

 

 

No.56 トランスアングル

 

不思議な操作感のアクションゲームです。
地面に突き刺さって画面を回転させゴールを目指します。
画面が回転するたび重力の向きも変わるためとにかく頭が混乱する

 

unity1weekで投稿されたRE:ッターン!も展示されていました。

unityroom.com

 

 

 

 

No.5 モンスターフィッシング

2Dのオープンワールドで釣りを楽しむゲームです。
フィールドはかなり広く、船を使って移動し場所ごとに釣れるモンスターが全く違いました。
釣り部分だけの体験でしたがNPCがあちこちにいたり、洞窟に入れたりと探索も楽しそう。

 

スマホ版が公開されています

play.google.com

モンスターフィッシング

モンスターフィッシング

  • YOSHIYUKI NAKASHIMA
  • ゲーム
  • 無料

apps.apple.com

 

 

 

No.24 GRAPPIN

www.konami.com

グラップリングフックを使った登山ゲームです。
グラップリングを壁に撃ちこみ、空中を移動していくのがとても気持ちいい!
ダッシュとジャンプ、180ターンがワンボタンで行えるため移動がかなり快適。
ローポリながらグラフィックの雰囲気もいい感じ。

 

Steamで販売中!

 

 

 

No.39 在宅ワーク

www.konami.com

最大4人で遊べるパーティーゲームです。
上司の目の前では働くふりをし、上司が見ていない時は暴れてサボるゲームです。
野良参加でしたが、協力して道具をクラフトしワチャワチャするのがすごく楽しい!

 

Switchなどのプラットフォームで配信中です。

store-jp.nintendo.com

 

 

 

No.50 BATTING CARDGAME

野球をベースとした対戦型カードゲームです。
ルールはこちらから

youtu.be

攻守に分かれ、バッター側はストライクを撃ち、ピッチャー側は空振りを狙って得点を稼いでいきます。
捨て札はいつでも確認できるため、次の展開を予想しながら駆け引きを楽しめるゲームです。
なんとアナログ版もあり、実際にカードを使って対戦することができました。

 

 

No.49 STEP BY STEP

スマートフォンで遊ぶARゲームです。
足元しか見えないのが特徴で、周りを見渡しながらパズルを解いたり、
線路をつなげて列車をゴールまで導いたりとARを使ったギミックがすごい!
絵作りの雰囲気も良い。

 

 

 

 

イベントの感想

今回は9つのゲームを体験させていただきましたがどれも面白かった。
個人的に一番楽しいと感じたのはNyanCommando-にゃんこマンドウ-
ねこがかわいいのと、大量の敵に巨大なボスと画面がとにかく賑やかで爽快感もあり楽しかったです。

 

 

セミナーにも参加しました。
あそびのデザイン講座と、Unityの新しい機能や新URPテンプレートに関する内容でした。

youtu.be

セミナーは後日Unity Learning Materialsでも公開されるみたい。

 

 

 

ちなみに現在IGC2023を記念したセールがSteamで開催中みたい。

store.steampowered.com

 

 

 

以上です。

【Unity】入力がなくなったらカメラが定位置まで戻るカメラワークを作る【Cinemachine + Input System】

今回はUnityネタをやっていきます。
UnityのCinemachineとInputSystemを使って、
プレイヤーの入力がなければカメラが定位置まで戻るカメラワークを作成します。


見下ろし視点のゲームで使うことを想定しています。

 

挙動としてはリメイク前のバイオハザード4とかに近いです。

 

 

 

開発環境

Unity 2021.3.12f1

Cinemachine ver2.8.9

Input System ver1.4.4

 

 

 

パッケージのインストール

Unity Package ManagerからCinemachineとInput Systemをインストールしておきます。

 

ステージの作成

最初に簡単なステージを作ります。
床になるPlaneとキャラクターを配置します。
これはなんでもいいですが、今回はSDユニティちゃんを使用します。

 

 

基本的なカメラの設定

Virtual Cameraの作成

シーン内にVirtual Cameraを作成します。
Create/CInemachine/VirtualCameraで作成。

 

Inspectorから、BodyをFraming Transporserに、AimをPOVに設定。

 

Input Systemの入力を有効にしたいので、Add Input Providerを押します。

すると、Cinemachine Input Providerというコンポーネントがアタッチされます。
Input Actionsはデフォルトのやつをそのまま使います。

 

 

最後に、追従対象のオブジェクトを設定します。
FollowにSDユニティちゃんを設定。

 

 

これで基本的なカメラの挙動ができました。
マウス、およびゲームパッドの右スティックでカメラが回転します。

 

 

 

カメラの調整

ここは好みですが、今回は見下ろし視点のゲームを想定しているので、
カメラの動く範囲を制限していきます。

(必要ないのなら飛ばしていいです)

位置設定

SDユニティちゃんの場合、カメラの中央を頭にしたいのでオフセットのYを1にします。
(これはオフセットの値を変えるよりも、Virtual Cameraが参照する用のGameObjectをキャラクターの子に持たせて調整した方がいいかも)

 

Cameraとの距離も少し短くします。

 

 

角度制限

カメラを回転する角度を制限します。
上下の角度は20~70度まで、左右の角度は-40~40度までとします。

 

 

ここまででゲームを実行するとこんな感じ

 

 

Recenteringの設定

ここがこの記事のキモ
視点操作(入力)がなくなったら、一定の角度にカメラが戻るようにします

 

この機能自体は、Recenteringという名前でCinemachineに用意されています。
InspectorビューのAimから、Vertical RecenteringとHorizontal Recenteringを有効にし、
Wait Timeを0.1Recentering Timeを0.5にします。

 

Wait Timeは入力がなくなってからRecenteringを開始するまでの時間、
Recentering TimeはRecenteringを終了するまでの時間です。

上の例だと、入力がなくなってから0.1秒後に、0.5秒かけて定位置までカメラを戻ります。

 

 

中央角度の設定

一見よさそうに見えますが、Recenteringする角度がよくないです。
具体的には上下方向の中央角度が20度になっています。
これはデフォルトの中央角度が0であり、一番近い20が中央とされてしまうためです。

 

上下の回転角度は20~70度なので、45度を中央角度に調整します。
InspectorのAimから、Recenter TargetをLook At Target Forwardに設定。
これはLookAtに設定したTransformの正面を中心角度にするという設定です。

 

次にLookAtに設定する用の空のGameObjectを作成します。
(ワールド座標が参照されるので、プレイヤーのキャラクターの子にしない方がいい)

角度Xを45に設定。

これを、CinemachineVirtualCameraのLookAtに設定。

 

これで完成です。
入力がなくなったら、カメラが定位置まで戻るようになりました。

 

 

まとめ

CinemachineとInput Systemを使って、プレイヤーの入力がなければカメラが定位置まで戻るカメラワークを作成しました。
Recentering機能を使えば簡単に実装できます。

 

 

こっちはバーチャルパッドで動くようにしたやつ

 

 

 

以上です。

 

【Unity】画面遷移時のアイリスイン・アイリスアウトを実装する

今回はUnityネタをやっていきます。
ゲームやアニメでよく見るアイリスイン・アイリスアウトをUnityで実装してみます。

 

 

 

アイリスイン・アイリスアウトとは

ゲームやアニメで画面を切り替えるときに使われる演出の一つです。
画面を少しずつ広げたり絞ったりして暗転させます。(閉じるのがアウト、開くのがイン)

2つ合わせてアイリスショットと言ったりしますね。
今回はこれをUnityで実装してみます。

 

 

開発環境

Unity 2021.3.12f1

UnmaskForUGUI ver1.4.1

DOTween ver1.2.705

 

 

必要なパッケージとアセットのインストール

UnmaskForUGUIというパッケージを使います。
これを使うと反転したマスクを作成できます。

github.com

 

Unity Package Managerからインストールする場合は、このURLを打ち込めばOK

https://github.com/mob-sakai/UnmaskForUGUI.git

 

 

また、UIアニメーションにDOTweenを使用します。

 

 

 

 

アイリスイン、アイリスアウトを実装する

ここから本題。

Canvasの作成

アイリスイン・アイリスアウトに対応したCanvasを作成するエディター拡張が用意されています。
Hierarchyビューを右クリックして、UI/Unmask/IrisShotを選択。

 

これでシーン内にCanvasが作成されます。
ちなみにCanvasScaleModeConstantPixelSizeなので最初にScaleWithScreenSizeに直しておくといいかも。

 

Canvasの構成

Hierarchyビューはこんな感じ。
Unmaskはアイリスイン・アイリスアウト用の反転したマスク
Screenは画面を覆うパネルです。

 

Screenはデフォルトで半透明になっています、画面遷移に使いたいので単色塗りつぶし状態にしておきます。

 

Unmaskを移動させたり、Scaleを変えるとすでにそれらしい動きが実現できます。

ちなみにデフォルトのSpriteはサイズが小さく、
拡大するとかなりガビガビなので大きいSpriteを用意して差し替えた方がいいです

私はUI Builderというアセットにある円のSpriteを使用します。
これはまあ、サイズの大きいSpriteがあればなんでもいいです

 

 

TweenScript

最後にScriptでアイリスイン・アイリスアウトの動きをつけます。
前述した通り、DOTweenを使用しています。
以下のIrisShot.csを作成。IRIS_IN_SCALEはUnmaskが画面から見えなくなる大きさに調整します

using UnityEngine;
using DG.Tweening;

public class IrisShot : MonoBehaviour
{
    [SerializeField] RectTransform unmask;
    readonly Vector2 IRIS_IN_SCALE = new Vector2(30, 30);
    readonly float SCALE_DURATION = 1;

    public void IrisIn()
    {
        unmask.DOScale(IRIS_IN_SCALE, SCALE_DURATION).SetEase(Ease.InCubic);
    }

    public void IrisOut()
    {
        unmask.DOScale(new Vector3(0, 0, 0), SCALE_DURATION).SetEase(Ease.OutCubic);
    }
}

 

これを適当なオブジェクトにアタッチし、Unmaskを紐づけます。


これで準備完了。
IrisIn()、IrisOut()を呼び出すとこんな感じ。

画面遷移にぴったりなアイリスイン・アイリスアウトが実装できました。

 

 

TweenScript(応用)

今度はちょっと応用。
Unmaskにキャラクターの画像*1を設定し、シルエットを出すようにします。


Scriptにも手を入れ、跳ねるようなアニメーションを作ります。

using UnityEngine;
using DG.Tweening;

public class IrisShot2 : MonoBehaviour
{
    [SerializeField] RectTransform unmask;

    readonly Vector2 IRIS_IN_SCALE = new Vector2(15, 15);
    readonly Vector2 IRIS_MID_SCALE1 = new Vector2(0.8f, 0.8f);
    readonly Vector2 IRIS_MID_SCALE2 = new Vector2(1.2f, 1.2f);

    public void IrisIn()
    {
        unmask.DOScale(IRIS_MID_SCALE2, 0.4f).SetEase(Ease.InCubic); ;
        unmask.DOScale(IRIS_MID_SCALE1, 0.2f).SetDelay(0.4f).SetEase(Ease.OutCubic);
        unmask.DOScale(IRIS_IN_SCALE, 0.2f).SetDelay(0.6f).SetEase(Ease.InCubic);
    }

    public void IrisOut()
    {
        unmask.DOScale(IRIS_MID_SCALE1, 0.2f).SetEase(Ease.InCubic);
        unmask.DOScale(IRIS_MID_SCALE2, 0.2f).SetDelay(0.2f).SetEase(Ease.OutCubic);
        unmask.DOScale(new Vector2(0, 0), 0.4f).SetDelay(0.4f).SetEase(Ease.InCubic);
    }
}

 

これで準備完了。
IrisIn()、IrisOut()を呼び出すとこんな感じ。

かわいいゲームにぴったりなアイリスイン・アイリスアウトが実装できました。

 

背景の変更

Unmaskだけでなく、ScreenにもSprite*2を設定できます

 

変えてみるとこんな感じ。

 

 

 

まとめ

UnmaskForUGUIを使ってアイリスイン・アイリスアウトを実装しました。
今回は使用しませんでしたが、Sprite以外にもTextを反転したマスクとして使うこともできます。
画面遷移の演出にぜひ活用してみてください。

 

 

以上です。

 

© Unity Technologies Japan/UCL

*1:ユニティちゃんHD画像パック Vol.1を使用

*2:UniteJapan2014 Wallpaperを使用

Unity Package ManagerのGit URLからパッケージをインストールしようとしたら出るエラーの解決方法

個人的な忘備録。
Unity Package Manager(UPM)のGit URLからパッケージをインストールしようとしたらエラーが出て困ったときの解決方法

 

Unityのバージョンは2021.3.12f1(多分関係ないはず)
OSはWindows10です。

 

 

解決方法

先に解決方法から載せると、
システムの環境変数にGitのパスを設定すれば解決しました

 

 

 

状況とエラー内容

Unity Package ManagerでUniTaskをインストールしようとしたらエラーが出てインストールできない。

 

エラー内容は以下の通り

[Package Manager Window] Cannot perform upm operation: Unable to add package https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask:
  No 'git' executable was found. Please install Git on your system then restart Unity and Unity Hub [NotFound].
UnityEditor.EditorApplication:Internal_CallUpdateFunctions ()

 

[Package Manager Window] Error adding package: https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask.
UnityEditor.EditorApplication:Internal_CallUpdateFunctions ()

 

「Gitの実行ファイルが見つからないから、GitをインストールしてUnityとUnity Hubを再起動してね」
と言われています。Gitはインストール済なのに。

 

 

 

 

解決方法

Unity Forumとこちらの動画の方法で解決

forum.unity.com

youtu.be

 

この動画の通りに進めてみます。

 

git.exeがあるフォルダのパスを確認

git.exeが置いてあるフォルダを調べ、そのパスを控えておきます。


git.exeは複数ありますがcmdフォルダ*1にあるものを使います。
私の場合は「C:\Program Files\Git\cmd」でした。このパスをコピーしておきます。

 

 

環境変数に設定

Windowsの検索窓にPathを入力。
検索結果に「システム環境変数の編集」が出てくるので開きます。

 

システムのプロパティというウインドウが開かれるので、環境変数を押します。

 

するとこんな画面が出ると思います。表示されている内容は人によって異なりますが。

 

ここでシステム環境変数からPathを選択し、編集ボタンを押します。

 

環境変数名の編集画面が開きます。

 

右上の新規ボタンを押します。

 

新しい環境編のパスを入力する欄ができるので、そこに先ほどのgit.exeのあるcmdフォルダのパスを入力

最後にOKを押します。

 

 

これで完了です。
UnityとUnity Hubを全て開きなおすとUPMからパッケージをインストールできました。

 

 

 

 

参考になりそうな記事

www.hanachiru-blog.com

 

baba-s.hatenablog.com

 

 

*1:binフォルダでもよさそう

【イベントレポ】: ゲームメーカーズ スクランブル

イベントのレポート(メモ)です。
参加したのは「ゲームメーカーズ スクランブル」
会場は大崎ブライトコアホールです。

connpass.com

ハッシュタグ : #ゲームメーカーズスクランブル

 



 

ゲームメーカーズ スクランブルとは

「ゲームメーカーズ スクランブル」は、ゲームづくりに関わる方同士で盛り上がるための完全無料のリアルイベントです。

ゲームづくりに関する全10講演のセミナーイベントや、Unreal Engine 5Blenderを使ったゲーム開発初心者向けのハンズオン、プロに聞けるなんでも相談所、講演者とも交流可能な懇親会など、さまざまなイベントを用意して皆さまをお待ちしています!

gamemakers.jp

 

ホールが2つに分かれていて、それぞれで講演が行われます。(公式サイトから引用)

 

 

以下講演の感想。
後々、ゲームメーカーズで資料は公開され、講演内容はログミーでまとめられるようです。

1.『作り方』から考えるゲームデザイン

2つあるゲームデザイン講演の内の1つ。こっちは企画寄り
講演者の代表作、それらのこだわりポイントについての内容でした。

 

質疑応答の内容は公開しないでとのことなので詳しくは書けませんが、
会社の文化は会社ごとに違う」という所で多くの人がめっちゃうんうん頷いてたの面白かった。

 

 

 

2. すぐに役立つ!ゲームデザイン

2つあるゲームデザイン講演の内の1つ。こっちは現場での開発寄り
ゲームデザインという言葉の定義と、プレイヤーの介入要素を3つに分けて活かす方法についての内容。

 

 

実際にゲームを例にしてゲームデザインを行う解説がとてもわかりやすかったです

  • 雑魚敵が無造作に出てくるボス戦がある
  • 雑魚敵の存在が不評(邪魔でいらないという声)、だが雑魚敵が沸かないようにしたらボス戦のコンセプトが崩れる
  • 不評の理由を分析すると、「雑魚敵が無造作に沸くためプレイヤーが予測できず、事前に戦術を立てられない」ためストレスを感じるということがわかった
  • 雑魚敵の挙動をプレイヤーが予測しやすいように変える
  • ボス戦前に、その雑魚敵単体と戦える場を用意して、プレイヤーが学べるようにする

→ これで雑魚敵を残したまま問題を解決できる

 

プレイヤーが「ゲームに介入(操作を入力)する前に何を考えているか」、「介入した後はどういう評価をするか」を分析する方法は結構使えそう。

 

 

質疑応答であった、死にゲーでリスポーン地点とボス部屋をあえて遠くする時の意図というのもおもしろかった。
(近いとリトライが早い分適当にプレイしだす。リトライに時間がかかるというリスクを与えると緊張感をもってプレイヤーが遊んでくれる~みたいな話だったと思う)
こういう分析ができるのすごい。

 

 

 

3. ゲームのUIってどうやって作るの? ~チラ見せ!プロの開発テクニック~

ゲームのUIを作るワークフローについての内容。
仕様の作成(UIの目的、UIの機能、UIの画面要素)、配置、色の配分などなど。
操作できる部分をわかりやすくする、表示する情報と見せ方(情報を多くしすぎない)を工夫するというのはとても大事ですね。

 

UIの勉強方法も紹介されていて、たくさんゲームを遊んで、気に入ったUIを作ってみるのがいいとのこと。

この本もすごく勉強になるらしい!!!!!

www.shoeisha.co.jp

 

 

 

4. ゲームエンジンからステップアップ!”オブジェクト指向”早わかりガイド

オブジェクト指向に関する講演。
公演内でも言われていましたが、初歩的な内容なのでこれを元にステップアップをするのがよさそう。

 

講演内容はこちらの書籍を参考にしているみたい

bookplus.nikkei.com

講演者の方は業界2年目のことですが、私だったら固まってしまいそうな質問にもスラスラ答えててすごいと思った。
講演のテーマ的にマサカリありそうとは思ってた

 

 

 

5. ゲーム業界のワークフローに学ぶ、ゲームを作り始める前に知っておくべきこと

エターナらない(ゲームが完成しない状態にしない)ために、どうやってゲーム開発を進めるかという内容。

  • 最初は豆腐(仮素材の白いCube)でゲーム開発を進める、素材を作りこむのは後
  • ゲームは骨子から作る、作りたいものから作り始めるとエターナる
  • 骨子があれば、それは最低限のゲームになる
  • ゲームに完成はない、いくらでも機能を追加できる。締め切りが来た時それが完成。
  • 締め切りがきてもいいように骨子から作る

 

 

バーティカルスライスという単語も初めて知りました。

zenn.dev

 

 

豆腐で思い出しましたが、バイオハザード2で豆腐の隠しキャラクターがいるのも当たり判定に豆腐のような白いモデルを使っていてそれを流用したからという理由があったりします。

私も仕事・個人開発問わずプロトタイプを作る時は白いCubeを使うことが多いですね。
(キャラクターにそのままCubeやCapsuleを使うと、どっちを向いているかわからないので、正面方向にもう一つちっちゃいCubeやSphereをくっつけるという工夫をよくします)

 

 

 

懇親会

終わった後は懇親会、食べ物がオシャレ!

イベントの仕組み上全部の講演は見られないので、違う講演を見た人相手に面白かった講演をプレゼンし合ったりしました。

 

 

 

感想

どの講演もすごいおもしろかったです。
個人的に「すぐに役立つ!ゲームデザイン」が一番良かった。
ゲームデザインの問題点を分析して解決する手法はかなり使えそう。


全体的に質疑応答の時間が長めに取られていて、それらの回答もおもしろかった。
(講演の補足になるものからxxxなものまで)
講演者の方どんな質問もスラスラ答えてるの凄すぎる。

 

講演以外では、書籍の販売・ゲーム開発現場で読まれている書籍の展示ブースもありました。
重いしかさばるから講演が全部終わった後に買おうとしたらその時には撤収中だった( ˘ω˘ )

 

 

好きなゲームを自由に貼れるボードがあるのも特徴
OMORIをすこれ

 

 

おわり

最初に書きましたが、このイベントはゲームメーカーズが開催するイベントです。
いろんな記事があるのでみんな見てね!

 

イベントカレンダーもすっごい有用、Unity1週間ゲームジャムも載ってる!

gamemakers.jp

 

 

 

以上です。