ぐうたら備忘録

趣味で作ったものなどをぼちぼち書いていきます。

VirtualBoxにUbuntu16.04.3をインストールしてRailsの環境+αを作ったときのメモ

OSインストール後のセットアップメモ

完全に自分用なので保証できません

// 必要なもの
sudo apt-get install -y git libssl-dev ruby-dev libreadline-dev sqlite3 libsqlite3-dev nodejs
sudo apt-get update

// rbenvのインストール
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc

// rbenvがインストールできているか確認
rbenv -v

// Rubyのバージョンの指定
rbenv install --list
rbenv install 0.0.0
rbenv global 0.0.0

// Rubyのバージョン確認
ruby -v

// Railsのインストール
gem install bundler
gem install rails

// VScodeのインストール
// 公式サイトからダウンロード
sudo dpkg -i ファイル名.deb

// 共有フォルダ
// デバイス→Guest Additions CD実行後
// 共有フォルダへのアクセス権追加
sudo gpasswd --add ユーザ名 vboxsf
// 再起動

// Google Chromeのインストール
// 公式サイトからダウンロード
sudo apt-get install libappindicator1
sudo dpkg -i ファイル名.deb

とりあえずおわり。

モンハンの装備シミュレーターを作り始めた。

いきなりどうした

PS4でモンハンの新作が来るってことは?

間違いなく買う。

だったら装備の組み合わせ考えるじゃん。
これ、モンハンの一番面白くて一番時間使うところ。

なら装備シミュレーター作っちゃえよというわけよ。

進捗

とりあえず読み込みから表示まで。
あとは装飾品とか発動するスキルの判定とかを足していく予定。
f:id:gootalife:20170822180929p:plain
VisualStudioが有能すぎてGUI周りがサクサク進む~。

2017/12/12 追記
モンハンのスキル仕様変更につき結構前から開発停止

ラズベリーパイを購入~

ラズベリーパイを購入

amazonで一式購入。(誕生日プレゼントに買ってもらったw)
お手軽な値段もしっかりしたミニミニPCですごいなーって思った。
キーボードやマウスは余ってたもので代用。

開封前の写真撮り忘れた。
f:id:gootalife:20170815153004j:plain

セットアップ

↓参考にさせていただいたサイト様。
liginc.co.jp
SDカードが64GBだったので
FAT32でのフォーマットに手こずった。色々なソフトを試した。
最終的にできたのが↓
I-O DATA ハードディスクフォーマッタ | サポートライブラリ | IODATA アイ・オー・データ機器 | IODATA アイ・オー・データ機器
ここからソフトをダウンロードして使った。

やってみたいこと

VPNサーバーを立てたり、ファイルを触れるようにしたいな~とか。

C#で簡単な計算機を作ってみた

C#GUIを触ってみた

VisualStudioを使うと見た目の部分は簡単に作れた。
(部品をD&Dするだけ、ほんとに楽だった。)
プロパティで値を変えるとそれに対応するところを書き足したり、
書き換えてくれているようだ。ボタンを押したときに
文字列の結合や計算処理をする関数を作った。

f:id:gootalife:20170722173654p:plain

動いてるところ

f:id:gootalife:20170722173657g:plain
0で割ると∞になりやす。

おわりに

VisualStudioを使うとC#はすごくサクサク書けて
気持ちがいいね~。

Unityで別のシーンを読み込む

読み込みたいシーンを用意する

左上のFileから新しいシーンを作って保存。
今回はわかりやすいようにUIを適当に配置して

f:id:gootalife:20170628211333p:plainf:id:gootalife:20170628211334p:plain

としてみた。

シーンを読み込むためのスクリプト

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

public class SceneLoad : MonoBehaviour {

    void Update () {
	if (Input.GetKeyDown (KeyCode.Space)) {
		SceneManager.LoadScene("test2");
	}
    }

}

スペースキーを押したとき、"test2"という名前のシーンを読み込む仕組みだ。

シーンを読み込む

作成したスクリプトをSceneLoadと名付けた空のオブジェクトにアタッチしていく。
(これは移動前のシーンに作成する。)

f:id:gootalife:20170628210826p:plain

できたらゲームを再生してみる。
スペースキーを押すと画面が切り替わるのがわかるはず。

最後に

これで別シーンの読み込みができるようになった。
タイトルとか曲選択とかプレイモードの切り替えに使っていくぞ~。

Unityでcsvファイルの読み込みをする

csvファイルを読み込むクラス

csvファイルはコンマで要素を区切ったファイルだから、コンマ区切りで
2次元配列に要素を格納していく。
そこでCSVReader君をお呼びした。
私の制作中の音ゲースクリプトの一部をチラ見せ。

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

public class CSVReader : MonoBehaviour {

