ぱふの自由帳

週3更新(火・木・日)を目指すUnityブログ。良ければフォローお願いします(`・ω・´)

【イベント】もちろんやります!unity1weekの投稿作品を全てプレイ!

---お知らせ!---

ゲームを作り、愛する方々!あのイベントが到来しました...!
「...なんのイベント?」ですって...?

Unityroomの1週間ゲームジャムですよ!


f:id:PafuOfDuck:20181118235833p:plain 「Unityroom?ナニソレ?」という方はコチラ
「1週間ゲームジャム?ナニソレ?」という方はコチラ




と、いうことで...

今回もモチロンやりますよ!!

f:id:PafuOfDuck:20180831173220p:plain

(前回イベントとのバナー広告が一緒なのは内緒です...笑)



---イベント内容---

私(ぱふ)心身を削りながらたったの1週間でイベント期間中に投稿された全てのゲーム(※1)の攻略挑戦するイベントです!

(※1)遅れて投稿されたゲームも放送期間内であれば含む

攻略の様子についてはYoutube上で生放送を行う予定です!



---開催期間---
11/26(Mon) ~ 12/2(Sun)

平日:20:00~24:00(予定)
土・日:10:00~24:00(予定)



---皆様にお願い!---

放送当日の放送開始前にYoutubeの放送URLをTwitterでお知らせします。
放送期間の間、お手数ですがTwitterのフォローをお願いします!

フォローはココをクリック



---さいごに---

「自分のゲームが実際にプレイされているのを見たい!」
「他の人のアイディアを見たいけどプレイが面倒!」
「視聴者同士で意見をぶつけ合いたい!」 etc...

という方は是非、放送にお越しください!
私もコメントが盛り上がっている方がモチベーションも数倍以上になります!!なので、コメントもしてくださいね!笑

それでは、放送当日にお会いしましょう!ノシ



---追記---

放送URLは確定ではありませんが以下のURLだと思います。
当日Tweetを見逃した際に利用してみてください。

https://www.youtube.com/watch?v=Sj0Piq4_4oY

タイトルが変なのは前回放送の名残です...多分。

【Unity】Color型をカラーコード(string型)に変換する

やりたいこと

Color color = new Color(1f, 0, 0); // 赤色
// これを "#FF0000" の文字列に変換したい!!

こうする

Color color = new Color(1f, 0, 0); // 赤色

string colorCode = ColorUtility.ToHtmlStringRGB(color);

Debug.Log(colorCode);
// FF0000

#が必要な方は#が付かないことに注意してください〜。

a値も欲しい...

透過情報であるa値も欲しい方はColorUtility.ToHtmlStringRGBではなくColorUtility.ToHtmlStringRGBAを使うようにしましょう!

上で例として出したColor color = new Color(1f, 0, 0);の場合だとFF0000FFが返ってきます。

おわり

Twitterフォロー歓迎です...(`・ω・´) ヨロシク!

【Unity2018】マルチシーンを使うと"Your multi-scene setup may be improved by tending to the following issues"というエラーが出た

はじめに

おはこんばんにちは。ぱふです。
先日、重い腰を上げてUnityを2018にアップデートしました!

すると、こんなエラー(警告)が...
Your multi-scene setup may be improved by tending to the following issues: Multiple scenes baked with Auto enabled can appear differently in Play mode when reloading them. Consider disabling Auto and rebaking.

放置しても動くんですが、なんか気持ち悪いので原因を調査...!
その結果解決したので、「誰かの役に立つかも?」と思い記事に直しておきます。

原因

調べてみるとLightingのエラーでした。
Lightingの設定をAuto Generateにしていると新しくシーンがロードされるたびにライトがベイクされるようで、「複数のシーンをロードすると、シーンごとに自動設定した光の当たり方と異なるかもしれないけど大丈夫か?」という警告のようです。

解決方法

Lightingの設定をAuto Generateから変更することで解決します。

