今回は動画を見せたいというのもあってツイートからの転載多めでお送りします。
1週間でゲームを作るイベントに参加して
— きゅぶんず (@kyubuns) 2021年2月28日
"SquareSquare"ってゲームを公開しました!
マウスカーソルで■を操作し、
次々と迫りくる赤い□をくぐり抜けよう!
たった10秒で、音ゲー力とエイム力が測れるので、ぜひ測って極めてください!!https://t.co/UeHjBHGg93 #unity1week pic.twitter.com/zJrDRCuTwr
Unity1Weekとは?
Unityを使って1週間でゲームを作るイベントです。
https://unityroom.com/unity1weeks
今回の試み
Enter Play Mode Options
ReloadDomain Offでやってみる。
めっちゃ早くて幸せ。
XDでUIを高速開発
AkyuiUnityを使ってXDとUnity連携すると、こんなに快適にUI作れるの伝わってくれ・・・!!!!
— きゅぶんず (@kyubuns) 2021年2月23日
Unity上で対象のPrefab探し出して変えて、ってやるより、XD上には常に全部の画面が表示されてるからそこからパッと選んでパッと変えてボタンポチー!で変わるとめちゃめちゃ快適https://t.co/DXODmJ3Vcc pic.twitter.com/2m6NkFHV1b
AnimeTaskでアニメを付ける
AnimeTaskを使うとTaskともRxとも相性が良いので、
— きゅぶんず (@kyubuns) 2021年2月23日
ReactiveProperty<int>の数値を変更するとUIがカッコよくアニメする、というのも簡単に書ける!!!
というunity1weekの進捗報告https://t.co/WuAEPjVYGb #unity #unity1week pic.twitter.com/nRvdiBV9mG
var score = new ReactiveProperty<int>(0);
score.SubscribeTask(async (x, c) =>
{
scoreCounter.text = $"{x}";
await Easing.Create<OutBounce>(2f, 1f, 0.5f).ToLocalScale(scoreCounter, c);
});
アウトゲームのフローこんな感じに書けると嬉しい
private async UniTask MainFlow()
{
while (true)
{
// タイトル画面
{
var (titleObject, titleUi) = OpenUi<TitleUiElements>(titlePrefab);
titleUi.HighScore.text = $"HighScore : {_highScore}";
var titleCanvasGroup = titleObject.AddComponent<CanvasGroup>();
await Easing.Create<Linear>(0f, 1f, 0.5f).ToAction(x => titleCanvasGroup.alpha = x);
while (true)
{
var clicked = await UniTask.WhenAny(
titleUi.StartButton.OnClickAsync(),
titleUi.LicenseButton.OnClickAsync()
);
if (clicked == 1)
{
await ShowLicenseWindow();
continue;
}
break;
}
await Easing.Create<Linear>(1f, 0f, 0.5f).ToAction(x => titleCanvasGroup.alpha = x);
Destroy(titleObject);
}
// InGame
var score = await inGameFlow.StartMainFlow();
var isNewRecord = score > _highScore;
if (isNewRecord) _highScore = score;
// リザルト画面
{
var (resultObject, resultUi) = OpenUi<ResultUiElements>(resultPrefab);
resultUi.ScoreText.text = $"Score : {score}";
resultUi.NewRecord.gameObject.SetActive(isNewRecord);
var resultCanvasGroup = resultObject.AddComponent<CanvasGroup>();
await Easing.Create<Linear>(0f, 1f, 0.5f).ToAction(x => resultCanvasGroup.alpha = x);
await resultUi.ReturnButton.OnClickAsync();
await Easing.Create<Linear>(1f, 0f, 0.5f).ToAction(x => resultCanvasGroup.alpha = x);
Destroy(resultObject);
}
}
}