はこねのはこ

はこねさんの備忘録

Oculus GO向けアプリをUnityでビルドする際の環境メモ

はじめに

Oculus GO向けアプリをUnityでビルドできるようになりました。

その時の設定環境をメモしておこうと思います。

何か作ろうと思ったときに、振り返れるようになればいいなと。

環境

  • Windows10
  • Unity 2018.1.0f2

設定

Build Setting

f:id:hakonebox:20180527163504p:plain

PlayerSettings

Other Setting->Identification

f:id:hakonebox:20180527163650p:plain

XR Setting

f:id:hakonebox:20180527163800p:plain

おわりに

あとはAndroid SDKのパスくらいしか変更していません。

環境構築に苦労したのはAndroidSDKのダウンロードでした。

未来の私頑張ってください。

UnityでCVSファイルの読み出して2次元配列に格納しました。

はじめに

かくかくしかじかで、Unityでクイズゲーム作りたいと思いました。

しかし、問題を編集するのはUnityを使わない人なので、 スクリプトに埋め込むわけにはいきませんでした。

また、追加や編集が気軽にできるように、 外部ファイルに記載して、それを読み込む形をとります。

そんな感じでCSVファイルを読み込みます。

その時のメモです。

環境

  • Windows10
  • Unity 2018.1.0f2

やりたいこと

CSVファイルを作成し、それをUnityで読み込み、consoleに表示する。

結論

できました。 f:id:hakonebox:20180517005127p:plain

実際に使用したファイル

script

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

public class GameMaster : MonoBehaviour {

    public  string dataName;    // 問題テーマ
    private string title;       // タイトル
    private TextAsset csvFile;  // CSVファイル
    private List<string[]> csvDatas = new List<string[]>(); // CSVの中身を入れるリスト
    private int height = 0; // CSVの行数
    private int i,j=0;//debugループカウンタ
    const int size= 7;

    void Start()
    {
        title = "theme_"; // 頭文字
        csvFile = Resources.Load("CSV/" + title + dataName) as TextAsset; /* Resouces/CSV下のCSV読み込み */
        StringReader reader = new StringReader(csvFile.text);

        while (reader.Peek() > -1)
        {
            string line = reader.ReadLine();
            csvDatas.Add(line.Split(',')); // リストに入れる
            Debug.Log("reading:" + height);
            height++; // 行数加算
        }
        for (i = 0; i < height; i++)
        {
            for (j = 0;  j < size; j++) {
                Debug.Log("csvDatas["+ i +"]["+ j +"]:" + csvDatas[i][j]);
            }
        }
    }
}

csvファイル

1,マイコンの問題その1,選択肢1,選択肢2,選択肢3,選択肢4,答え5
2,マイコンの問題その2,選択肢A,選択肢B,選択肢C,選択肢D,答えE

表示の仕方

f:id:hakonebox:20180517004745p:plain

  1. 作成したスクリプトをGameObjectにアタッチ
  2. Data Nameに問題テーマを記述
  3. csvファイルの名前をtheme_[問題テーマ]にする
  4. Assetsフォルダに、Resources->CSVフォルダを作成
  5. CSVフォルダに読み出すcsvファイルを入れる

将来の自分へ

csvファイルに日本語を使用する場合には文字コードに気を付けること。

UnityのCreate->C# Scriptで作成されるスクリプト文字コードutf-8のようです。

csvファイルもutf-8にしておかないと、エラーが出てしまいます。

おわりに

書き込みは調べてないのでできません。 必要になったら調べる方向で。

とりあえず外部ファイルが読めるようになったので、 使える知識が一つ増えてよかったです。

あと、今回はあくまでエディタ上の読み込みなので、 ビルドしてスタンドアロン状態ではまだ未検証。

参考にさせていただきました

qiita.com

ProBuilderでプリン作ってみる

はじめに

こっちからの続きです。

hakonebox.hatenablog.com

どうしてプリン作るの?

プリンはすごく簡単にできそうだし、私甘いもの好きですし。

ProBuilderを"知っている"状態から"少しでも使える"状態にするには、 兎にも角にも自分で何か作ってみようって話。

ワークショップで簡単に使えるようにはなったと思うけど、 時間が経って色々忘れてると思うから、 思い出さないといけないし..うん。

イメージはこんな感じ。 f:id:hakonebox:20180503093023j:plain

すごい形シンプルすぎて練習になるのかが不安なレベル。

わぁい、ぷりん。 はこね、ぷりんだぁいすき。

目次

環境

  • MacBookPro 10.13.4
  • Unity 2018.1.0f2

Unity 2018.1.リリース!!

2018/5/2にリリースされました。

ProBuilderがUnityに統合されるのはUnity 2018からみたいですね。

今までは2018βを使っていましたが、 これから乗り換えようと思います。

f:id:hakonebox:20180503095341p:plain

ProBuilderをはじめる

まずは環境構築します。

  1. 新規プロジェクトの作成 f:id:hakonebox:20180503102125p:plain

  2. ProBuilderのインストール f:id:hakonebox:20180503102559p:plain "Window"→"Package Manager"→"All"→"ProBuilder"→"install"

  3. Polybrush,ProGridのインストール 合わせて、PolybrushもProGridをインストールしておきます。 こちらはAssetStoreからのインストールになります。 f:id:hakonebox:20180503104008p:plain

  4. ProBuilder,ProGrids Windowを開く f:id:hakonebox:20180503104517p:plain "Tools"→"ProBuilder"→"ProBuilder Window"
    ウィンドウの左側にいれておきましょう。
    こちらがメインのツールバーになります。

プリン作ろう

ベースの作成

"New Shape"からcylinderを作成し、名前をpuddingとしておきます。 f:id:hakonebox:20180503111957p:plain

形を作る

プリン横のEdgeを選択します。 見にくいですが、選択したEdgeが黄色くなっています。 f:id:hakonebox:20180503115109p:plain ※わかりやすく線を引いています。

Insert Edge Loopでループカットします。

f:id:hakonebox:20180503115326p:plain ループカットする位置を選択します。 f:id:hakonebox:20180503115502p:plain

ちなみにtoolbarはこんな感じ Unity Blogのスライドから持ってきました。 f:id:hakonebox:20180503113847p:plain

下の面を選択して、拡大縮小ツールにより好きなプリンの形になるように広げます。
f:id:hakonebox:20180503115801p:plain
もう(心のプリンフィルターをかければ)プリンに見える...!!

ちょっと頭が気になるので角を丸くします。 下の辺1つを選択肢、Select Edge Loopでぐるっと選択し、Bevelを選択します。

f:id:hakonebox:20180503120413p:plain f:id:hakonebox:20180503120507p:plain

いろいろと目をつむりますが、 それっぽい形になりました。

プリン色に染める

マテリアルの設定

現在のプリンには、大きさや形がわかるようにマークが入っているので、

真っ白なベースマテリアルの作成します。 f:id:hakonebox:20180503124150p:plain

Material Editorから白マテリアルを割り当てます。 f:id:hakonebox:20180503124459p:plain 豆乳プリンができました。

色を染める

Vertex Colorsの横の[+]からPaletteを選択 f:id:hakonebox:20180503124705p:plain

マテリアルのシェーダを変更 f:id:hakonebox:20180503125337p:plain ※ここがstandardのままだとうまく染まってくれませんでした。

全体を選択した状態で Vertex Colorsから黄色を選択すれば、 全体が黄色に染まります。 f:id:hakonebox:20180503125545p:plain

デフォルトの色を使用していますが、

美味しそうなプリンを作るには色の調整を行いましょう。 f:id:hakonebox:20180503125753p:plain

次にカラメルの色ぬり。

カラメルに染めたいとこだけ選択して同じように Vertex Colorsで染めます。f:id:hakonebox:20180503130245p:plain

できました

ProBuilder製のプリン完成しました。

f:id:hakonebox:20180503132825p:plain

さいごに

ほとんど機能使ってない...

簡単にやりすぎた。

プリン簡単な形すぎてこれだけでできちゃった。

でもいいじゃない。手を出してみるのが大切なんだから。

このあと、これ以外のステージ素材をProBuilderでつくるぞ!!!

補足

これ以外にもいろんなことできるけど、 公式のチュートリアル動画みれば大抵なんとかなると思います。

blogs.unity3d.com

ProBuilderゲームジャムに投稿したいのです

はじめに

先日、レベルデザインについての話が聞きたくて、 "TrainingDay ProBuilderで学ぶレベルデザイン"のワークショップに参加しました。

そして本日、2018/5/2にこんな話が...

なるほど早速実践しきゃ....!!!

というわけで投稿目指してゲーム作ります。

unityroomでの案内はこちら

イベント「ProBuilderゲームジャム」 | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう f:id:hakonebox:20180502233707p:plain

目次

"ProBuilderゲームジャム"とは

Unity×unityroomで開催されるゲームジャムです。

5/7から開催されるUnite Tokyo 2018に先立ち、オンラインゲームジャムを開催! 応募対象となるゲームはProBuilderを使ったアセットをゲームの一部に組み込んでいることのみ!

ということで、unity1weekのようなテーマをもうけられているわけでなく、 Probuilderを使えばいいそうです。

ステージでも小物でもどんなでも構わないみたいなので、 気軽に導入できそうです。

また、Uniteではマウス、キーボード、Xbox ONEコントローラが使えるそうです。 XboxONEコントローラは嬉しいですね。

詳しくはこちら

blogs.unity3d.com

ProBuilderについて

そもそもProBuilderってなに?

使ったことない人はこんな感じだと思います。 私もワークショップ行くまではこんな感じでした。

概要としてはこんな感じ

とりあえず、Unity上でモデリングできちゃうし、遊びながらフィールドマップとか変えて見てレベルデザインもできるみたい!!(※私の解釈)

でも使い方がわからない?

Unityさんから参考資料がたくさん公開されています。 ※Unity Blogからみれます。

  1. モデリング入門動画 これをみればおおよそ使い方はわかると思います。 日本語での解説です。ProBuilder全く触ったことがなくでも、どんなことができるのかわかると思います。

  2. ワークショップのスライド ワークショップのスライドが公開されていました。 モデリング入門動画と同時に見たり、 動画を見た後にこのスライドを見ながら自分で作成してみるといいと思います。

  3. ProBuilderを用いたサンプルプロジェクト github.com ワークショップでのサンプルプロジェクトが公開されていました。 太っ腹じゃないですか...!!!

サンプルプロジェクト動かしてみました。 たしか発案者曰く、マ○オ64とダー○ソウルを組み合わせたイメージだったと思います。

私のすすめかたを考えてみる。

0からなにからゲームを開発するでも、 小物を一つProbuilderで作って見て配置してみるでもいいと思います。

しかし、開発できる時間は限られているので、自分にできるやり方で投稿を間に合わせたいと考えています。

できればスクリプトを書く時間を極力少なくして、ProBuilderを扱う時間に設けたいですよね。

サンプルプロジェクトをガンガン活かそうと思います。

試しに動かしてみるとわかりますが、 Xboxコントローラでキャラクターを動かすスクリプトが入っています。

移動とカメラの操作もできちゃいます。

f:id:hakonebox:20180502232755p:plain

このプロジェクトのキャラ操作スクリプトをお借りして、 Probuilderでステージを作成する方向にします。

こんな感じで動く床を作成して見たり。 f:id:hakonebox:20180502232843p:plain

これなら、3Dアクションゲームをなんとか期間内に間に合わせられるかも...。

おわりに

ProBuilderは思ったよりとっつきやすい印象でした。

あと私はUnite Tokyo 2018はお仕事で参加できません。

カナシイナー

Unityでゲームパッドからの入力したいからまとめてみる(XBox One Controller)

はじめに

...そんなわけで購入しました。

おそらくInput.GetButtonとかInput.GetAxisとかで入力できると思いますが、 入力方法を確かめておこうと思います。

今回の目標

ゲームパッドからUnityに入力できるようになる。

環境

macの場合はまた異なる設定が必要みたいです。 この記事ではWin10の場合のみです。

結果

できました。

Xbox One Controller (Windows10)

f:id:hakonebox:20180415100521p:plain

f:id:hakonebox:20180415124345p:plain

Positive Button XBox One 対応
joystick button 0 A A
joystick button 1 B B
joystick button 2 X X
joystick button 3 Y Y
joystick button 4 LB 2
joystick button 5 RB 7
joystick button 6 View 3
joystick button 7 Menu 6
joystick button 8 L Stick (押し込み) 1
X-Axis/Y-Axis L Stick (H/V) 1
joystick button 9 R Stick (押し込み) 10
4th-Axis/5th-Axis R Stick (H/V) 10
6th-Axis/7th-Axis D-PAd (H/V) 8
3rd-Axis Trigger(L/R) 11,14

絵はこちらから support.xbox.com

以下は動作確認の記録です。

Xbox Oneコントローラのキーの名前の確認

まずはマニュアルの確認。

任意のジョイスティックボタンは"joystick button 0"とかで指定できるみたい。 docs.unity3d.com

入力の確認をしてみる。

スティックやRTなど、Input.GetButtonで取得できなさそうなボタンを除くと 10個あったので、"joystick button 9"まで確認してみます。 HorizontalとVerticalも合わせて確認。

ボタン確認に使用したコード

using System.Collections.Generic;
using UnityEngine;

public class inputDemo : MonoBehaviour {
    
    // Update is called once per frame
    void Update () {
        if (Input.GetKeyDown ("joystick button 0")) {
            Debug.Log ("button0");
        }
        if (Input.GetKeyDown ("joystick button 1")) {
            Debug.Log ("button1");
        }
        if (Input.GetKeyDown ("joystick button 2")) {
            Debug.Log ("button2");
        }
        if (Input.GetKeyDown ("joystick button 3")) {
            Debug.Log ("button3");
        }
        if (Input.GetKeyDown ("joystick button 4")) {
            Debug.Log ("button4");
        }
        if (Input.GetKeyDown ("joystick button 5")) {
            Debug.Log ("button5");
        }
        if (Input.GetKeyDown ("joystick button 6")) {
            Debug.Log ("button6");
        }
        if (Input.GetKeyDown ("joystick button 7")) {
            Debug.Log ("button7");
        }
        if (Input.GetKeyDown ("joystick button 8")) {
            Debug.Log ("button8");
        }
        if (Input.GetKeyDown ("joystick button 9")) {
            Debug.Log ("button9");
        }
        float hori = Input.GetAxis ("Horizontal");
        float vert = Input.GetAxis ("Vertical");
        if(( hori != 0) ||  (vert != 0) ){
            Debug.Log ("stick:"+hori+","+vert );
        }
    }
}

ここまででできなかったこと。

StickとD-PadとLT,RTが見つからない!!!

f:id:hakonebox:20180415110922p:plain

マニュアルによると、プロパティ設定が必要みたいです。

Input Managerで入力設定

そんなわけでInput Managerを起動。

Edit→Project Settings→Input

f:id:hakonebox:20180415111229p:plain

デフォルトで18個設定されているようです。(Sizeの値)

先ほどR Stickの入力で使用したHorizontalはこんな設定になっていました。 ※TypeがKey or Mouse Buttonなので、こちらはJoystickのものではないです。

f:id:hakonebox:20180415111546p:plain

先ほどR Stickの入力で使用したHorizontalはこんな設定になっていました。

L Stick(H/V) , R Stick(H/V) , D-Pad十字(H/V) ,左右トリガ()を新たに設定するため、 7つ設定を追加します。

Sizeを26にして、Nameを変更します。

f:id:hakonebox:20180415114850p:plain

各種property

L Stick

f:id:hakonebox:20180415122425p:plain

R Stick

f:id:hakonebox:20180415122444p:plain

D-Pad

なぜかD-Padだけ上下が逆? よくわかんないけど環境によって異なるのかな。

f:id:hakonebox:20180415122620p:plain

Trigger

ちょっと特殊でした。 正の値と負の値でRとLが使われていました。 f:id:hakonebox:20180415122638p:plain

Stick,Dpad,Trigger確認に使用したコード

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

public class inputDemo : MonoBehaviour {
    
