.NET Core 3.0が正式リリースされたのでBlazor Server触ってみた

知り合いとWebサービス作らねえかって話になって、最近は何か面白そうなのあるのかなと探しているうちにBlazorを見つけた。 つい先日までBlazorの基盤である.NET Core 3.0がPreview段階だったので、まだ使えないかな~と思っていたがまさかの今日、 .NET Core 3.0が正式リリースされたとのことで触ってみることにした。

Step1 - VS2019を入れる

まだ入ってない場合は こちら Visual Studio 2019 | Visual Studio からVS 2019を入れます

ASP.NET CoreとかBlazorとか書いてある奴が必要なので適宜入れましょう。

Step 2 - Docker Desktopを入れる ※必須ではない

まだ入ってない場合はこちら Docker Desktop for Mac and Windows | Docker からDocker Desktopを入れます

Step 3 - Hyper-Vを使える状態にする ※必須ではない

まだ使える状態にしていない人は使える状態にします。

Step2-3はDocker環境を使用しない人には必須ではないです

Step 4 - Dockerを起動しておく

Docker Desktopのアイコン
これを起動します

Step 5 - プロジェクトを作成する

画面右下の「新しいプロジェクトを作成する」ボタンを押す
これをクリックして
Blazorプロジェクトを作成します
検索等を使ってBlazorプロジェクトを選択
プロジェクト名などを入力している画像
プロジェクト名などを入力
Blazorサーバーアプリの設定の確認と設定
HTTPS用の構成・Dockerサポートを有効にする・Linux(OSの選択)になっていることを確認

Step 6 - プロジェクトを起動してみる

Dockerで実行ボタン
デバッグボタンがDockerボタンに代わっているのでクリック

Step 7 - Dockerを使える状態にする

※この際、Dockerを起動していなかったりするとビルドが失敗するのであらかじめ起動しておく

Docker DesktopがShare driveを要求している
Share itを押す
Dockerが権限を要求している
Dockerが権限を要求しているのでパスワードなどを入力する

Step 8 - ページにアクセスしてみる

セキュリティ警告などが出るが、たぶん大丈夫なので、証明書を信用する・証明書をインストールするなどする

多分アプリケーション実行側のSSL証明書の信頼確認
はいを押すと良さそう
多分ブラウザ側のSSL証明書のインストール確認
はいを押すと良さそう
Firefoxで出る自己署名証明書の信頼確認
無視すると良さそう
レンダリングされたブラウザの画面
Hello world!

Step 9 - ページをちょっと改造してみる

Project > Pages > Index.razor を開く

@page "/"

<h1>Hello, world!</h1>

Welcome to your new app.

のように書かれているので

@page "/"

<h1>Hello, world!</h1>
<div>
    Omae no namae ha kyoukara SEN da.
</div>
Welcome to your new app.

のように書き足す。

再起動ボタンを押すと、ページも更新される。

再起動ボタン
再起動ボタン
更新されたページ。Hello world!の下に文言が追加されている
更新されたページ。Hello world!の下に文言が追加されている


以上、終わり。 ページビューが処理部分と別に作れるのがうれしいのと、Unityとかでやってるのと同じC#で処理が書けるっぽいのがうれしそう。 今回作るサービスにマッチするかどうかはまだ分からないのでもうちょっと触ってみないとだけど、簡単なウェブアプリとかには良さそう。 とにかく使ってみたい。

GitのSubmoduleのディレクトリを動かそうとして失敗したので備忘

状況

  1. Gitレポジトリに登録したSubmoduleを移動させたい
  2. 何を思ったのか、手作業で移動させてしまった
  3. アホなのでその移動をコミットした
  4. ファミマのバナナフラッペをキメてたので、その後普通に作業をして、コミットログがいくつか溜まっている(全部Resetとかかけてやり直すの無理)
  5. 上記のようなことがあったので、Submoduleに登録していたはずのファイルがすべてレポジトリ

やりたいこと

できればつらい思いをせずに移動後のあれそれをSubmoduleとしてまた扱えるようにしたい

やったこと

参考にしたのはこちらのページ 

chaika.hatenablog.com

まずは方法1にある通りのことを一通り行った。

しかし手順7-8あたりで、書いてあるような動作をしなかった(renamedにならない)ため、この方式をあきらめる

次に方法2を見たが、Submodule自体を移動してしまっているため、方法2で示されている手順を追うことができなかった。

結論 - 手順

  1. まず現状を受け入れる
  2. ブランチを切る(よくわからない作業をするため)
  3. .gitmodules中身を 削除してコミット
  4. git rm -r your/submodule/dir を実行(ディレクトリを消したいので --cachedは使わない )し、コミット
  5. .git/config からSubmodule関連の記述を削除
  6. 作業ブランチに戻ってmerge

上記のような手順でたぶん行けます。

ColorUsageAttributeの使い方が変わってた

昔(Unity5.xの頃)作ったスクリプトを修正してたら気が付いたが

ColorUsageAttribute(bool, bool, float, float, float, float)は旧形式です と言われるようになった

最近では

~ColorUsageAttribute(bool showAlpha, bool hdr) だけで良いようだ。~

今見たら ColorUsage(bool showAlpha, bool hdr) に代わってた 2019 05 08

EmissionColor周りをいじるときはHDRカラーがほぼ必須になるので覚えておきたい。

劇場版「僕のヒーローアカデミア」見てきました

こんばんは。お前技術屋じゃないんかい。これ技術ブログなんじゃないんかい。な浅葱です。

本日――というか昨日、劇場版「僕のヒーローアカデミア」見てきました。 あんまり漫画とかいっぱい読む方じゃないんですが、僕のヒーローアカデミアと、もう終わっちゃいましたがアイアムアヒーローはある分は全巻揃えました。特にヒロアカは読む度1話ごと号泣する程度には好きです。あと「映像研には手を出すな!」非常におすすめです。

そんな感じですが、今回運よく公開初日である8月3日金曜日、友人がチケットを取ってくれたので一緒に行ってきました。

普段は映画の感想とかは吐き捨てて終わりなのですが、ヒロアカ好きなので、ちょっと興味でブログ書くことにしました。

色々あって辛口な感じになってます。そのうえネタバレもあるので、読む際はご注意ください。 一応、映画見に行ってから読んでいただくのを推奨、ということで。

続きを読む

Microsoft HoloLens アプリケーション開発コンテスト応募した

応募した。

・アプリが解決する課題、背景 ...?

・技術的に考慮した点、特にアピールしたい点 ...??

・既存のアプリやソリューションとの違い、差別化ポイント ...?????

もう何か本当何も考えてなくってすみませんって感じです。 本当に何も考えてなかったので特に何も書かずに送信しました…。大丈夫なのか。

とりあえず応募用に動画作ったので見てください。 こんな感じのアプリです。

youtu.be

今後の展望ですが、 とりあえず

  • 日本語対応
  • ステージの追加
  • サポート機能の強化

あたりを考えています。

あと、これはアプリの配信とかコンテストの応募には直接関係はないのですが、今回パブリッシャーとしても使った "00a3af Soft" という名前は今後も使っていこうと思っているので、ロゴデザインなどを一度ちゃんとやろうと思っています。

一応Twitterアイコンなどで使っているこいつ

f:id:mtwand:20180426021452p:plain

もあるのですが、これは某雑誌さんのゴニョゴニョをごにょごにょしてて権利ゴニョゴニョがごにょごにょしそうなのでたぶん使えないだろうなとか、たとえ怒られなかったとして使うべきではないだろうなとか思っているので、なんか別の何かを用意できればと思っています。

いじょ

【人生初】HoloLensアプリリリースしました!

ヒュ~~~やったぜ! 人生初だよ! 個人的なアプリをストアとかに出すの! 作るの楽しいね~~。そしてつらいね~~~。大変だね~~~~~!!!!!

でもまあ、なんとか出しました。 ちょっとまだ最終的な脳内の完成図にはずっと遠いんだけれども、とりあえず出してしまって今後のアップデートでより完成度を上げて行ければなぁと思っております。

-- 追記 --

デモムービー公開しました

www.youtube.com

アプリ概要

作成者:00a3af Soft