シーンごとにGenerate Lightingしましょう。
これで警告文は綺麗さっぱり消えてくれます!

ちなみに....一部だけしかGenerate Lightingの設定をしないと
Your current multi-scene setup has inconsistent Lighting settings which may lead to different lighting when loading scenes individually or in a different order! Consider homogenizing the following: 1/2 scenes have Auto baking enabled.
というエラーが出ちゃうので注意してくださいね!

ん?2D?

「2Dってライトのベイクとか...あるっけ?」と思った方。
そうです。おそらく普通のゲームを作っている分には2Dでは影響はないと思います............多分!(自己責任で!笑)

おわり

Twitterフォロー歓迎です...(`・ω・´) ヨロシク!

【Unity】実行中の関数名の表示方法をちょっとだけプログラマーっぽくする

やりたいこと

Debug用に関数が実行された時に関数名を表示したいけど...

void HogeHogeHoge(){
  Debug.Log("HogeHogeHoge");
  // 処理
}

void PiyoPiyoPiyo(){
  Debug.Log("PiyoPiyoPiyo");
  // 処理
}

と全ての関数にこんな感じで書くのはダサい!プログラマーっぽく書きたい!

こうする

using using System.Reflection; // 忘れずに!!

void HogeHogeHoge(){
  Debug.Log(MethodBase.GetCurrentMethod().Name);
  // 処理
}

void PiyoPiyoPiyo(){
  Debug.Log(MethodBase.GetCurrentMethod().Name);
  // 処理
}

ん?長くなってるじゃないかって?
...ま、まぁ、、タイプミスとか減るし良いよね?ね?ね?
(個人的にプログラマーっぽいし。笑)

おわり

Twitterフォロー歓迎です...(`・ω・´) ヨロシク!

【Unity】Inspectorウィンドウをロックする

やりたいこと

Inspectorはオブジェクトを選択する度にコロコロ変わってしまうので、変わらないようにしたい。

例えば、以下のInspectorはMainManagersを選択した時です。 この状態でPlayerを選択してもInspectorが変わらないようにしたい。

f:id:PafuOfDuck:20181115194916p:plain

こうする

以下のアイコンをポチッと押しましょう!

f:id:PafuOfDuck:20181115200027p:plain

ちなみに、、、
解除はもう一度ポチッと押せばオーケーです!

豆知識?

他のウィンドウでもこのアイコンがあればロックできます〜。 どうやらTimelineでは必須級らしい...?

おわり

Twitterフォロー歓迎です...(`・ω・´) ヨロシク!

【Unity】スクリプトからSprite RendererのSpriteをNoneにする

やりたいこと

スクリプトからSprite RendererSpriteを変更してNoneにしたい

こうする

以下のスクリプトで大丈夫。

SpriteRenderer sr;
sr.sprite = null;

おわり

Twitterフォロー歓迎です...(`・ω・´) ヨロシク!

【Unity】コンポーネントをスクリプトから追加or削除する方法

やりたいこと

タイトルのように、
スクリプトからコンポーネントを追加or削除』したい!

こうする

-- 追加 --
gameObject.AddComponent<コンポーネント名>();
-- 削除 --
Destory(GetComponent<コンポーネント名>);

補足

コードの例は、コンポーネントの追加or削除を ”スクリプトがアタッチされたGameObject” に対して行う場合を想定しています。なので、他のGameObjectに対して操作を行う場合は書き換えましょう。

おわり

Twitterフォロー歓迎です...(`・ω・´) ヨロシク!

【C#】エディタで「possible loss of fraction」の警告が出た時

possible loss of fractionの意味

取り敢えず、googleで翻訳してみましょう。

google『可能な分数の損失』

うーん...意味が分からない...。自分で訳すしかないですね。笑
......
......
『分数の損失が起こりうる』という意味かな。

原因

C#では割り算の際にint / intintになります。(切り捨て)
10 / 4という計算をすると2.25ではなく2になるわけです。

この計算をfloatdoubleの変数に代入したり、floatdoubleを引数に取る関数に渡したりすると、possible loss of fractionという警告が出るわけです。

解決方法

int / intの割り算を故意的に行っている場合は問題ないと思います。
故意的でない場合は(float) int / intのようにキャスト変換してあげれば問題ないと思います。

おわり

Twitterフォロー歓迎です...(`・ω・´) ヨロシク!

