へなちょこプログラマ blog

ゲーム制作・プログラミング・趣味について記載するブログ

【Unity】 Random.Rangeに気をつけろ!

目次

 

概要

UnityのRandom.Rangeが引数intとfloatのオーバーロードで挙動が違うので、「気をつけろ!」といった内容の記事になります。

散々痛い目にあったので、忘れないようにこの記事を書くことにしました。

Random.Rangeとは?

// float
Random.Range(float min, float max);

// int
Random.Range(int min, int max);

「minからmaxの間の値をランダムに返す」といった機能の関数です。

docs.unity3d.com

何に気を付ける?

Random.Rangeですが、floatとintの比較をしながら説明したいと思います。

floatの場合

下記の「_ranNum」には0.0〜1.0の間のランダムな少数が入る

float _ranNum = Random.Range(0.0f, 1.0f);

intの場合

下記の「_ranNum」には0〜9の間のランダムな値が入る

int _ranNum = Random.Range(0, 10);

「んっ?0~10で指定したのに0~9が返ってくるだと?」
これが今回のRandom.Rangeの気を付けなければいけないところです!

floatだとmaxの値までが返ってくるのに対して
intは「max - 1」が返ってきます。

なぜmax - 1?

これは個人的な解釈ですが、配列などのLengthやListのCountの値を直接使用するためではないかと思います。

int[] _array = { 0, 1, 2, 3, 4, 5 };
int _index = Random.Range(0, _array.Length); // _array.Length - 1と書かなくて良い
int _value = _array[_index];

誰かの参考になれば幸いです。

【Unity】 PlayerPrefsをエディターで削除

目次

PlayerPrefsとは

 前回PlayerPrefsについて記載しましたので、よろしければ一緒にご覧いただければと思います。pandoraxssscan-929.hatenablog.com

 

削除の仕方

Editor>Clear All PlayerPrefsを押すだけで、現在保存されているPlayerPrefsの情報をクリアすることができます。

f:id:pandoraxssscan-929:20200830204626p:plain

PlayerPrefs削除

 

 

Unity2020入門

Unity2020入門

 

 

 

 

【Unity】 セーブ/ロードを実装 PlayerPrefs

目次

Unityでデータを保存するには?

ゲームのスコアなどを「セーブ・ロードしたい」といったことありませんか?

その際に使用できるのがUnityの「PlayerPrefs」という機能です!

スコアなどの単純なデータであれば、PlayerPrefsを使用できます。

docs.unity3d.com

PlayerPrefsで保存できる型

下記の3つの型でセーブ・ロードが可能です。

  • int
  • float
  • string

セーブ

値の設定
  • int : PlayerPrefs.SetInt("保存キー", 保存するデータ);
  • float : PlayerPrefs.SetFloat("保存キー", 保存するデータ);
  • string : PlayerPrefs.SetString("保存キー", 保存するデータ);

※これを呼んだだけではまだ値はディスクには書き込まれていない。

ディスクへの書き込み

PlayerPrefs.Save();

※ 呼ばなくてもアプリ終了時に保存されるが、
 アプリがクラッシュした際は保存されないようなので定期的に保存した方が良さげ。

使用例

// int型で保存
int score = 999;
PlayerPrefs.SetInt("SCORE", score);

// float型で保存
float time = 1.0f
PlayerPrefs.SetInt("TIME", time);

// string型で保存
string name = "Hoge";
PlayerPrefs.SetInt("SCORE", name);

// ディスクへの書き込み
PlayerPrefs.Save()

ロード

  • int : PlayerPrefs.GetInt("保存時のキー", 値が保存されていない際の値);
  • float : PlayerPrefs.GetFloat("保存時のキー", 値が保存されていない際の値);
  • string : PlayerPrefs.GetString("保存時のキー", 値が保存されていない際の値);
// int
int score = PlayerPrefs.GetInt("SCORE", 0);

// float
float time = PlayerPrefs.GetFloat("TIME", 0f);

// string
string name = PlayerPrefs.GetString("NAME", "NONE");

削除

キーを指定して削除

PlayerPrefs.DeleteKey("保存時にしてしたキー");

全削除

PlayerPrefs.DeleteAll();

// キーを指定して削除
PlayerPrefs.DeleteKey("SCORE");
PlayerPrefs.DeleteKey("TIME");
PlayerPrefs.DeleteKey("NAME");

// 全削除
PlayerPrefs.DeleteAll();

【おすすめ商品】ジェットウォッシャー ドルツ

目次

 

紹介 

みなさん、ご飯食べた後の口の中気になりませんか?

 

そんなみなさんにおすすめの商品がこちら!

 

 

パナソニック 口腔洗浄器 ジェットウォッシャー ドルツ 青 EW-DJ51-A

パナソニック 口腔洗浄器 ジェットウォッシャー ドルツ 青 EW-DJ51-A

  • 発売日: 2014/09/01
  • メディア: ホーム&キッチン
 

 

 

パナソニックのジェットウォッシャー ドルツ」

歯磨きも大事ですが、これを使用した後の口の中なのスッキリ感は半端ないです。

 

自分はこの商品のレビューをみたときは「水で洗い流した程度でそんな変わるものか?

」と思っていましたが、いざ購入して使用してみるとビックリでした。

 

口臭や食後の口内が気になる方は是非試してみてください。

