投稿記事

活動報告の記事 (24)

Fi-Mo 2020/08/21 12:00

進捗報告(21) + onDrawGizmos

概要

泡盛もろみです。

今回は
・OnDrawGizmos (by 泡盛もろみ)
・進捗報告(21):アニメーション適用 (by 明山昇)
です。

OnDrawGizmos

Gizmosって聞いて何かわかりますか?
私はわかりませんでした。
ざっくりというと、Unityでオブジェクトなどを選択した時に表示される補助的な視覚情報のようなものです。

Gizmos OFF

Gizmos ON

GizmosをONにすると、CapsuleColliderの緑の線が見えるようになっていますね。
このGizmosはシーンビューだけでなくゲームビューでもONにすることができます。
当たり判定などを確認する時に便利ですね。

このGizmosの表示を自分で拡張できることを知りました。
OnDrawGizmos()
の中に描画処理を書くだけです。

公式リファレンスは下記
MonoBehaviour.OnDrawGizmos()

実際の使い方としては、例えばこんな感じでrigidbodyの速度を表示してあげています。
キャラクターから線が伸びているのがわかるでしょうか。
速度のベクトルがキャラクターにとって前方であればマゼンタ、後方であればシアンの線が、速度に応じた長さで表示されるようにしています。


private void OnDrawGizmos() {
  float angle = Vector3.Angle(transform.forward, rigid.velocity);
  bool isForward = (-90 < angle && angle < 90);
  if (isForward) {
    Gizmos.color = Color.magenta;
  } else {
    Gizmos.color = Color.cyan;
  }
  Vector3 pos = transform.position;
  Gizmos.DrawLine(pos, pos + rigid.velocity);
}

速度などの情報は目に見えないので、こうやって視覚的に把握できるようになると便利ですね。
また、通常はオブジェクトを選択しないとそのオブジェクトのGizmosが表示されないのですが、ここに書いてあるものは常時表示されるので、生成後すぐに破棄されるようなオブジェクトの当たり判定なども、躍起になって一時停止して選択して...ということもなく見ているだけである程度チェック可能になります。
実際の領域と少し大きく/小さくした領域を描画して、どのくらいの大きさにするか検討するなどもできるかもしれません。

また何か便利なものを見つけたら紹介します。

フォロワー以上限定無料

ゲーム進捗に関する内容はフォロワー限定公開になります。

無料

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Fi-Mo 2020/08/14 12:00

進捗報告(20)

概要

泡盛もろみです。

今回は
・ゲーム進捗
です。

今回は雑談枠はありません。

暑いので熱中症にお気をつけください。

フォロワー以上限定無料

ゲーム進捗に関する内容はフォロワー限定公開になります。

無料

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Fi-Mo 2020/08/07 12:00

進捗報告(19)

概要

泡盛もろみです。

今回は
・執筆中の小説の宣伝(明山昇)
・ゲーム進捗(by 泡盛もろみ)
です。

執筆中の小説の宣伝

明山昇です。今回は、いつもの技術/雑談の枠を使わせてもらって、ちょっと宣伝をば。

私はサークル活動でアニメーションを作りながら、個人の活動として、小説家になろうとカクヨムで小説の連載をしております。
現在は隔日周期で更新継続中です。
普通(?)のなろう系とは一味違うモノをと心がけて日々執筆に勤しんでおります。(少々妙ちきりんすぎる話になっている気もしますが)
もしお時間ありましたら読んでいただけますと幸いです。

現在更新中の話

小説家になろう: http://ncode.syosetu.com/n4667fz/
カクヨム: https://kakuyomu.jp/works/1177354054893804017

その他

小説家になろうマイページ: https://mypage.syosetu.com/1499122/

フォロワー以上限定無料

ゲーム進捗に関する内容はフォロワー限定公開になります。

無料

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Fi-Mo 2020/07/31 12:00

進捗報告(18)

概要

泡盛もろみです。

今回は
・2作目ゲーム進捗(by 泡盛もろみ)
です。

いつもの技術/雑談の枠は今回はお休みです。
別の趣味の写真でお茶を濁そうとおもいます。

気になった方はこちらもどうぞ。

フォロワー以上限定無料

ゲーム進捗に関する内容はフォロワー限定公開になります。

無料

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Fi-Mo 2020/07/24 13:30

進捗報告(17) + 続々・UI用ボタンの続き

概要

泡盛もろみです。

今回は
・続々・UI用ボタンの続き (by ミサゴ)
・ダメージを受けるアニメーション (by 明山昇)
です。

続々・UI用ボタンの続き

東雲ミサゴです。

