Unity」カテゴリーアーカイブ

Debug.LogFormat

Debug出力する際に、定例分の中に変数を埋め込むString.formatは便利なのですが、Debug.Logと組み合わせると、コードが長くなってしまいますが、直接、フォーマットできる方法があります。

Debug.LogFormatを使うと、整形フォーマットを指定できます。

string foo = "abc";
Debug.LogFormat("foo: {0}", foo); // foo: abc

引数の指定の仕方は、String.formatと同じ。

Please follow and like us:

C#で2次元配列

C#で2次元配列を宣言、初期化する

int[,] twoDim = new int[8,16];

要素8個の中に、要素16個を持つ2次元配列をつくる。

2次元配列のアクセス

int[2,4] = 128;
Please follow and like us:

DoTweenでオーディオのフェード

DoTweenでオーディオのフェードイン/アウトを簡単に実装

ライブラリのインポート

冒頭で、

using DG.Tweening;

フェードをしたいところで

ボリューム0まで、1秒でフェードアウトする場合

AudioSource audioSource = this.gameObject.GetComponent<AudioSource>();
float vol = 0.0f;
float duration = 1.0f;
audioSource.DOFade( vol, duration );

AudioSourceコンポーネントを持ったGameObjectなどに、このコードを記述したスクリプトを張りつける。

Please follow and like us:

macOSをHigh SierraにしたらAssetsが空になる件

UnityのVersion 5.6.1 f1で発生するのだが、macOSをHigh Sierraにすると、Assetsの中身が空になってしまう症状がある。

原因は、High Sierraで採用されているファイルシステムAPFSにUnityの古いバージョンが対応していないのが原因。プロジェクトフォルダを、これまでのAFPSの外付けHDDにコピーして読み込めば、
開くことが可能。一安心。
ちなみに、このバグのパッチが当たったバージョンもリリースされている。

詳しくは、こちらを。
https://helpdesk.unity3d.co.jp/hc/ja/articles/115012768187-macOS-10-13-High-Sierra-%E3%81%AB%E3%81%A6-Project%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E5%86%85%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8C%E8%A6%8B%E3%81%88%E3%81%AA%E3%81%84-%E3%81%82%E3%82%8B%E3%81%84%E3%81%AFMonoDevelop%E3%81%8C%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%AA%E3%81%84

Please follow and like us:

左クリックなのか、右クリックなのかを判別する方法

イベントデータからボタンの種別を取得できる

例えば、

public void OnPointerClick(PointerEventData pointerEventData)
{
    switch(pointerEventData.pointerId)
    {
        case -1:
            Debug.Log("Left Click");
            break;
        case -2:
            Debug.Log("Right Click");
            break;
        case -3:
            Debug.Log("Middle Click");
            break;
    }
}

https://docs.unity3d.com/ja/current/ScriptReference/EventSystems.PointerEventData.html

Please follow and like us:

UIのPrefabを追加するときのWarning

Prefab化したUIパーツをCanvasに、スクリプトでアタッチしようとしたらWarningが出た。

Parent of RectTransform is being set with parent property. Consider using the SetParent method instead, with the worldPositionStays argument set to false. This will retain local orientation and scale rather than world orientation and scale, which can prevent common UI scaling issues.
UnityEngine.Transform:set_parent(Transform)

GameObject o = Instantiate( Foo );
o.transform.parent = this.transform;

こういう様に親GameObjectを指定するのは良くはなく、以下が正しい。

GameObject o = Instantiate( Foo );
o.transform.SetParent(this.transform);

Via! http://haraken.hatenablog.com/entry/2016/11/11/RectTransform%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%A8%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%AE%E8%A9%B1

Please follow and like us:

ofMapみたいなMapping&Scaling

ofMapのように、任意の数値を定められた数値範囲変換(スケーリング、数学的には線形写像というらしい)をC#でできるようにする。
独自のユーティリティクラスを作る方法もあるが、既存のfloat型を拡張する形での実装方法。

以下のコードを、Map.csなどとして、スクリプトを置くフォルダ(ex. /Scripts)に保存する

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public static class ExtensionMethods
{
    public static float Map (this float value, float fromSource, float toSource, float fromTarget, float toTarget)
    {
        return (value - fromSource) / (toSource - fromSource) * (toTarget - fromTarget) + fromTarget;
    }

}

使用方法は以下の通り

float foo = 0.5f;
float result = foo.Map( 0.0f, 1.0f, 0, 100 );
//50

Via! https://stackoverflow.com/questions/14353485/how-do-i-map-numbers-in-c-sharp-like-with-map-in-arduino

Please follow and like us: