rn.log

備忘録など

【Unityアセットストア】ToDo管理アセット「Todo」の紹介

ToDo管理アセット「Todo」の紹介記事です

assetstore.unity.com

このアセットについて

タスクにチェックを入れたり、タスクのカテゴリー分けができるタスク管理ツールです。

f:id:r-ngtm:20180810183511p:plain

見た目がシンプルなので分かりやすいです。

Todoを使ってみる

Todo - Asset Storeをダウンロードし、Unityプロジェクトへインポートします。
メニューの「Window/Todo List」を選択して、Todoウィンドウを開きます。

f:id:r-ngtm:20180810183306p:plain

チェックを入れてみる

ウィンドウ左にあるボックスをクリックするとチェックマークを入れることができます。

f:id:r-ngtm:20180810183801p:plain

タスクが完了したときはチェックマークを入れる、という使い方をするようです。

チェックを入れると文字がグレーアウトします。

f:id:r-ngtm:20180810183858p:plain

右側の×ボタンを押すとタスクを削除。 完了したタスクで不要になったものは削除するという使い方をするようです。 f:id:r-ngtm:20180810184102p:plain

タスクの追加

ウィンドウの下側からタスクの追加ができます。
f:id:r-ngtm:20180810184712p:plain

タスクのカテゴリーを変更する

タスクの右側にあるドロップダウンを利用することで、カテゴリーを変更できます。
f:id:r-ngtm:20180810184458p:plain

【Unityアセットストア】ToDo表示アセット「ToDo Manager」の紹介

Todo管理アセット「ToDo Manager」の紹介記事です

assetstore.unity.com

TodoManagerについて

C#スクリプトに書かれているToDo コメントをウィンドウ上で確認できます。
f:id:r-ngtm:20180810175928p:plain

ToDo ウィンドウを開いてみる

ToDo Manager - Asset Store をダウンロードし、Unityへインポート。

メニューの「Tools/Todo」を選択してウィンドウを開きます。
f:id:r-ngtm:20180810180338p:plain

以下のようなToDoウィンドウが出現します。
f:id:r-ngtm:20180810180645p:plain

ToDo コメント付きのスクリプトを作成してみる

以下のスクリプトを作成してみます。 スクリプトの名前はNewBehaviourScriptとします。

using UnityEngine;

// TODO 名前を変える
public class NewBehaviourScript : MonoBehaviour {

    // TODO 機能Aを実装する
    void Start ()
    {
    }
    
    // TODO 機能Bを実装する
    void Update ()
    {
        // BUG zeroが0にならない
        int zero = 1;
    }
}

TODOを確認してみる

ウィンドウ上にToDoコメントが表示されます。
f:id:r-ngtm:20180810180014p:plain

画面右側に出ているToDoをダブルクリックすると、コードエディタが開いてコメント位置までジャンプしてくれるようです。
f:id:r-ngtm:20180810181037p:plain

便利です。

【Python】pipのget_supported()を実行する

pipの対応cpを確認しようとget_supported()を実行させようとたところ、いろいろと詰まったので備忘録もかねてメモ。

環境

Windows 10
Python 3.5.2
pip 10.0.1

pipのget_supported()の実行

Python上で以下を実行します。

>>> from pip._internal.pep425tags import get_supported
>>> get_supported()
[('cp35', 'cp35m', 'win_amd64'), ('cp35', 'none', 'win_amd64'), ('py3', 'none', 'win_amd64'), ('cp35', 'none', 'any'), ('cp3', 'none', 'any'), ('py35', 'none', 'any'), ('py3', 'none', 'any'), ('py34', 'none', 'any'), ('py33', 'none', 'any'), ('py32', 'none', 'any'), ('py31', 'none', 'any'), ('py30', 'none', 'any')]


get_supported()の実装を見る

pip --version を実行したときに表示されるメッセージを見るとpipがどこにあるかが分かります


例えば、以下のような表示の場合

pip 10.0.1 from c:\users\(ユーザー名○○)\appdata\local\programs\python\python35\lib\site-packages\pip (python 3.5)


pipの置き場所は以下になります。

c:\users\(ユーザー名○○)\appdata\local\programs\python\python35\lib\site-packages\pip


pip10.0.1の場合、_internalフォルダの中のpep425tags.pyファイルの221行目でget_supported()が定義されています。
f:id:r-ngtm:20180625121000p:plain

【VR】UnityのPrefabをSTYLYへアップロードしてみた

はじめに

Unityエディタ上でPrefabをSTYLYへアップロードする、というのをやってみました。

今回の記事では、Unityのインストール手順やUnityエディタからSTYLYへPrefabをアップロードするまでの手順を簡単にご紹介したいと思います。

STYLYについて

Webブラウザ上でVR空間を簡単に作れるWebサービスです。

VR対応していないPCでもVR空間を作ることができます。

wired.jp

styly.cc

手順1: Unityエディタの準備

UnityHubのDL

UnityエディタのインストールにはUnityHubがおすすめです。
unity3d.com

f:id:r-ngtm:20180531114250p:plain:w450

Unity2017.4をインストール

UnityHub上でUnity2017.4系をインストールします。

f:id:r-ngtm:20180531154536p:plain

STYLYへPrefabをアップロードするためには以下の5種類のプラットフォームをインストールしておく必要があります。
WebGL
iOS
Android
MacOSX
Windowsプレイヤー

必要なものすべてにチェックを入れてインストールしましょう。
f:id:r-ngtm:20180531121441p:plain:w300

プラットフォームが足りていない場合

「Unity2017.4はすでにインストールしてるけど、プラットフォームが足りていなかった」という場合は
UnityHub上でAddComponentを選ぶことでプラットフォームを追加でインストールできます

f:id:r-ngtm:20180531125515p:plain:w400

f:id:r-ngtm:20180531130108p:plain:w400

手順2: Unityプロジェクトの作成

UnityHubからプロジェクトを作成します。 Unity2017.4系を指定しておきます。

f:id:r-ngtm:20180531122320p:plain:w300


手順3: STYLYのUnity用プラグインの導入

STYLY公式サイトからUnity用プラグインをDLします。
styly.cc

ダウンロードしたSTYLY.unitypackageをダブルクリックして、UnityプロジェクトへSTYLYプラグインをインポートします。
f:id:r-ngtm:20180531155214p:plain

f:id:r-ngtm:20180531123812p:plain:w300

インポートが終わるとウィンドウが表示されます。

ウィンドウにメールアドレスとSTYLYのAPI Keyを入力すれば STYLYプラグインのセットアップは完了になります。

f:id:r-ngtm:20180531131655p:plain:w350

No ○○ module installed

Unityエディタにインストールされているプラットフォームが足りていない場合、
No ○○ module installed」という警告が表示されます。

f:id:r-ngtm:20180531124949p:plain:w300

UnityHub上のAdd Componentでプラットフォームを追加インストールしましょう

f:id:r-ngtm:20180531125515p:plain:w400

手順4: PrefabをSTYLYへアップロードする

今回は、以下のPrefab(Sphere.prefab)をアップロードしてみます。
f:id:r-ngtm:20180531160712p:plain:w350

アップロードしたいPrefabを右クリックし、「Upload prefab to STYLY」を選ぶとアップロードを開始します。
f:id:r-ngtm:20180531132440p:plain:w350

アップロードが完了すると以下のようなウィンドウが表示されます。
f:id:r-ngtm:20180531132910p:plain:w350

手順5: アップロードしたPrefabを確認してみる

STYLYを開き、Assets → 3DModel -> My Models を開くとアップロードしたPrefabを確認できます。

f:id:r-ngtm:20180531133602p:plain:w400

モデルの配置もできます。
f:id:r-ngtm:20180531134147p:plain:w300

OculusGoの空き容量をコマンドラインで確認する

OculusGoをWindowsのPCに接続した状態で、以下のコマンドを実行するとOculusGoのストレージの残量を確認できます。

adb shell df -h


Oculus Goの64GBモデルで試したところ、以下のような表示になりました。

f:id:r-ngtm:20180513133103p:plain

参考URL

ADBコマンド導入の方法 - Qiita