【C#】数値を表示する際に0で埋める方法

こういうことがしたい

63と表示するのではなく063のように指定した桁数まで0で埋めたい!

こうする

int speed = 63;
string s = "";

// 方法1
s = String.Format("時速{0:D3}kmです", speed);

// 方法2
s = String.Format("時速{0:000}kmです", speed);

// 方法3 -C#6.0以上-
s = $"時速{speed:D3}kmです";

// どの方法でもsは「時速063kmです」となる。

ちょっと解説

キモは{A:X}となっている部分です。

Aの部分はFormatでいつも指定している要素を表す番号です。
Xの部分でD3000という風に0埋めの桁数を指定出来ます。

おわり

Twitterのフォロー歓迎です...(`・ω・´) ヨロシク!

眺めてコピペするだけ!Odin便利属性7選!

いきなりですが注意!

「Odin?何それ?」って思った方!
実はコレ、二部構成の後半記事です。

前半記事(きつねうどんさん担当)を読んでなくても大丈夫な構成になっていますが、『Odinとは?』について解説されているので是非読んでみてください〜!

qiita.com

はじめに

『Unity アセット真夏のアドベントカレンダー 2018』も本日が最終日! 皆さんも最終日なので読み疲れて来たんじゃないでしょうか?

なので...最終日はOdinの便利な属性たちを《Gif動画+サンプルコード》でお届け致します! 眺めて便利なものをコピペするだけ!最終日に相応しいラクだと思いませんか?!

簡単に追加できるのに便利!というものを全属性から7つ選びました! Unityを扱う全員が使えるかどうかを第一に考えているので、是非ご覧下さい!

では、早速紹介していきますよー!

便利属性7連発!

その1:アタッチ間違いを回避だ!

「Prefabをアタッチしようとしたら、Scene上のオブジェクトをアタッチしてた!」 そんな方はコチラ↓↓↓

f:id:PafuOfDuck:20180830031439g:plain

  • Asset Only Obj
    • AssetであるPrefabObjectはアタッチできる
    • AssetではないSceneObjectがアタッチできない
  • Scene Only Obj
    • Scene上にあるSceneObjectはアタッチできる
    • Scene上にないPrefabObjectはアタッチできない

サンプルコード

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{
    [AssetsOnly]
    public GameObject AssetOnlyObj;
    
    [SceneObjectsOnly]
    public GameObject SceneOnlyObj;
}

その2:アタッチし忘れを回避だ!

「Inspector上でアタッチし忘れてた!これがバグの原因の元に...」 そんな悲しい思いをしたことがある方はコチラ↓↓↓

f:id:PafuOfDuck:20180830031630g:plain

何もアタッチされていないと、エラーが出ているのが確認できると思います!

サンプルコード

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{
    [Required]
    public GameObject NeedObj;
}

その3:試作でGUIのボタン作るの面倒だ!

「『ボタンが押されたら〇〇』の動作を確かめるのにSceneに仮のボタン配置は面倒!」 そんな方はコチラ↓↓↓

f:id:PafuOfDuck:20180830031734g:plain

もちろん、ゲームを再生中にも有効なのでGUIのボタンなしでテスト可能です!

サンプルコード

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{
    public int Number;
    
    [Button]
    private void AddNumber()
    {
        Number++;
    }
}

[Button]の配置の派生バージョンとして
[InlineButton]
[ButtonGroup]
[EnumToggleButtons]
があるので、気になる方は使ってみてください。

その4:要素に見出しを付けるのだ!

「見出しをつけて、変数を見やすくしたい!」 そんな方はコチラ↓↓↓

f:id:PafuOfDuck:20180830031813p:plain

サンプルコード

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{
    [Title("Player")]
    public string PlayerName = "PAFU";
    public int PlayerAge = 80;
    
    [Title("Enemy", "SubTitle", bold: false, horizontalLine: false, titleAlignment: TitleAlignments.Centered)]
    public string EnemyName = "MODOKI";
    public int EnemyAge = 10;
}

追加で設定できる要素は以下の4種類です。
・SubTitle:サブタイトルを設定できます。
・bold:太さを設定できます。デフォルトはtrueです。
・horizontalLine:水平線の有無を設定できます。デフォルトはtrueです。
・titleAlignment:Titleの表示場所を設定します。

その5:要素の名前を分かりやすくするのだ!

「コードでStage Numを定義したけど、Inspectorでは現在のステージと表示したい!」 という方はコチラ↓↓↓

f:id:PafuOfDuck:20180830031832p:plain

サンプルコード

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{
    [LabelText("現在のステージ")] public int StageNum;
}

「Inspector上の名前を動的に変更したい!」 そんな方に追加情報!

Odin05.gif

コードも置いておきます!

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{   
    [LabelText("$text")] public string text = "自由な変数名";
}


敵キャラが沢山いて、キャラの名前を動的に変更したい時に便利なのかも??

その6:ドロップダウンを使って値をセットするのだ!

「予め登録しておいた値をInspectorからセットしたい!」 という方はコチラ↓↓↓

f:id:PafuOfDuck:20180830031922g:plain

GIF動画でも分かるように型によっては検索機能も付いています。

サンプルコード

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{
    [ValueDropdown("speedArray")]
    public int Speed;

    private int[] speedArray = { 10, 20, 30 };
}

応用として、値に名前を付けて設定しやすく出来ます! (コードは公式のやつ持って来ちゃいました。)

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{
    [ValueDropdown("myVectorValues")]
    public Vector3 MyVector;

    // The selectable values for the dropdown, with custom names.
    private ValueDropdownList<Vector3> myVectorValues = new ValueDropdownList<Vector3>()
    {
        {"Forward", Vector3.forward },
        {"Back",    Vector3.back    },
        {"Up",      Vector3.up      },
        {"Down",    Vector3.down    },
        {"Right",   Vector3.right   },
        {"Left",    Vector3.left    },
    };
}

↑のようにコードを書けば... ↓のように設定できます...!

f:id:PafuOfDuck:20180830031945g:plain

その7:インフォメーションを表示したい

「Inspector上にもメモを残したい!」 という方はコチラ↓↓↓

f:id:PafuOfDuck:20180830032115p:plain

ちなみに[InfoBox("お知らせ", InfoMessageType.XXX)]と書くことで、枠内のアイコンが変更できます。

f:id:PafuOfDuck:20180830032143p:plain

上から
InfoMessageType.None
InfoMessageType.Info(デフォルト)
InfoMessageType.Warning
InfoMessageType.Error
に設定したものです。

サンプルコード

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{
    [InfoBox("ここにお知らせが書けるよ!")]
    public int Num;
}

インフォメーションを出すかどうかをbool値で管理出来ます。

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{
    public bool IsDisplay;
    
    [InfoBox("ココに情報を書けるよ!", "IsDisplay")]
    public int Num;
}

↑のようにコードを書けば... ↓のようにインフォメーションを表示or非表示に出来ます...!

f:id:PafuOfDuck:20180830032309g:plain

おわり

バババッ!と7つ紹介しました!気になる使い方はあったでしょうか? Odinを持っているかに関わらず参考になった箇所があれば嬉しく思います!

大トリですが、締めもなくサッと終わりますよ!
執筆者の方々&読者の方々お疲れ様でしたー!!!