	public List<string[]> csvDatas = new List<string[]>();

	public void CsvRead (string musicName) {
		// csvをロード
		TextAsset csv = Resources.Load (musicName) as TextAsset;
		StringReader reader = new StringReader (csv.text);
		while (reader.Peek () > -1) {
			// ','ごとに区切って配列へ格納
			string line = reader.ReadLine ();
			csvDatas.Add (line.Split (','));
		}
        }
}

CsvRead関数に曲名を引数として持たせ、曲名のファイルを読み込ませている。
読み込む場所はResources/下だけど、

TextAsset csv = Resources.Load ("abc/" + musicName) as TextAsset;

とするとResources/abc/下で曲名のファイルを探してくれる。

読み込んでみる

ここで、さらにゲームの流れを管理しているGameManagerさんを用意する。

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

public class GameManager : MonoBehaviour {

	public string musicName; // 曲名
	private CSVReader musicData = new CSVReader (); // 譜面データ

	void Start() {
		musicData.CsvRead(musicName);
	}
}

これをGameManegerと名付けたオブジェクトにアタッチしよう。
今回用意したテスト用のtest.csvはこんな感じ。

1,2,3,4
5,6,7,8
9,10,11,12
13,14,15,16

忘れずInspector上から曲名を仮入力して、シーンを再生すると~。f:id:gootalife:20170627124310p:plain

_人人人人人人人人人_
> 何も起こらない <
 ̄Y^Y^Y^Y^Y^Y^Y^Y ̄

そりゃそうだよ読み込んでるだけだからね。

読み込めてるか確認しよう

Debug.Logさんの出番だよ~

っということでDebug.Logで読み込めてるか確かめてみよう。

void Start() {
  musicData.CsvRead(musicName);
  for (int i = 0; i < musicData.csvDatas.Count; i++) {
	for (int j = 0; j < musicData.csvDatas[i].Length; j++) {
	  Debug.Log("csvDatas[" + i + "][" + j + "] = " + musicData.csvDatas[i][j]);
	}
  }
}

適当にforを回してみる。
f:id:gootalife:20170627124315p:plain
読み込めてるぞ~。

最後に

これでcsvファイルを2次元配列に格納する仕組みができた。
これを応用して音ゲーの譜面情報として使っていく。

次はシーンの読み込みについて書こうかな?

Unityでオブジェクトの移動をする

オブジェクトの移動

フレーム単位での移動

Unityで一番最初に書く人も多いであろうオブジェクトの移動スクリプト
x方向に動かしたい場合について考えていこうと思う。
書くとしたらこんな感じだろうか?

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

public class Move : MonoBehaviour {

  // 変化量
  public float dx;

    void Update() {
        // dxは任意の値
        this.transform.position += new Vector3(dx, 0, 0);
    }

}

これで毎フレーム(dx, 0, 0)の値だけ座標が加算されていく。
this.transform.positionはこのスクリプトが貼り付いてるオブジェクトの
座標(x, y, z)のこと。そこに変化量を加えていく感じ。

Update関数はフレーム毎更新だからFPS(1秒毎の画面の更新回数)の値次第で移動速度が変わって見えてしまう!
つまり処理が遅いと遅く移動しているように見える。処理が早いときはその逆。
できれば等速直線運動してほしいよね~?って人は次の項目へ。

時間単位での移動

等速直線運動の式は距離x、速さv、時間tとするとき
x = v * t
が成り立ってるのは既知だと思われる。
のしたのげおや、って覚えたよね?)

これをスクリプトにしたいとき、
x = オブジェクトの位置
v = 任意の速度
t = 経過時間
を設定してあげればいいな~ってことで

書こう。

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

public class Move : MonoBehaviour {
  
  // 変化量
  public float dx;

    void Update() {
        // dxは任意の値
        this.transform.position += new Vector3(dx * Time.deltaTime, 0, 0);
    }

}

Time.deltaTimeは1フレーム前からの経過時間を表してくれているから
変化量 * 時間の形にすることができた。
これで時間単位で移動してくれるようになる。

変化量dxの変更

変化量dxはpublicな変数だから、Inspector上からも数値を代入できる。
Moveスクリプトに表示されているdxに任意の値を入力したらそれが変化量になる。
f:id:gootalife:20170625183015p:plain

動かしてみる

動かしたいオブジェクトに作ったMoveスクリプトD&Dしてdxを入力したら再生してみる。
f:id:gootalife:20170625183448g:plain
ちゃんとx方向に動いてるぞ~。

最後に

今回は基本的な部分に触れたけど、これを組み合わせれば
音ゲーのノーツが移動する動きを表現できるし使うことは多々ありそう。

次はファイルの読み込みについて書こうかな~?