ぱふの自由帳

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

【Unity】'Random' is an ambiguous reference between 'System.Random' and 'UnityEngine.Random' というエラーを解決する

はじめに

タイトルでも書いていますが、'Random' is an ambiguous reference between 'System.Random' and 'UnityEngine.Random'というエラーが出た時の対処法をメモしておきます。

原因

コード内にRandom使ってるけど、System.RandomUnityEngine.Randomのどっちを使うつもりなの?ということがエラーの原因です。

ちなみにですが、このエラーはusing System;を追加した時に現れるはずです。

解決方法

どっちのRandomを使用するかを明示的に示してあげれば大丈夫です。
例えば、Random.Range(...)というコード部分でエラーが出ていれば、UnityEngine.Random.Range(...)と書き換えてください。

追記(2018/4/22)

フォロワーさんからusing Random = UnityEngine.Randomという方法を教えていただきましたー!
コード内で何度も同じことを書かずに済むので、こちらが良いですね!

おわり

SystemUnityEngineのどちらを使っても同じ動きをするとは限らないので、気になる方は双方のリファレンスをチェックしてから使用してくださいね!(`・ω・´)

【RuboCop-Linter】align the elements of a hash literal if they span more than one line.という警告に対処する

はじめに

タイトルにも書いたとおり、 align the elements of a hash literal if they span more than one line.という警告文に対処する方法です。

対処法

これは、2行以上であれば要素を揃えなさいという警告です。半角スペース1つでもズレていれば怒られます!
(上は半角スペース1つ分足りずに警告が出ています)

f:id:PafuOfDuck:20180409193309p:plain

f:id:PafuOfDuck:20180409193355p:plain

おわり

記事の内容ペラッペラですが、メモを残すことは大事というわけで...(`・ω・´)

【Unity2017.1】親オブジェクトの回転を無視したい!

はじめに

”親オブジェクトは回転させたいんだけど子オブジェクトは回転させたくない!”という方向けの記事です。

意外なことに、この方法の紹介記事が見当たらなかったので記事にしましたー。選択肢の一つとしてどうぞ!

Quaternion.Eulerを直接代入しよう!

子オブジェクトに以下のスクリプトをアタッチしてみましょう。

void Update(){
    gameObject.transform.rotation = Quaternion.Euler(x, y, z);
}

これで子オブジェクトの回転が親オブジェクトの回転に関係なく固定されるはずです。

注意:(x, y, z)にはWorld座標から見たオブジェクトのRotationを代入してください。 『World座標から見た』という意味が分からない方は、親オブジェクトを持たない状態でのRotationの値と考えてもらえれば良いです。

注意点?

gameObject.transform.rotationgameObject.transform.localRotationにしないようにしましょう。

おわり

一番最初に思いつきそうな単純な方法なのですが、なぜ記事がなかったのか...ぐぐーる力が無いのでしょうか...(。´・ω・`)

【Android】アプリのインストール時に発生する「このアプリはインストールされていません」というエラーの解決法

はじめに

Unityの実機デバッグ時にAndroidで.apkファイルを開いてインストールしようとするとこのアプリはインストールされていませんというエラーが出てしまう...。
そんな時に役立つ(かもしれない)記事です。

おそらくUnity以外で生成した.apkでも大丈夫です。

解消法

  • 設定 > アプリケーションからアプリがインストールされているか確認して、インストールされていればアンインストールしてください。

  • 設定 > アプリケーションからアプリがインストールされているか確認して、すべてのユーザーからアンインストールを選択して全てのユーザーからアンインストールをしてください。

私は2つ目の方法が必要な状況に遭遇したことないのですが、ネットで見つけたので参考に記述しておきました〜。

おわり

単純なことなのですが、このエラーに出会った時は「なんやこれ?!」ってなったので記事に直しましたー。

記事とは関係ないのですが、スマホにマルチユーザー機能とかあるのですねー。こういうテストもしなければならないのでしょうか..(´・ω・`。)メッチャタイヘン

【Xcode】”〜のiPhone is busy: Preparing debugger support for 〜のiPhone”というエラーを解消出来るかもしれない方法

はじめに

〜のiPhone is busy: Preparing debugger support for 〜のiPhoneというエラーに困っていませんか?
今回はこのエラーを解消できるかもしれない方法のメモです。

解消法紹介

以下の方法のどれかで解決するはずです。
解消しない場合はいくつか試してみてください。

※数字が小さいほど(個人的に)直る確率が高いものです

  1. PC上でiTunesが開いていれば閉じる
  2. iphoneを再起動
  3. Xcodeを再起動
  4. iphoneXcodeに接続し直す
    Window > Devices and Simulatorsを開いてUnpair Deviceを実行して登録を解除した後、再度登録し直します。

    f:id:PafuOfDuck:20180308231248p:plain

    f:id:PafuOfDuck:20180308231252p:plain