【Oculus Go開発】Oculus Goが操作不能になった時の最終手段 : コマンドラインでOculusGoを再起動する

激重なシーンを動かしてたらOculusGoが固まった

Unityで作った激重なシーンをOculusGoで動かしたらOculusGoが操作不能になってしまいました。 電源ボタン長押しでもダメ(半ばフリーズ状態)

最終手段 : コマンドラインで再起動

そんなときの最終手段、コマンドラインで再起動

以下のコマンドを実行するとOculus Goを再起動できます

adb reboot


コマンドの詳細を確認したい場合は以下を実行

adb --help

参考URL

ADBコマンド導入の方法 - Qiita

【プログラミング】bool変数の代入について考察

今回の記事はプログラミングについての話題になります。

言語はC#あたりを想定しています。

2つのコード

まずは以下の2つのコードを見てください。

// コードA
b = a; // bool値を直接代入している
// コードB
if (a) 
{ 
   b = true; // bool値の書き換え
} 
else 
{
   b = false; // bool値の書き換え
}


どちらのコードも、やっていることは

a が true なら b をtrue にする
a が false なら b もfalseにする

非常にシンプルなコードです。

使い分け

個人的な好みになりますが、

変数をコピーするだけ」という意図を強調したい場合はコードA
条件にひもづいた処理を追加する可能性が高い」ことを強調したい場合はコードB

という使い分けを意識しています。

良いコードはどちらか

さて、このコードAとコードBですが、実際のところどちらが良い書き方なのか、少し気になりました。

そこで、これら2つのメリット・デメリットを自分なりに列挙してみました。

コードA

b = a; // bool値を直接代入している

コードAのメリット : 低コスト

コードが1行と短いので、書くのに手間がかからない。

つまり、実装工数が小さいというメリットがあります。

コードAのデメリット : 可読性が低い

b = aというコードを見た時、これがintの代入なのか、boolの代入なのか、あるいはオブジェクトの代入なのか。

コードAから読み取れる情報だけでは変数型の判別が難しいです。
コメントが書かれていなければ変数型が判別不能

is○○ のように変数名を工夫すれば回避できそうなデメリットでもあります。


コードB

if (a) { 
   b = true; // bool値の書き換え
} else {
   b = false; // bool値の書き換え
}

コードBのメリット : 関心分離

・条件に関連する処理を追加しやすい ( = 追加実装のコストを減らせる)
a == trueの時にDebug.Logを追加したい、となった場合は一行追加するだけです。

if (a) { 
   b = true; // bool値の書き換え
   Debug.Log("a == trueです");
} else {
   b = false; // bool値の書き換え
}


・a という変数がbool型であるということがこのコードから読み取れる(=コードの可読性が高い)


「条件判定」と「値の書き換え」という2つの関心を分離しているというメリットがあるとも言えそうです。

コードBのデメリット : コード量が増える

・書くのに手間がかかる (=実装コストが増える)
・コードAよりもソースコード行数が多い

結局、どちらの書き方が良いんだろう?

コードAとコードBの両方にメリット・デメリットがあることが分かってきましたが、
結局のところ、どちらの書き方が良いのか分からなくなってきました。

悪いほうが良い(worse is better)

「悪いほうが良い」という言葉があります。

悪いほうが良い(worse is better) (http://www.kt.rim.or.jp/~hisashim/gabriel/WorseIsBetter.ja.html)

「最小限のものをまず作り、そして必要に応じて育てるほうがよい」とする考え方。

2つのコードにこの言葉を当てはめる

「悪いほうが良い」という視点で先ほどのコードAとコードBを見てみます。

コードA
「bool変数を代入する」という処理だけを行っている。
つまり、コードAは最低限の機能だけを持つ

コードB
「条件判定を行い、その後にbool変数を変更する」という複数の処理を行っている。
つまり、コードBは機能が多すぎる

コードBは悪?

最小限のものをまず作る」という視点から見た場合は

コードAは機能が最小限なのでGOOD
コードBは機能が多いのでBAD

まとめ

迷ったらコストが少ない選択肢をとるのが吉