f:id:mtwand:20180419235915p:plain 画像の背景色を浅葱色(#00a3af)にしたのに、HoloLensで見ると色の暗さが表現されずにシアンに近い色になるのが不満

アプリ名: The Sound Piece

アプリURL: https://www.microsoft.com/store/apps/9NLRFKFLRR3X

アプリ内容:

こんな感じのモノ

f:id:mtwand:20180420000109p:plain

に案内されながら、部屋の中で音探しをするちょっとしたゲームのような内容。

Spatial Mappingされた部屋の情報をもとに、部屋に「音」が配置されるので、 プレイヤーは耳を頼りに部屋のどこかに隠された「音」を探し出し、すべての「音」を集める。

そんなゲームです。(ストアにはエンタメ作品として登録されてますが)

思い: あんまりモデリングとかそういうのができないので、最低限自分で何とかできそうな音楽分野で何かやりたかった次第。 HoloLensの視野角の問題から、宝探し系のゲームは結構ハマるんじゃないかと前々思っていたので、それを音と組み合わせて、音探しという感じのものになりました。

技術的には難しいことはしていなくて、ほとんどがMRTKとUnity標準機能で賄われているようなアプリです。

一番頑張ったのはどういったアプリにするか? とか、スケジュール管理(全くできなかったけど)とか、そういった開発以外の場所です。

技術的に一番難しかった場所も凹みさんのブログ

tips.hecomi.com

パク参考にさせていただいたおかげで何とかなりました(というか本当に丸っとそのまま使わせてもらってしまっているので早めに自分でShader書いて直します)。

本当にありがとうございます。

SpatialMappingの壁に穴をあけたりとか、その向こうにあるオブジェクトを取得したりとか、音を聞いて音を探すとか、結構楽しい(本当に結構楽しいです)ので、ぜひ一度遊んでいただけると嬉しいです。

一応ですが、すべての「音」(今のところ4つ)を集めるとちょっとした仕掛けが発動するので、楽しみにしていただければと!

制作や申請の流れについても、今度のHoloLens meetupでLTさせていただこうと思っているので、来られる方はよろしくお願いします。

近いうちにブログにも書こうと思います。

最後にもう一度、

The Sound Piece は https://www.microsoft.com/store/apps/9NLRFKFLRR3X にて公開されております。HoloLensをお持ちの方、ぜひ一度遊んでみて下さい!よろしくお願いします!!

Unityでメッシュを生成する[1]

長い;前置き

メッシュについて

言うまでもないことですが、3DCGという概念は頂点・頂点をつないだ面・面をまとめたメッシュによって構成されています。 正確にはもっといろいろ(カメラとか質感とかライティングとか)ありますが、そういう難しいことは私にはわかりません。

とりあえず私たちの肉体にあたる部分はコンピュータ上ではそういった頂点とかいうやつの集合と連結によって作られているそうです。 そしてそれを「メッシュ」と呼ぶそうです。

Unity上でのメッシュ

Unity上でメッシュに触ることはほとんどありません。 何か物体を置きたいのなら、もともと用意されているオブジェクトを使うか、FBXなどのモデルデータを読み込むのが常です。 これは非常に優れた技術であり、私が大学時代に経験したような「さあDirect Xを使ってウィンドウを生成して描画領域をクリアしカメラの位置を決定したらメッシュを規定し投影変換で表示してみよう」などとやらなくていいわけです。もう二度とやりたくない。

――ちょっと本音が出ましたが話を戻すと、つまりそういった非人道的な、もとい泥臭い、非常に大変な処理はUnityがやってくれているわけですね。

いつもは。

メッシュ触ってみたい

とはいえ、Unityを使っていれば一切メッシュに触れないのか? というとそういうわけでもありません。 アセットストアなどを見ていてもわかるように、結構メッシュをゴリゴリ動かして何か動かす処理を作っている人は少なくありません。 なんと驚くことにUnity上でモデリグンできるアセットもあるらしいです(なんと無料) 他にも、例えばシェーダーやボーンを用いないで揺れものや流体なんかを動かそうと思うと、メッシュをいじる必要があります。

まあ色々とそういった先行事例がありますが、なんというか、まあ、触れるなら触りたくない? という気持ちになりませんか。なりますよね。私はなりました。 ということで、Unity上でスクリプトから直接メッシュをあれこれする何かを作ってみたいと思います。

メッシュを生成する

メッシュとは

メッシュは先ほども書いたように頂点の集合とその連結です。 具体的にはUnity上では

Mesh -- メッシュ
Mesh.vertices -- メッシュを構成する頂点群
Mesh.triangles -- メッシュを構成する三角面群

のようにデータが作られています

vertices

頂点群です。 Vector3の配列として定義されています。

triangles

三角面群です。 intの配列として規定されていて、面数×3個値が保持されます。 verticesのindexを連続して代入することでその3個ずつを1面として認識します。

vertices = new Vector3[] {
    (1, 1, 0),
    (1, -1, 0),
    (-1, 1, 0),
    (-1, -1, 0)
}
triangles = new int[] {0, 1, 2, 2, 1, 3};

詳しくは メッシュ - Unity マニュアル このあたりを読んでいただけると私の説明よりわかりやすく詳細に書いてあるかと思います。

実際に何かを生成する

上記の例をもとに実際にこれを生成してみましょう。

適当にスクリプトを作って以下のコードを貼り付けてみてください。

 [SerializeField]
    Material material;

    // Use this for initialization
    void Start()
    {
        GameObject obj = new GameObject();
        MeshFilter filter = obj.AddComponent<MeshFilter>();
        MeshRenderer renderer = obj.AddComponent<MeshRenderer>();
        MeshCollider collider = obj.AddComponent<MeshCollider>();
        Vector3[] vertices;

        vertices = new Vector3[] {
            new Vector3(1, 1, 0),
            new Vector3(1, -1, 0),
            new Vector3(-1, 1, 0),
            new Vector3(-1, -1, 0)
        };
        int[] triangles = new int[] { 0, 1, 2, 2, 1, 3 };

        Mesh mesh = new Mesh();
        mesh.vertices = vertices;
        mesh.triangles = triangles;

        filter.sharedMesh = mesh;
        collider.sharedMesh = mesh;
        renderer.material = material;
    }

これをなんでもいいので適当なオブジェクトにアタッチして、マテリアルを指定してゲームを実行すると

f:id:mtwand:20180330192711p:plain

はい。こんなものが現れたかと思います。 おめでとうございます! これで私たちはUnity上でメッシュを生成することに成功しました!

今日から「Unity上でメッシュ生成できる」と豪語していきましょう。いえぃ。

…さて、今だれか面白い冗談だと思いましたね。そうですね。 実はまだやらなければいけないことがいくつかあります。

そのあたりはまた今度にしましょう。 次回上記コードの解説も書くだけ書いてみたいと思います。