前回に引き続き、UI用ボタンについて紹介します。
前回はチャージの進行状態が100%の時のみ操作を受け付る作りにしましたが、これを視覚的に表現してみます。

やりたいこと

今回は以下の2点を操作します
1. チャージ中と完了時時のゲージ色の変更
2. 操作が不能である間のボタンの表示の変更

前者はスクリプト作成の最初の記事で初期化だけ行ったGaugeImage.colorの出番です。
これをスクリプトから操作しようというわけですね。
後者はButtonコンポーネントのパラメータを変更します。

ゲージ色の変更

ゲージの色をChargeAmountが1未満である間は赤、1の時は緑で表示します。

変数の宣言と初期化……のその前に

ここでお詫びが1点あります。最初の記事にミスがありました。
まとめの部分を写した場合は動いたと思いますが、丁寧に上から進めて下さった方は整合性がなくて戸惑ってしまわれたのではないかと思います。お詫び申し上げます。
(現在は訂正済みです)

訂正内容

具体的にはStart()項の最初の"オブジェクトの取得"から

// このスクリプトをアタッチしたオブジェクトの画像を取得
GaugeBase = GetComponent<Image> 

また、"変数の初期化"から

// ゲージ背景色の初期化
GaugeBase.color = new Color(0.40f, 0.40f, 0.40f);

が、当該記事の時点では不要となります。
つまり今回これを使用します。

改めて宣言と初期化

ここでは上記の内容に加え、変数の宣言にゲージ背景画像を追加します。

// ゲージ背景画像
private Image GaugeBase;

また、ゲージ色の初期化の際の色を緑から赤に変更します。

GaugeImage.color = new Color(0.00f, 0.66f, 0.00f);

↓↓↓変更↓↓↓

GaugeImage.color = new Color(0.66f, 0.00f, 0.00f);

長くなってしまいますが、classからStart()まで記します。

/** 省略 **/
public class Charge : MonoBehaviour {

    /** オブジェクト用 **/
    // ゲージ本体オブジェクト
    private GameObject GaugeMain;
    // ゲージ本体画像
    private Image GaugeImage;
    // ゲージ背景画像
    private Image GaugeBase; /** 追加 **/

    /** 数値用 **/ 
    // チャージ進行時間
    private float ChargeAmount;