【Unity】Unity2019.40f1 iOS 上書きビルドできない?

 

概要

Unity2019.4.0f1を使用していた際にUnityでプラットフォームをiOSでビルドする際に

上書き(Append?)でビルドをすると下図のようなエラーが表示され何故か失敗するということがありました。

f:id:pandoraxssscan-929:20200816214951p:plain

iOSビルドエラー

 

エラーの詳細 

DirectoryNotFoundException: Could not find a part of the path '/ビルド先のパス/Test/Unity-iPhone/Images.xcassets/LaunchImage.launchimage'

 「'LaunchImage.launchimage'というディレクトリがないよ」と言われているようです。

解決方法

「Test/Unity-iPhone/Images.xcassets/」の下にLaunchImage.launchimageというフォルダを作成すれば解決します。

 

ただ、ビルドする度に作成しないといけないので、応急処置程度にしかなりません。

余裕があればビルド時にフォルダを自動で作成するような拡張を作りたいですね。

 

 

 

ゲームを動かす数学・物理 R

ゲームを動かす数学・物理 R

  • 作者:堂前 嘉樹
  • 発売日: 2020/12/26
  • メディア: 単行本
 

 

【Unity】URLスキームの設定(iOS)

目次

ディープリンクの実装についても書いているので、 合わせてこちらもどうぞ! pandoraxssscan-929.hatenablog.com

URLスキームとは?

「URLの先頭部分『~~://』のこと、もしくはURLの先頭部分『~~://』に名前を指定してアプリを開くこと」

出典 : URLスキームとは 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

と書かれています。

今回は後者の

URLの先頭部分『~~://』に名前を指定してアプリを開くこと

に当てはまります。

設定方法

それでは設定していきましょう。

  1. Project Settings>Playerを開く
  2. Other Settingsを開く
  3. Supported URL Schemesに設定する

f:id:pandoraxssscan-929:20200816185055p:plain
iOS URL スキーム

これで外部からこのスキームを叩くと設定したアプリを起動することができる。

【Unity】ディープリンク実装

目次

概要

Webページで、 AppStoreとかGooglePlayStoreのアイコンがあってタップすると

  • アプリがインストール済みならアプリ起動
  • 未インストールならストアへ飛ばされる

みたいなやつ見かけないですか?

あれを簡易的にC#だけでアプリ上で実装するためのコードです。

このスマホアプリやWebページからアプリに飛ぶことを「ディープリンク」とか「ディープリンキング」と呼ぶらしいです。
詳しく知りたい方は調べてみてください。

きっかけ

この機能を実装しようと思ってネットで色々調べても、難しそうなやつしか出てこなかった

みたいなやつしかなかった。

どっちもハードルが高そうだったので「C#だけでなんとかならんのか?」
と悩み考え出したコードです。
(凄そうに聞こえますが、大したことはやってませんw)

※間違っている可能性がございます、ご使用される際は注意してご利用ください。

コード

using System.Collections;
using UnityEngine;

/// <summary>
/// ディープリンク用テストクラス
/// </summary>
public class Test : MonoBehaviour
{
    private const string urlScheme = "line://"; // 開きたいアプリのURLスキーム

    // アプリのストアへのリンク(ブラウザで検索したやつで大丈夫だった)
    #if UNITY_EDITOR 
    private const string storeUrl = "https://play.google.com/store/apps/details?id=jp.naver.line.android&hl=ja"; // エディターではGooglePlayへのリンク
    #elif UNITY_IOS   // --- iOS用のストアへのリンク
    private const string storeUrl = "https://apps.apple.com/jp/app/line/id443904275";
    #elif UNITY_ANDROID // --- Android用のストアへのリンク
    private const string storeUrl = "https://play.google.com/store/apps/details?id=jp.naver.line.android&hl=ja";
    #endif

    /// <summary>
    /// 別アプリへの遷移処理(これを呼び出す)
    /// </summary>
    public void TransitionAnotherApp()
    {
        // URLスキームを元に別アプリへ遷移
        Application.OpenURL(urlScheme);

        // 上記に反応がない場合は一定時間後にストアへ飛ばす
        StartCoroutine("TransitionStore");
    }

    /// <summary>
    /// ストアへ飛ばすためのコルーチン用関数
    /// </summary>
    private IEnumerator TransitionStore()
    {
        yield return new WaitForSeconds(1f);

        Application.OpenURL(storeUrl);
    }

    /// <summary>
    /// アプリが起動しているかの
    /// </summary>
    /// <param name="pause">アプリケーションが起動しているか?</param>
    private void OnApplicationPause(bool pause)
    {
        // アプリに復帰したらストアを開くコルーチンを止める。
        if (!pause) 
        {
            StopCoroutine("TransitionStore");
        }
    }
}

ゲームを動かす技術と発想 R

ゲームを動かす技術と発想 R

コードの説明

サンプルコードはLINEを例に作っています。

ざっくり説明すると

  1. LINEがインストールされていれば開く
  2. インストールされていなければ、OSに対応したストアを開く

iOSAndroidともにUnityで作ったテスト用のアプリは起動しました。

LINEのURLスキームについて

developers.line.biz

最後に

今回はアプリを開く側の解説だったので、今度は開かれる側の設定を紹介できればと思います。

間違いや、「もっとこうした方が良い」などご意見がありましたら、
気軽にコメントしてください。