おわり

基本はiphone再起動+Xcode再起動で直る気がしますー!

「他の方法で解決したよ!」という方がいれば情報をいただけると嬉しいです〜。

switch文のスコープのお話

はじめに

ふとした時に役立つswitch文のスコープについての話です。

switch文のスコープ

違いが分かりますか?

2種類のswitch文を使用したコードを載せます。
違いを答えることが出来ますか?

switch(hoge){
  case 0:
    int i = 2;
    break;

  case 1:
    int i = 4;
    break;
}
switch(hoge){
  case 0:
    {
      int i = 2;
      break;
    }

  case 1:
    {
      int i = 4;
      break;
    }
}

違いを解説

1つ目のコードは動きませんが、2つ目は問題なく動きます。
原因は...そう!記事のタイトルにもあるようにスコープです。

switch文のスコープはデフォルトのままだとswitch文全体に及びます。すなわち、case 0内で宣言した変数をcase 1内でも使用できるのです。なので、1つ目のコードは同じ変数名で宣言をしているとみなされて動かなかったんですね。
しかし、case内で{}を用いると...{}内部にのみ適応されるスコープが出来上がります。そのため、2つ目のコードは問題なく動いたのです。

おわり

switch文の内部で凝った実装をするとスコープが邪魔をしてきます。
「実装方法に問題がある!」と言われてしまえばそれまでですが、変数のスコープで困った場合は{}で解決しちゃいましょう!

