主なコンテンツ

〜主なコンテンツ〜

1. Unityで製作したゲームと製作Tips
  1. 三月精チャレンジ(東方Project二次創作)
    1. 作り方
  2. 英語学習2D(オリジナルスマホアプリ)
2. UE4
3. ゲームアプリ見学
4. Bitbucket & SourceTreeでの一連の流れ
  1. 前半
  2. 後半
5. Tips
  1. UnityのTips
  5. SQL文のTips
  6. Final IK
  7. GearVR+Unity

2016年2月14日日曜日

Bitbucket & SourceTreeでの一連の流れ【後半】(参加者視点:masterブランチ作成後)

*二部構成にしました。チーム作成〜masterブランチ作成は前半です。

■チームに参加する

1. 管理者にアカウントのユーザー名かメールアドレスを伝える
  • このときユーザー名とは、ログイン後の画面にて「プロファイルの表示」をした際に左上に表示される名前のうち、カッコ内に記載された名前であることに注意!
  • 管理者がメンバーを追加する等のやり方は前半を参照ください


■SourceTreeにクローンする

1.  (ローカル)リポジトリを用意(自身のPC内に空フォルダを作る)

2. WEBのBitBucketにログインし、チームの共有(リモート)リポジトリ画面を開く

3. リポジトリ画面のアクションにある「クローン」から「SouceTreeにクローン」
  • 「概要」にあるクローンアイコンを押しても同様のポップアップが出る
  • 「概要」にあるURLをコピーしSourceTree上でクローンしても良い


4. 先ほど用意した空フォルダを指定して「クローン」

 Source Treeのローカルに追加される

*クローン時に何故かログインを求められる現象を確認。正しいユーザー名とパスワードを入力しても弾かれる。WEBでログアウト→ログインし直して上手くいった。同期がとれていないことがあるみたいなので、似たような現象に遭遇したら再ログインや再起動を試してみること。


■リモートリポジトリに変更を加える(ブランチを追加)

1. WEBのリモートリポジトリ画面にある「ブランチの作成」
  • ブランチ名をつけてCreate
  • /でフォルダのように階層構造を作れる
  • 命名規則はこちら
  • 管理者の承認が無くても作れる模様


2. これにより、WEBの「ブランチ」画面のフィルターを「マージ済み」に変更すると、先ほどのブランチが追加されていることが確認できる

 また、SourceTreeのリモートにもブランチが追加されていることが確認できる

3. SourceTreeのリモートから、ローカルに作成したいブランチをダブルクリック(今回は先ほど追加したブランチを選択)
  • ウィンドウがポップアップするので「OK」を選択
  • 「新規ブランチをチェックアウト」
  • 「ローカルブランチにリモートブランチを追従させる」

これにより、(ローカル)ブランチに先ほどのブランチが追加される
  • 太字が現在のローカルブランチ

4. ブランチに変更を加える(今回は分かりやすくReadme.txtを追加した)
5. 変更が生じると、SourceTreeにUncommitted changesが発生するので、これを選択

6. Uncommitted changesを選択すると、変更のあったファイルが「作業ツリーのファイル」に表示されるので、コミットしたいファイルにチェックを入れる

7. チェックしたファイルが「Indexにステージしたファイル」に追加されるので、この状態でコミット→プッシュする(今回は「コミットを直ちにプッシュする」にチェックを入れた)
  • これにより、WEBのコミット、ブランチにも反映される

8. WEBのリポジトリ画面から「プルリクエストを作成」
  • リクエスト元はコミットしたブランチを選択(コミット内容は下部に表示される)
  • リクエスト先は合流させたいブランチ(今回はmasterを選択)
  • メッセージを添えて「プルリクエストを作成」

9. 変更をマージする場合は、「プルリクエスト」から「マージ」を選択
  • 管理者権限のないメンバーでもmasterにマージできてしまう(詳細不明) masterへのプッシュを管理者に限定することで解決した(前半の「ブランチの管理」参照)

■ブランチの削除

1. リポジトリ画面のNAVIGATIONにある「ブランチ」から削除したいブランチを開き、右上の「…」を押して「ブランチの削除」を選択。

 *ブランチの一覧にある「…」からでは何故か削除できないので注意

2. SourceTree側のブランチを削除する。まずはフェッチアイコンを押し、「リモートで削除された追跡ブランチは取り除く」にチェックを入れてOKを押す。これによりSourceTreeのリモートからWEB上で削除されたブランチが消える。


3. 削除するローカルブランチを右クリック→「(ブランチ名)を削除」
  • 削除するローカルブランチが選択されている(太文字の)場合はメニューに削除が出てこないので注意
  • 削除するブランチしかローカルにない場合は、リモートからmasterブランチなどを持ってきて、そちらに切り替えておく必要がある
↓



■リモートブランチで起きた変更を自分のローカルブランチに反映させる(参考)

*ここでは、masterの変更をStageというローカルブランチに取り込むという例で説明する

1. masterのローカルブランチを「フェッチ→プル」で最新の状態にする

2. Stageをダブルクリックし、カレントブランチにする

3. masterを右クリックし、「masterを〜/Stageへマージ」を選択


4. 実行するか確認されるので、OKを選択

5. これにより、ローカルブランチ(Stage)での作業を維持したまま他のブランチ(master)の変更を取り込むことができる。ただし、競合する場合は修正する必要がある。


■指定フォルダをコミット対象外にする

1. SourceTreeの「リポジトリ設定-> 高度な設定のリポジトリ限定無視リスト」にて.gitignoreファイル(テキスト)を作成。(参考:.gitignoreの仕様詳解)

2. それをコミット&プッシュ(&マージ)すれば全体で共有する無視設定になる


3. ただし、既にGitツリーに登録されているファイルはgitignoreに記載しても無視されない。
  • これらのファイルは作業ツリーのウィンドウにて、右クリックで「追跡を停止する」必要がある。これにより、ローカルにファイルは残るがScourceTreeの追跡対象からは除外される(「git rm --cached」相当)
  • フォルダを選んで「追跡を停止する」ことはできない。Shiftキーなどの範囲選択を駆使してファイル単位で追跡を停止する必要がある。フォルダ内のファイルを全て追跡停止にすると、フォルダも作業ツリーに現れなくなる。
  • 追跡を停止したファイルはindexにステージしたファイルに移される。これをコミット&プッシュ(&マージ)することで、追跡停止をリポジトリに反映することができる。


〜参考先〜
〜登録済みのため無視できないファイルについての参考〜

■その他:チームIDが変わった場合

1. チームIDが変わるとリモートリポジトリのURLも変わるので、SrouceTree側のURLと対応が取れなくなりエラーが出るようになる

2. SourceTreeのローカルを開いたウィンドウの右上に設定があるのでこれをクリック

3. 問題のリモートリポジトリを選択して「編集」

4. 「URL/パス」を修正してOK
  • 前の画面に戻るので、そこでもOKを押すのを忘れないこと
  • この編集画面でホスティングサービスやユーザー名を確認できる

2016年2月12日金曜日

Bitbucket & SourceTreeでの一連の流れ【前半】(管理者視点:チーム作成〜masterブランチ作成)

*二部構成にしました。ブランチ作成〜マージは後半です。

■チームの作成について

1. 下図のチームから「チームの作成」

2. 必要な事項を埋めて「作成」

3. 先ほどの作成したチームが追加されている

4. チームで使用する(リモート)リポジトリの作成
  • 上部「リポジトリ」からでも、中央の「Create your First Repo」でも「Import a Repository from Github」からでも良い。

5. 必要事項を埋めて「リポジトリの作成」
  • オーナーにチームを指定する
    • 上部のリポジトリから来た場合は、最初に選ばれているオーナーはユーザー本人(個人)になっている
    • 「Create your First Repo」から来た場合は、最初に選ばれているオーナーはチームになっている
  • 非公開、Gitの指定を行う

6. リポジトリとプロジェクトの作成完了

*備考1:リポジトリの削除はリポジトリ画面のギアマーク(setting)から

 *備考2:管理者はホームの「チームの管理」が可能

 管理画面の「Delete Team」からチームの解体が可能

 解体しようとすると「アカウントの削除」という警告が出るが、削除されるのはチームのみ

 管理画面の「ユーザーグループ」からメンバーの追加や、管理者権限やメンバーの変更が可能

*なお、メンバーの追加に使われるユーザー名とは「プロファイルの表示」をした時に左上に表示されるカッコ内の名前であることに注意!

*ユーザー名の変更は、プロファイル表示画面にある「Bitbucket Setting」からアクセスできるユーザー管理画面の「ユーザー名の変更」から可能

↓


■SourceTreeにクローンする

1.  (ローカル)リポジトリを用意(自身のPC内に空フォルダを作る)

2. (リモート)リポジトリ画面の「概要」にある「SouceTreeにクローン」をクリック

3. 先ほど用意した空フォルダを指定して「クローン」

 Source Treeのローカルに追加される

*クローン時に何故かログインを求められる現象を確認。正しいユーザー名とパスワードを入力しても弾かれる。WEBでログアウト→ログインし直して上手くいった。同期がとれていないことがあるみたいなので、似たような現象に遭遇したら再ログインや再起動を試してみること。

■リモートリポジトリにファイルを追加(masterブランチの作成)

1. ローカルリポジトリにファイルを入れる

2. SourceTreeの「作業ツリーのファイル」にローカルリポジトリのファイルが表示されるので、コミットするファイルを「Indexにステージしたファイル」に移す
  • 全選択する場合は、下図の赤丸の箇所にチェックする
↓

3. 上部の「コミット」アイコンを押し、メッセージを添えて「コミット」
  • コミットメッセージ欄をクリックしても、アイコンを押した時と同じ反応をする
  • 最初のコミットをしたことでmasterブランチが作成される(参考)

4. 上部の「プッシュ」アイコンを押し、masterブランチにチェックを入れて「OK」

5. 「Completed successfully」が表示されたら「閉じる」(この処理には時間がかかる)

6. これにより、WEB上でもソース・コミットが追加されたことを確認できるようになる

■ブランチの管理(推奨)

1. WEBのSettingから「ブランチの管理」を選択し、masterを保護する(参考)
  • 「Limit pushes to specific users and groups」のブランチ名にmaster、ユーザーに管理者グループを指定して「追加」。(これにより、masterにプッシュできるユーザーを管理者グループの人に限定した)
  • 同様にmasterブランチの削除とリベースを防ぐ


*後半へ続く

2016年2月11日木曜日

C#のTips

  • 小さな値を扱う変数にint型以外を選ぶ必要があるかについて

    • byte型などはメモリ利用効率は良いが、int型への暗黙的変換でエラーの原因になることがある。(参考)
    • int型は32bit、byte型は8bitで、変数が占めるメモリ領域は24bit節約できるが、最近のPCは大容量化しているので数bit節約する意義が失われつつある。また32bit  のCPUで動かす場合は、int型の方が処理が早い。
    • 数bitでも節約しなければいけない状況になったとき検討すれば良い。
    • CPUが8bitの場合はbyet型のようなバイト長8biteの型が良い。

  • プロパティについて

    • 基本的な概念(参考)
    • 代入演算子やインクリメント等について
      • プロパティに代入演算子(+=, -=など)を使うとgetとsetが両方呼び出される(参考)
      • int型のプロパティにインクリメント等(++, --)も使用可能(参考)。こちらも同様にgetとsetが両方呼び出される。
      • spawn.Count = spawn.Count + 1;とやっても、結局、現在の値をgetしてから+1することになる。
      • 外部で変動するような変数は、根本的にプロパティに適していない
        • getとsetを両方使うことになるため、プロパティにする意味があまりない
        • set{this.count += value;} などとする手もあるが、外部から見ると1を代入したはずなのにcountの値が2になっているように見えるなど、処理が分かりにくくなる
        • 外部から値を変動させる変数にはプロパティは使わず、素直に値を変動させるためのメソッドを用意したほうが良い
    • 下図のように自動実装プロパティに処理を持たせようとすると、エラーは出ないが実行時にフリーズする。素直に旧式の書き方に従い、privateの変数も用意する必要がある。

  • 入れ子にされた内部クラスについて

  • 配列について

    • 宣言時はnew クラス名 [] を省略した短縮形も使える(参考)

  • caseの末尾はセミコロンではなくコロン

    • 例)case Names.Sunny:

  • 継承について

    • 用語(独習C#より)
      • 基本クラス:継承元のクラスのこと(Javaのスーパークラス)
      • 派生クラス:継承するクラス(Javaのサブクラス)
    • 派生クラスは基本クラスのメンバ(変数、プロパティ、メソッド、インデクサ)をprotectedかpublicを使えば使用可能
      • base.関数で機能を拡張するということは、基本クラスの関数はpublicかprotectedにする必要がある 
    • 派生クラスは基本クラスのprivateなメンバは使用できない
    • praivateがクラス内部からしかアクセスできないのに対して、protectedは派生クラス内からもアクセス可能(参考)
    • 基本クラスと派生クラスが各々独自のコンストラクターを持つ場合、基本クラスは基本クラスを初期化し、派生クラスは派生クラスを初期化する。基本クラスが必要とする引数はbaseを用いて引き渡す。
    • コンストラクターは基本クラスから順に呼びだされる
    • 同じ名前の変数を作ると、基本クラスではなく派生クラスの変数が呼び出される。これを隠ぺいという。またbase.メンバとすると、隠ぺいされている基本クラスのメンバを呼び出せる。
    •  同名の変数やメソッドを定義した場合、新たに定義したことをコンパイラに伝えるためnewをつける
    • 仮想メソッドを宣言するには、基本クラスの中でメソッド宣言前にvirtual修飾子をつける。これをオーバーライドするときは、override修飾子をつける。こうすると、派生クラス先で再定義される。
    • virtual修飾子はプロパティなどにも使える。派生先でoverride修飾子をつけることで再定義できる。
    • 基本クラスAとその派生クラスBがあったとする。このとき、A x = new Bはエラーとならない。このとき、クラスAに仮想メソッドM()があるとする。
      • Bにてoverrideしていると、x,M()はBの処理を行う
      • Bにてnewしていると、x,M()はAの処理を行う
      • 根本的に、A x = new Bとする状況とは一体…。
    • Unityでオーバーライドを使う時の例
    • オーバーライドをする時、基本クラスと派生クラスでアクセス修飾子を変更することはできない(例えば、基本クラスのprotected virtual void Start()を、派生クラスでprivate override void Start()とすることはできない)

  • > <について

    • 比較演算子の>、<のこと
    • HTMLコード用エスケープ(参考)
    • if文でも使える。ただ、使う状況は不明なので分かり次第追記する

  • クラス名の前にnew修飾子を用いる場合と、用いない場合

    • 値型はnewしない、参照型はnewする(参考)
    • 静的メンバーを呼び出す際はnew不要(参考)
      • Vector3.upとかIPAddress.Anyとか
      • staticキーワードが付いている(上記の例も、よく見るとリファレンスにstaticで定義・記載されている)

  • null許容型

    • 宣言時の型に?を付ける(参考)
    • 中身にアクセスする際にはvalueプロパティを介する