- 投稿日:2019-07-19T19:23:44+09:00
Server Side Blazor + Google 認証 の最小構成メモ
Visual Studio の Server Side Blazor のプロジェクトテンプレートに Google 認証を追加する。
以下の ASP.NET Core Identity なしの Google 認証を行う。
環境
- Visual Studio 2019 16.2.0 Preview 4.0
- .NET Core SDK 3.0.100-preview6-012264
手順
Visual Studio のプロジェクトテンプレートから「ASP.NET Core Web アプリケーション / Blazor サーバーアプリ」を選択し、プロジェクトを生成する。(認証なしで作成)
NuGet で以下のパッケージを追加する。
<PackageReference Include="Microsoft.AspNetCore.Authentication.Google" Version="3.0.0-preview6.19307.2" />Google Developer Console で OAuth のクライアントID等を取得し、appsettings.json か Secret Manager に設定する。
リダイレクトURLの設定とかもやる。(http://localhost:8080/signin-googleとかを追加。※ポート番号確認すること)
https://docs.microsoft.com/aspnet/core/security/app-secrets
appsettings.json"Authentication": { "Google": { "ClientId": "", "ClientSecret": "" } }
- Startup クラスを以下のように変更。
Startup.cs... public void ConfigureServices(IServiceCollection services) { ... + services.AddAuthentication(option => { + option.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; + option.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme; + }) + .AddCookie() + .AddGoogle(options => { + var google = this.Configuration.GetSection("Authentication:Google"); + options.ClientId = google["ClientId"]; + options.ClientSecret = google["ClientSecret"]; + }); + services.AddControllers(); services.AddRazorPages(); services.AddServerSideBlazor(); ... } ... public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { ... app.UseRouting(); + app.UseAuthentication(); + app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapBlazorHub(); + endpoints.MapDefaultControllerRoute(); endpoints.MapFallbackToPage("/_Host"); }); ... }
- 以下の Shared/LoginDisplay.razor を作成する。
Shared/LoginDisplay.razor<AuthorizeView> <Authorized> <text>Hello, @context.User.Identity.Name!</text> <a href="Account/Logout">Log out</a> </Authorized> <NotAuthorized> <a href="Account/Login">Log in</a> </NotAuthorized> </AuthorizeView>
- MainLayout.razor を以下のように変更
Shared/MainLayout.razor... <div class="main"> <div class="top-row px-4"> + <LoginDisplay /> <a href="https://docs.microsoft.com/en-us/aspnet/" target="_blank">About</a> </div> ...
- Controllers/AccountController.cs を作成し以下の AccountController クラスを作る。
Controllers/AccountController.cspublic class AccountController: Controller { public IActionResult Login() { return this.Challenge(new AuthenticationProperties { RedirectUri = "/" }); } public IActionResult Logout() { return this.SignOut(new AuthenticationProperties { RedirectUri = "/" }); }
- FetchData.razor 等のページに
@attribute [Authorize]を付ける。おわり。
※ これはとりあえず動くようにしただけなので Cookie の設定とかいろいろ後でちゃんとやること。リダイレクト周りとか。オープンリダイレクト注意。
https://docs.microsoft.com/aspnet/core/security/preventing-open-redirects
- 投稿日:2019-07-19T16:54:31+09:00
[Blazor]Blazor事始め(.NET Core 3.0 Preview 6)
Visual studio 2019を使ってBlazorのテンプレートを作成から実行までをやってみたいと思います。C#なコードがブラウザでそのまんま動いちゃうってシビれますよね。
ゴール
- ゼロ環境からBlazorテンプレートをビルドして実行できるようになる
環境
- .NET Core 3.0.100-preview6-012264
- Visual Studio 2019 (Version 16.2.0 Preview 4.0)
- Blazor extension
- Windows 10 1903
手順
preview3の頃は若干プロジェクトの作成が面倒くさかったのですが、preview6ではだいぶ改善されています。
.NET Core SDKのインストール
最新版のSDK(記事作成時点では
SDK 3.0.100-preview6-012264)をMicrosoftのサイトよりダウンロードし、インストールします。
https://dotnet.microsoft.com/download/dotnet-core/3.0
ちゃんとインストールされているか以下で確認をする。
> dotnet --version 3.0.100-preview6-012264テンプレートの取得
続いて、Blazorプロジェクトのテンプレートを取得します。
> dotnet new -i Microsoft.AspNetCore.Blazor.Templates::3.0.0-preview6.19307.2テンプレートがインストールされたか確認します。Blazorのテンプレート一覧がでていれば問題ありません。
> dotnet new --list | findstr Blazor Blazor (server-side) blazorserverside [C#] Web/Blazor Blazor (ASP.NET Core hosted) blazorhosted [C#] Web/Blazor/Hosted Blazor Library blazorlib [C#] Web/Blazor/Library Blazor (Server-side in ASP.NET Core) blazorserverside [C#] Web/Blazor/ServerSide Blazor (client-side) blazor [C#] Web/Blazor/StandaloneVisual Studio 2019 Preview版のインストール
プレビュー版をインストールするため、次のURLからexeをダウンロードします。
https://visualstudio.com/vs/preview
ASP.NET と Web 開発にチェックを入れ、インストール処理を進めます。
ダウンロードサイズが大きい為、少々時間がかかります。プログレスバーと戯れましょう。
Blazor extensionのインストール
引き続き、Blazor extensionをインストールします。
下記URLのDownloadをクリックしvsixをダウンロードします。
https://marketplace.visualstudio.com/items?itemName=aspnet.blazorダウンロードしたvsixを実行し、再びプログレスバーと戯れます。
ここまで終了したら下準備は終了です。
プロジェクトの作成
Visual Studioを立ち上げ、新しいプロジェクトの作成をクリックします。
プロジェクトテンプレートはASP.NET Core Web アプリケーションを選択します。
プロジェクトの構成は任意の名前にしてください。なんでもOKです。
テンプレートは
.Net Core ASP.NET Core 3.0のBlazor WebAsembly アプリを選択します。ちなみに2つありますが、下を選んで作成をクリックしてください。
ビルド&実行
テンプレートの読み込みが終了し、Visual Studioが起動したらデバック実行します。
webブラウザーはChromeを選択しておきましょう。(IEは非対応)
ビルドに失敗しなければ、Chromeが立ち上がり
MSにしてはいい感じの画面が表示されます。
ちゃんとWebAssemblyらしくDLLが読み込まれてブラウザで実行されています。
以上、終了です。
後はテンプレートを煮るなり焼くなりしてゴリゴリコーディングしましょう。注意事項
- IEはWebAssemblyに未対応のため、Loading...の画面から遷移しない
- 自分の環境ではなぜかテンプレートにBlazor WebAssembly アプリが2つ表示された
- ちなみに双方違う内容のプロジェクトを作成する
- 名前も説明文も一緒のため紛らわしい(下が正解だった)
- まだプレビュー版のため、今後手順が変更になる可能性がある
参考文献
- 投稿日:2019-07-19T14:45:10+09:00
テトリスの次にレーシングゲーム作った話
はじめに
こんにちは。ユニバの MJ です。
前回はテトリスを二週間で作った後に、なんと部活動っぽくなりまして、ユニバユニティ倶楽部 略してUUCという糞ダサネームで活動していくことになりました。
そうして今回はレーシングゲームを作ろうかという話になって、大体できたので記事にしようかと思った次第です。
今回のゲームは Maker Faire Tokyo 2019 でプレイできる予定なので、いらっしゃる方がいたら弊社ブースに足を運んでいただければ幸いです。できたもの
今回はシャワーヘッドが爆走するレーシングゲームを作ることになった。
製作期間は大体一か月ぐらい?
案件が入ったりでやっぱり大変だった。
きっかけはメンバの一人がシャワーヘッドを握っていたことに由来。op。 意味ありげなシーン。特に意味はない。
機体セレクト。なるべく高級感を出したかった。普通に店頭販売用のプロモーションにこういうの使ったら面白そう(仕事ください)
レースシーン。シャワーの飛沫が画面にかかるようになっている。非常に不快。
と単純なレーシングゲームではありますが、テトリスの何倍も考えることが多く大変でした。
参加メンバーの皆さんお疲れさまでした。開発メンバ
MJ(おじさん1): 主にロジック担当、今回は画面のざっとした絵作りとかしてみたり、とにかく前に進めることを考える
おじさん2;AI書いたり、周回判定したり
おじさん3:UI置いてくれたり画面つなぎこんでくれたり
おじさん4:音つくってくれたり、フォント選定してくれたり
わかさ1:エフェクトつくってくれたり
わかさ2:ステージつくってくれたり、もろもろ指導してくれたり
わかさ3:シーンロード系の基盤を用意してくれたりみたいな感じ。ウェブ開発より登場人物多いかも!
プロジェクト管理
前回はかなりざっくりとした管理だったので、今回はちょっと力をいれました。
とはいえ、今回もやる気ベースで無理をしない。仕様をざっくり共有する
何はともあれみんなで作るもののイメージを含ませるのは大事
基本的な仕様だったり、どんな質感にするのかだったり、使わないものでもとりあえずまとめたりする。
Miro という最高便利ツールを使ってまとめてます。全体のざっくり仕様まとめ、取り組む課題や今回は妥協するとこなど、自分の取り組む課題の下地に利用する
世界観。実現無理そうなものでもワイワイ話せるのが良い
シーンフロー。予想がたったら、ユニティの世界でどうするか一旦考えたりする。現実味を帯びてきた。
実際こんな感じかな?とうい図。絵が上手いとか下手とかではなく、こういうイメージを持ってますという宣言が大事。
スプレッドシートで最初にスケジュール構想を練りながら毎週何をする予定かを書いたりする
スケジュールシート。時期に対する着地点と、それに対して毎週何をする予定かをまとめる。
他の案件との兼ね合いもあるので無理せず、ゴールをアップデートしながら進めた。というのをしながら進めました。前回よりプロジェクトっぽい装いですね。
今後に向けてと反省
繋がないと盛り上がらない
ユニティ開発というものはある種コンフリクトとの闘いでもあるなと感じていて、いかにお互いが気持ちよくシーンを開発するか?というテーマのもデバッグシーンを一人一個もった状態で開発をつづけました。が、徐々にモチベーションが下がっていく。一人一人の進捗は確実にあるのに。
要するに作業はしてるんだけど、ゲームが出来てないというジレンマが皆の中にあったわけですね。
スケジュールにあった目標は達成はしているんですが、マスタシーンの上で動いていたわけではなかったのです。なので次回はマスタシーンにつなぐ時期とか、完成度 xx% でも一旦入れましょう。
とかそういうところを考えないといけないですね。絵を描くってすごい大事
弊社は基本的に web を主に生業にしている会社なのですが、ウェブサイトというのはある程度フレームが決まっているものです(慣れているだけかもしれないですが、、、)。それに比べてゲームというのは無限の可能性を秘めいているわけで、とにかくシーンの装いの第一歩を決めたり、こういう演出をしたいんだ!と宣言するのが大事ですね。
進行に関して言えば最初はスタートダッシュを切ることはできましたが、そのあとも継続的に妄想を続ける必要があったかな?と思います。
ちなみに私が途中で書いたのがこれ。
エフェクトの感じ。同じような感じにはいかなかったが、勢いは共有できた。
op シーンの元ネタ。常夏な雰囲気がよかったけど、アンニュイな感じに実際はなった。実際作りながら書くというの大変なんですが、やっぱり俯瞰してみたり、勢いを感じれたり、そういうのがゲームという総合作品に関してはより重要になりますね。
最後に
弊社はユニティを使って表現を行い、さらには現実世界とのつながり(ハードウェア)もデザインすることができます。
Maker Faire Tokyo 2019ではシャワーヘッド型コントローラで試遊してもらう想定です。せっかくなのでユニティ案件あると楽しいなと思っているので気軽にお声がけください。
露骨な宣伝になってしまいましたが、ゲーム作りやると凄いノウハウ溜まって楽しいよ!というお話でした。
みんなも作ったもの自慢しよう。
- 投稿日:2019-07-19T09:29:04+09:00
【Unity】Unity Editorかスマホ実機か判別して処理を分ける
はじめに
スマホ実機で毎回動作確認するのが面倒だったので、Unity Editorの場合はキーボード操作ができるようにしました。
サンプルスクリプト
Main CameraにAttachして使用することを想定したスクリプトです。
Unity Editorの場合は、方向キーで視点移動ができるように、
スマホ実機(Unity Editor以外)の場合は、端末を傾けて視点移動ができるようになっています。GyroControllerusing System.Collections; using System.Collections.Generic; using UnityEngine; public class GyroController : MonoBehaviour { // キーボード操作用 private Vector3 rotate; void Start() { // Unityエディタと実機で処理を分ける if (Application.isEditor) { rotate = transform.rotation.eulerAngles; } else { Input.gyro.enabled =true; } } void Update() { // キーボードで視点変更 float speed = Time.deltaTime * 100.0f; // PCは矢印キーで視点変更 if (Application.isEditor) { if (Input.GetKey(KeyCode.LeftArrow)) { rotate.y -= speed; } if (Input.GetKey(KeyCode.RightArrow)) { rotate.y += speed; } if (Input.GetKey(KeyCode.UpArrow)) { rotate.x -= speed; } if (Input.GetKey(KeyCode.DownArrow)) { rotate.x += speed; } transform.rotation = Quaternion.Euler(rotate); } // スマホはジャイロで視点変更 else { Quaternion gratitude = Input.gyro.attitude; gratitude.x *= -1; gratitude.y *= -1; transform.localRotation = Quaternion.Euler(90, 0, 0) * gratitude; } } }最後に
Unity初心者なので、より良い方法や間違いがあったら、是非教えてほしいです。

























