Unity」タグアーカイブ

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などに、このコードを記述したスクリプトを張りつける。

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

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

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

例えば、

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

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

UniRxでTimer処理を行う方法

UniRxでTimer処理を行う方法

	Observable.Interval(TimeSpan.FromMilliseconds(1000)).Subscribe(l =>
        {
		//Something Do            
        }).AddTo(this);		

TimeSpan.FromMilliseconds(1000)で、ミリ秒で待ち時間を設定する。