    // Update is called once per frame
    void Update () {
        //L Stick
        float lsh = Input.GetAxis ("L_Stick_H");
        float lsv = Input.GetAxis ("L_Stick_V");
        if(( lsh != 0) || (lsv != 0 )){
            Debug.Log ("L stick:"+lsh+","+lsv );
        }
        //R Stick
        float rsh = Input.GetAxis ("R_Stick_H");
        float rsv = Input.GetAxis ("R_Stick_V");
        if(( rsh != 0 ) || (rsv != 0 )){
            Debug.Log ("R stick:"+rsh+","+rsv );
        }
        //D-Pad
        float dph = Input.GetAxis ("D_Pad_H");
        float dpv = Input.GetAxis ("D_Pad_V");
        if(( dph != 0 ) || ( dpv != 0 )){
            Debug.Log ("D Pad:"+dph+","+dpv );
        }
        //Trigger
        float tri = Input.GetAxis ("L_R_Trigger");
        if( tri > 0 ){
            Debug.Log ("L trigger:"+tri );
        }else if( tri < 0 ){
            Debug.Log ("R trigger:"+tri );
        }else{
            Debug.Log ("  trigger:none" );
        }
    }
}

補足

マニュアルより、プロパティはこんな感じです。 stickやtriggerからの入力が0,1しかできないとかはここで調整します。

property 説明
Name 入力軸の名前。
Descriptive Name スタンドアロンビルドで 設定 ダイアログ の Input タブで表示される正の値の名前。
Descriptive Negative Name スタンドアロンビルドで 設定 ダイアログ の Input タブで表示される負の値の名前。
Negative Button 軸を負の方向に押すためのボタン。
Positive Button 軸を正の方向に押すためのボタン。
Alt Negative Button 軸を負の方向に押すための代わりのボタン。
Alt Positive Button 軸を正の方向に押すための代わりのボタン。
Gravity 何もボタンが押されてない場合に軸がニュートラルになるための秒速。
Dead 絶対値がこの数値未満の場合は 0 として処理されます。ジョイスティックに便利です。
Sensitivity 軸がターゲットの値に向かうための秒速。これはデジタルデバイスにのみ向いています。
Snap これを有効化すると、軸の値は、ボタンを反対方向に押したときに、0 にリセットされます。
Invert これを有効化すると、Negative Buttons は正の値に反転し、Positive Buttons は負の値に反転します。
Type 軸を制御する入力の種類。
Axis 軸を制御するために接続されたデバイスの軸。
Joy Num 軸を制御する接続されたジョイスティックの数。

おわりに

joystick button 0とかもInputManagerで名前を付けたほうが使いやすそうですね。

triggerの同時押しの場合はいまだにわかっていません。

同時に押したら値は0になる?

いろいろ検証してみないとですね。

箱コンかっこいい....

f:id:hakonebox:20180415125441j:plain

参考にさせていただいたサイト

nn-hokuson.hatenablog.com

littlewing.hatenablog.com

nezil.blog.fc2.com

Railsで作成したアプリをHerokuで公開するメモ(SourceTree使用)

はじめに

前回、ローカル環境でRailsの環境構築を確認しました。 今回は、Railsで作成したアプリをHerokuで公開する方法を確認します。

hakonebox.hatenablog.com

今回の目標

herokuにデプロイし、URLにアクセスして表示を確認する。

jp.heroku.com

前提

Herokuのアカウントは取得済み f:id:hakonebox:20180402010709p:plain

デプロイするRailsアプリの作成

ローカル環境でデプロイするRailsアプリを作成します。 自分で編集したviewがデプロイされていることがわかるように、 簡単にtopページを作成します

mkdir heroku_demo
cd heroku_demo
rails new heroku_demo_app

rails generate controller home top

topページを編集します。 heroku_demo_app/app/views/home/top.html.erbを開き、 下記のように編集しました。

<!-- template
<h1>Home#top</h1>
<p>Find me in app/views/home/top.html.erb</p>
-->
<h1>herokuにデプロイする方法を確認するよ!</h1>
<h2>ホームページに飛んでみるよ</h2>
<%= link_to("はこねのはこ","https://hakonebox.hatenablog.com/") %>

ローカルサーバを立ち上げ、topページの確認をします。

rails server

アクセスして見ましょう。 localhost:3000/home/top

表示が確認できました。 f:id:hakonebox:20180401205719p:plain

home/topをつけなくでもこのページが表示できるように、routesファイルの変更をします。