追記:{}で囲むとswitch文に限らず新たなスコープを作成できるようです。指摘してくれた方、ありがとうございます! ((((一回も使ったことなくて知らなかった...

【Unity】2点間の距離を求めるいくつかの方法

はじめに

2点間の距離を求める方法がいくつかあるので紹介したいと思います!
是非、自分好みの方法を探してみて下さい〜。

方法紹介

その1:三平方の定理

三平方の定理の詳細は解説サイトにお任せします。

直角三角形の斜辺をC, その他の辺をAとBとすると、
A^2 + B^2 = C^2 ってなるやつですね。


コードはこちらになります。

Vector2 posA = new Vector2(1f, 2f);
Vector2 posB = new Vector2(3f, 4f);

float distance = Mathf.Sqrt(Mathf.Pow(posA.x - posB.x, 2) + Mathf.Pow (posA.y - posB.y, 2));
  • Mathf.Pow()は累乗を行う関数

  • Mathf.Sqrt()は与えた数を平方根に直す関数

その2:magnitude

magnitudeはベクトルの長さを返してくれます。
そのため、最初に2点の引き算を行うことでベクトルに変換して使用します。

Vector2 posA = new Vector2(1f, 2f);
Vector2 posB = new Vector2(3f, 4f);

float distance = (posA - posB).magnitude;

その3:Distance()

Distance()は2点を与えると2点間の距離を返してくれます。

Vector2 posA = new Vector2(1f, 2f);
Vector2 posB = new Vector2(3f, 4f);

float distance = Vector2.Distance(posA, posB);

さいごに

個人的にはその3が好きですね〜。
距離っていう名前の関数名なので後から見ても分かりやすいですし!

好きな方法を模索してみて下さい!では〜。

【Unity】ベクトルを正規化する

はじめに

ベクトルの正規化を行う方法の紹介です。

正規化?

ベクトルを正規化すると単位ベクトル(長さが1のベクトル)になります。
詳しくはグーグル先生に。とても分かりやすく教えてくれますよ。笑

やり方

Vector3.normalized

Vector3.normalizedで正規化されたベクトルを取得できます。

Vector3 v = new Vector3(1, 2, 3);
Vector3 vn = v.normalized;
// vnは"vと同じ向き&長さが1"のベクトルになっている

Vector3.Normalize()

Vector3.normalizedに似ていますが、若干違います。
Vector3.Normalize()は元のベクトルを変更する時に使用します。

Vector3 v = new Vector3(1, 2, 3);
v.Normalize();
// vが"向きはそのまま&長さが1"のベクトルになる

おわり

しっかり使い分けましょー。

【C#】Listの一部をListとしてコピーする方法

はじめに

Listの一部をListとして取り出す方法についてです。

Listの一部をListとして取り出すというのは、こんな感じの操作です↓

List<int> list1 = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

/*
 list1の[3]~[6]部分が欲しい
 List<int> list2 = {3, 4, 5, 6} のようなList
*/

方法

GetRange(int index, int count)を使用します。

それぞれの引数についての解説

  • 第一引数は切り取り部分のスタートとなるindex番号

  • 第二引数は切り取りたい個数

以上を踏まえて”はじめに”で挙げた例をコードに直したいと思います。

List<int> list1 = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
List<int> list2 = list1.GetRange (3, 4);

// list2 -> {3, 4, 5, 6} となる

おわり

簡単ですねー。
同じことを配列でやろうとすると...Copyという関数を使うのが手っ取り早いのかな?

気になる方はググってみてくださーい!

Sourcetreeの使い方入門!《2018年2月更新》

はじめに

Sourcetreeの基本的な使い方を調べたものをまとめた記事です。
執筆時点で私も初心者同然なので詳しい領域には踏み込めないと思いますが良ければ参考にしてください!

あ。ちなみにMacでやっているのでWindowsの方とは違う箇所があるかもしれません...。

事前準備

  • Gitの初歩的な知識(Git管理のプロジェクトが作れる/Gitの基礎用語が理解できる程度でOKです)

  • GitHubリポジトリを作成

Sourcetreeって?

GitをGUIで操作できるツールらしい。
コマンドでGit管理?アレ面倒だよな?って方に適しているかも。

SourceTreeのインストール

Sourcetree公式でダウンロードして下さい。

f:id:PafuOfDuck:20180205223904p:plain

試用版や無料版とかありますがそこら辺の説明は他のサイトに丸投げ...お任せします。

基本機能を使ってみる

目次

  • Githubアカウントの登録
  • リポジトリを登録
  • ファイルの変更点を確認
  • add
  • commit
  • push

Githubアカウントの登録

ここで解説するのはGithubへの登録方法ではありません。笑
SourcetreeにGithubアカウントを登録する方法です。

Sourcetree > 環境設定 > アカウントという操作を行うと追加ボタンが表示されているはずなので、それをクリックします。するとウィンドウが表示されるので以下のように設定して下さい。(ユーザー名はGithubのアカウント名、パスワードはGithubのパスワードを入力して下さい。)

f:id:PafuOfDuck:20180207031527p:plain

するとアカウントの登録が完了するはずです。
キーチェーンの確認が出た場合は許可常に許可してあげましょう。

リポジトリの登録

  1. GithubClone or downloadからURLをコピーしておく
    f:id:PafuOfDuck:20180207015737p:plain

  2. Sourcetreeのファイル > 新規を選択
    f:id:PafuOfDuck:20180207015800p:plain

  3. 開かれるウィンドウの新規 > URLからクローンを選択
    f:id:PafuOfDuck:20180207020019p:plain

  4. ソースURLにコピーしたURLを入力&保存先パスと名前を入力
    f:id:PafuOfDuck:20180207020237p:plain
    この時、適当なフォルダを指定していないとフォルダの中身を空に〜といったエラー文が表示されることがあります。指示通り中身を削除するか、新しくフォルダを作成することで回避しましょう。(オススメは圧倒的に後者です。)

    また、名前はSourcetree内での管理名だと思います。(もしかすると他でも使われているのかもしれません。フォルダ名と同じにしていれば特に問題ないと思います。)

ファイルの変更点を確認

ファイルの変更点の確認方法は超簡単です!
まず、サイドバーにあるファイルステータスを選択します。

f:id:PafuOfDuck:20180207022858p:plain

すると下の画像のように変更点が右のウィンドウに表示されます。

f:id:PafuOfDuck:20180207022905p:plain

add

まずはaddの方法からです。

サイドバーにあるファイルステータスを選択します。その後、以下の操作を行うことでaddされます。

addされたかを視覚的に確認したい方は、以下の画像の赤枠をクリック > ステージビューを分割するを選択すると良いです。

f:id:PafuOfDuck:20180207023552p:plain

commit

addが完了したら次はcommitです。

サイドバーにあるファイルステータスを選択します。その後、下部に画像のようなウィンドウがあるのでコミットメッセージを入力後にコミットボタンを押すだけです。
もし、そのようなウィンドウが無ければ上部のコミットボタンを押して下さい。

f:id:PafuOfDuck:20180207024608p:plain

これでcommitが完了します。

push

最後にpushを行ってリモートリポジトリに反映させましょう。

上部にブッシュボタンがあるのでクリックします。すると、以下のようなウィンドウが開くので、pushしたいブランチを選択してOKを押しましょう。(今回は新規にブランチを作ってないのでmasterのみになっています。)

f:id:PafuOfDuck:20180207032208p:plain

push中にエラーが出なければpush完了です。なお、pushが終了しない場合は詳細情報を表示してみて下さい。エラーが発生している場合があります。

"Error generating password due to missing uuid. Please report this to Atlassian."というエラーが表示されている場合

アカウント設定を行なっていないか、アカウントを複数設定していて違うアカウントを指定している可能性があります。アカウント設定を見直して下さい。

最後に

現在、紹介しているのはほんの一部の機能(のはず)です。なので、私が触れた機能を随時更新して"使い方辞典"っぽくしていく予定です。

「この機能の使い方追加して。」や「誤字あるよ。情報古いよ。」などのコメント歓迎しております〜。