    // Start is called before the first frame update
    void Start() {

        /** オブジェクト取得 **/ 
        // このスクリプトをアタッチしたオブジェクトの子オブジェクトから
        // 名前の一致するものを取得
        GaugeMain = transform.Find("GaugeMain").gameObject;
        // GaugeMainの中の画像を取得
        GaugeImage = GaugeMain.GetComponent<Image>();
        // このスクリプトをアタッチしたオブジェクトの画像を取得
        // ゲージ背景画像
        GaugeBase = GetComponent<Image>(); /** 追加 **/

        /** 数値の初期化 **/
        // チャージ進行時間の初期化
        ChargeAmount = 0.00f;
        // ゲージ色の初期化
        GaugeImage.color = new Color(0.66f, 0.00f, 0.00f); /** 変更 **/
        // ゲージ背景色の初期化
        GaugeBase.color = new Color(0.40f, 0.40f, 0.44f); /** 追加 **/

    }
/** 省略 **/

パラメータ変更

ではフレーム毎に見た目を更新するための部分に移ります。
Update()のゲージ加算処理の後に、ChargeAmountの値によりGaugeBase.colorを変更する処理を追加します

/** ゲージ・ボタン色管理 **/
// ChargeAmountが1のとき
if (ChargeAmount == 1.00f) {
    // 背景色を緑に
    GaugeBase.color = new Color(0.00f, 0.66f, 0.00f);
// 上記以外のとき
} else {
    // 背景色をグレーに
    GaugeBase.color = new Color(0.40f, 0.40f, 0.44f);
}

また、画像のリフレッシュの処理を変更し、FillAmountに代入する値をChargeAmountからChargeAmountの小数部分に変更します。

/** ゲージ画像のリフレッシュ **/
// FillAmountにChargeAmountの値を代入
GaugeImage.fillAmount = ChargeAmount;

↓↓↓変更↓↓↓

/** ゲージ画像のリフレッシュ **/
// FillAmountにChargeAmountの小数部分を代入
GaugeImage.fillAmount = ChargeAmount % 1;

ChargeAmountが1.00の時、FillAmountは0となり緑色になったGaugeBaseを見せるようにしています。
今後ゲージを複数ストックできるように拡張する際に便利だと良いなという思いでこういう書き方にしましたが、あまりスマートでないかもしれません。

ここまでを纏めると、Update()は以下のようになります。

/** 省略 **/
    void Update() {

        /** ゲージ加算処理 **/
        // ChargeAmountが1.00である場合
        if (ChargeAmount == 1.00f) {
            // 処理なし
            return;

        // 上記以外のとき
        } else {
            // 前回のフレームからの経過時間を加算
            ChargeAmount += Time.deltaTime;
            // 1.00を越えている場合、1.00とする
            ChargeAmount = Mathf.Min(ChargeAmount, 1.00f);
        }

        /** ゲージ・ボタン色管理 **/
        // ChargeAmountが1のとき
        if (ChargeAmount == 1.00f) {
            // 背景色を緑に
            GaugeBase.color = new Color(0.00f, 0.66f, 0.00f);
        // 上記以外のとき
        } else {
            // 背景色をグレーに
            GaugeBase.color = new Color(0.40f, 0.40f, 0.44f);
        }

        /** ゲージ画像のリフレッシュ **/
        // FillAmountにChargeAmountの小数部分を代入
        GaugeImage.fillAmount = ChargeAmount % 1; /** 変更 **/

    }
/** 省略 **/

操作不能の間の表示

ChargeAmountが1未満であるとき、(スクリプトがアタッチされているボタンオブジェクトの)ButtonコンポーネントのInteractableをfalseにします。
これにより、ボタンが物理的に無効になります。
Buttonコンポーネントはボタンの状態により見た目を変更するパラメータを持っているので、状態に応じて色を変えたり画像を差し替えたりすることができます。
今回は色の変更で状態を表現するようにします。

エディタ上での画像と色の指定、コードでのパラメータ変更

エディタ作業

ここで一度エディタに移ります。
ボタン本体のオブジェクトを選択し、InspectorのButtonコンポーネントを確認しましょう。

Transitionの値がColor Tintになっていなければ、プルダウンメニューから選択ます。
Target Graphicの値が、デフォルトでは"ボタン本体のオブジェクト名 (Image)"となっていると思います。
この画像はゲージの背景部分に使用するように設定してしまっているので、このままではこの部分の見た目が変わっても殆ど目に見えません。
そこで、Hierarcheyビューのボタンアイコン(記事ではButtonIconの名前)のオブジェクトを指定します。
ドラッグアンドドロップでも良いですが、Projectビューの画像ではなくHierarcheyビューのオブジェクトの指定である事に注意します。

さらに、Disabled Colorの値を設定します。
色は元々グレーですがお好みで、透過度は1に変更します。

コードの追加

ではコード編集に戻ります。

Start()にInteractableの初期化を追加します。

    void Start() {

        /** 省略 **/ 
        
        /** 数値の初期化 **/
        // チャージ進行時間の初期化
        ChargeAmount = 0.00f;
        // ゲージ色の初期化
        GaugeImage.color = new Color(0.66f, 0.00f, 0.00f);
        // ゲージ背景色の初期化
        GaugeBase.color = new Color(0.40f, 0.40f, 0.44f);
        // ボタンの状態の初期化
        GetComponent<Button>().interactable = false; /** 追加 **/

    }

また、Update()のゲージ・ボタン色管理の部分にパラーメータを操作する行を追加します。
条件に従い、InteractableのチェックボックスをOn/Offします。

    void Update() {

        /** 省略 **/ 

        /** ゲージ・ボタン色管理 **/
        // ChargeAmountが1のとき
        if (ChargeAmount == 1.00f) {
            // 背景色を緑に
            GaugeBase.color = new Color(0.00f, 0.66f, 0.00f);
            // ボタンを有効に
            GetComponent<Button>().interactable = true; /** 追加 **/
        // 上記以外のとき
        } else {
            // 背景色をグレーに
            GaugeBase.color = new Color(0.40f, 0.40f, 0.44f);
            // ボタンを無効に
            GetComponent<Button>().interactable = false; /** 追加 **/
        }

        /** 省略 **/ 

    }

動作確認

動作を確認してみましょう。上手く動いたでしょうか。
これで今回の目標を達成しました。お疲れ様です!
そして、この一連の記事の目標も達成です。

この後はゲージの伸びる速度を変更するにはどうすれば良いか、Updateの中に全ての処理を書くのは読みづらいので機能別にメソッド化してみる、など、思いついたところをガンガン変更してみてください。

この一連の記事で興味を持ってくださった方がおられれば幸いです。

それでは今回はこれにて。お付き合いありがとうございました!

フォロワー以上限定無料

ゲーム進捗に関する内容はフォロワー限定公開になります。

無料

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

1 2 3 4 5

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索