#Rails.application.routes.draw do
#  get 'home/top'
#end

Rails.application.routes.draw do
  get "/" => "home#top"
end

これでlocalhost:3000にアクセスした時に、 topページを表示できるようになりました。

herokuにアプリケーションを作成する。

NEWからアプリケーションの作成をします。 f:id:hakonebox:20180401213043p:plain f:id:hakonebox:20180401213415p:plain

Open appをクリックします。 f:id:hakonebox:20180401213539p:plain

アプリが作成できたようです。 f:id:hakonebox:20180401213705p:plain

Gemfile,databaseの編集

RailsはデフォルトでSQLiteを使用しているようですが、HerokuではPostgreSQLを使用するようです。

database.ymlの編集

production:
  url: <%= ENV['DATABASE_URL'] %>
#  <<: *default
#  database: db/production.sqlite3

Gemfileの編集

gem 'sqlite3' , group: [:development, :test]
gem 'pg' , group: :production

途中エラーが出てしまいました。

An error occurred while installing pg (1.0.0), and Bundler cannot
continue.
Make sure that `gem install pg -v '1.0.0'` succeeds before bundling.

Can't find the 'libpq-fe.h header

libpq-fe.hが見つからないようです。

brew install postgresql

すると checking for tclConfig.sh... no configure: error: file 'tclConfig.sh' is required for Tcl と出ました。

brew install tcl-tk

A formula for tcl-tk might have been added recently. Run brew update to get the latest Homebrew updates! と出ました。

brew updateを実行しましたが、

brew update
Error: /usr/local must be writable!

ぐぬぬ

こちらのサイトを参考にさせていただきました。

qiita.com

サイドbrew updateを実行して待つこと約30min.... やったか!?と思ったらまた次のエラー Error: update-report should not be called directly!

brew updateの前に、brew upgradeが必要みたいです。

brew upgrade
brew update

うまくいったようです。

再度

brew install tcl-tk
brew install postgresql
bundle install

いけました! ここまで長かった...。

rails serverで起動して、ローカルでの動作ができました。

しかしゴールではない.....。

SourceTreeの設定

SourceTreeを開きます。 新規から既存のローカルリポジトリを追加を選択 f:id:hakonebox:20180402003505p:plain

リモートを追加を選択 必須情報にリモートの名前とURL/パスを設定します。 URLはHerokuのSetting→Infoに記載されています。

デプロイする

f:id:hakonebox:20180402004246p:plain

そしてプッシュ f:id:hakonebox:20180402004424p:plain

 開いてみる。

HerokuからOpen appで開きます。 f:id:hakonebox:20180402004742p:plain f:id:hakonebox:20180402004937p:plain ひらけました。

やったああああああああああああああああ!!!!!!! やりました。

さいごに

Sourcetreeからならいらない操作あったんじゃないかな... あとmacbookの環境構築はいまだにわからないことが多いです。

なんとかデプロイまで進めたのでよかったです。

途中心くじけそうになって相談させていただきました。 naichiさんありがとうございます。 blog.naichilab.com f:id:hakonebox:20180402010709p:plain

A build only device cannot be used to run this targetのエラーが場合

はじめに

ほぼ一年ぶりにXcodeをビルドして、実機デバッグしようとしたら、 A build only device cannot be used to run this targetというエラーが出たので 対処方法をメモしておきます

f:id:hakonebox:20180329213841p:plain

環境

対処方法

  1. Simulatorを開く Xcode→Open Developer→Simulatorでシミュレータを起動します。 f:id:hakonebox:20180329214150p:plain iPhone XのSimulatorが立ち上がりました。 Xcodeのアップデートで設定が変わってしまったのでしょうか? f:id:hakonebox:20180329214335p:plain

  2. 使用する機種を選択する HardWare→Device→iOS x.x→iPhone SE f:id:hakonebox:20180329214719p:plain iPhone SEのSimulatorが立ち上がりました。 f:id:hakonebox:20180329215121p:plain しばらく見ない間にデザイン変わってますね。

実機でアプリをタップしてみる

信用されていないデベロッパと出てしまいました。

設定→一般→プロファイルとデバイス管理→デベロッパAPP ここから信用しましょう。

できました。

無事実機でデバッグできました。