20200728のUnityに関する記事は5件です。

プログラミング初心者がUnityでゲームをつくってみる その(3)

こんにちは!お母さんです。
今日もUnityを頑張っていきます。昨日は緑色の芝生のグランドが完成しました。
今日は、カメラの位置を変えて、グランドの周りに壁を作っていきます。

まずは、カメラの位置です。白い小さな雲のような形のものが中央左よりにありますが、これがカメラみたいです。
image.png

これをクリックする、または「hierarchy」→「Main camera」をクリックするとカメラが操作できます。左上のツールからでも操作できますが、

image.png

「Transform」に値を入力しても操作できます。
「position」のYを20に、「Rocation」のXを90にすると、
緑のグランドを真上から見た図になります。

image.png

次はこのグランドに壁を作ります。
「Hierarchy」→「3Dobject」→「Cube」で、また□を作ったら、細長くします。
グランドの大きさは、20×20。
ここに、幅20、厚さ1高さ1の壁を上端に作ります。
まず一つ目(上の部分)→wall1
「position」は 0、1、9.5
「Scale」は  1、1、20
同じようにして、cubeを作り、両端の壁を作ります。
二つ目(右端)→wall2
「position」9.5、1、0
「scale」1、1、20
三つ目(左端)→wall3
「position」-9.5、1、0
「scale」 1、1、0

image.png
これで、3方向の壁ができました!

image.png
次に!このグランドの中で動かすボールを作ります。
ボールは、「Hierarchy」→「3Dobject」→「sphere」で作ることができます。
最初の状態では、床に埋まった状態なので、
「Transform」→「position」を、0、10、0に変えます。
これでボールが床の上にきました。早く動かしたいなあ!

image.png

次に、一番右下にある、「Addcomponents」をクリックして、?マークから、「Rigidbody」と入れて検索し、キリックします。これで、「Rigidbodyコンポ-ネンツ」が追加されました。
こうすることで、ボールが物理法則に従って動くそうです。

image.png
早速実行ボタンを押して、動きを確認してみます。実行は、上部真ん中にある▶マークです。
まだ、ボールがポーンと落ちるだけですが、動くことが分かりました。
ここまできたら、もっとボールを動かしてみたいですね!
ここからは、スクリプトを書いてボールを動かすそうです。
image.png

続きは、また明日!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Unity】Unity1Week初参加者に向けたアドバイス

背景

Unity製のゲームを投稿できるWebサービス「UnityRoom」ではたまに、一週間でゲームを作り公開するイベント「Unity1Week」が開催されます。私は数回イベントに参加し、開発したり他の方の作品を遊んだりして色々な知見を得ました。本記事では私の知見をUnity1Week初参加の方に向けて紹介します。
※先に Unity1週間ゲームジャム を読み通しましょう(特にヘルプ)

企画

情報収集

Twitterで #unity1week と検索すれば、他の方のアイデアや進捗を見られます。どのような調子でゲームを作っているか見て参考にしましょう。その際、ネタやアイデアが被っていても気にしないようにしましょう。同じようなゲームでも作者によって個性が出るので問題ありません。
また有用な情報を発信しているTwitterアカウントやYoutubeチャンネルを見つけて登録しておくと、知見が広がり柔軟に動けるようになります。私は気が向いた時にひろはす ゲームクリエイター養成所を視聴しています。

アイデアが出ない

既存の好きなミニゲームを作りながら情報収集し、ミニゲームに合うアイデアをじっくり考えていきましょう。ミニゲームは仕様変更が比較的簡単で面白さもそこそこ担保されます。たとえ合うアイデアが出なくても提出してしまいましょう。

タイトルは分かりやすく

Unity1Weekでは沢山のゲームが一斉に公開されます。ユーザーはその中からゲームを選ぶため、ラノベのように内容が分かりやすいタイトルを付ける事をおすすめします。一覧表示では長いタイトルは省略されるので、見せたい文言は最初に持ってきましょう。

ポイント

説明文を読まずに遊べるゲームを目指しましょう。単純明快なルールにしたり、チュートリアルを用意したり、オブジェクトの配置で誘導したり等の方法があります。
・ 短く遊べるようにしましょう。長いと途中で離脱されます。スコアアタック系は繰り返し遊ぶことを考えて~60秒ほどにするといいでしょう。
・ 音量調整機能をつけましょう。複数のゲームを連続して遊ぶ人が多いのであると便利です。音量調節機能がある画面ではBGMやSEを流して実際に音量を確認できるようにしましょう。

開発

はじめに

UnityRoom で対応している Unity のバージョンを確認しましょう。
Unityのプロジェクトはバージョンを変更すると不具合が出たりするので、はじめに確認しておきましょう。UnityRoomにログイン > ゲームを登録する > WebGL設定 > Unityのバージョン から、投稿できるUnityのバージョンを確認できます。
次に Platform を WebGL に変更しましょう。
File > Build Setting から変更できます。完成してから変更すると結構時間がかかるので早めに変えておきましょう。
キャプチャ.png

WebGL では日本語表示に一工夫必要

デフォルトのArialではWebGLで出力するときに日本語が表示されません。Noto Sans CJK JP等を使いましょう。
Text Mesh Pro 等で日本語を表示する際は、 日本語の文字コード範囲指定 等から文字コード範囲を指定しましょう。

WebGL のビルド & UnityRoom へのアップロード

環境が変わって不具合が出る事はよくあります。最低限遊べるようになったら一度ビルドして、UnityRoomにアップロードしてみましょう。中途半端でも大丈夫です。公開状態ははじめ、非公開になっています。また、Unity1Weekは多少遅刻しても問題ないので、間に合わなくても諦めず頑張って投稿しましょう。

スマホ対応

スマホ操作に対応すれば閲覧数や評価、コメントを多くもらえます。マウスクリックやButton入力のみのゲームであれば対応を視野に入れて開発してもいいかもしれません。
同時入力を多用するゲームで Button を使うと不具合を起こします。 Input.touches と EventSystem.current.RaycastAll を組み合わせ、Buttonの名前を取得して入力を判定すると楽です。
標準のInputFieldはスマホでの入力ができないので 【Unity】WebGLで日本語入力を行う を参考にしましょう。

簡単にクオリティを上げる

Unity臭で検索すると色々出てきます。簡単に実践できるものが多いので試していきましょう。下記は私が良くやる手法です。

パーティクル

アイデア次第で色んな用途で使えます。見た目が寂しい時に使いましょう。
* 大量の雲や星、ビルや家を配置して横移動
* プレイヤーに付けて砂ぼこりを演出
* ShapeをBoxにしてScene全体を覆うと幻想的

効果音

効果音再生時にスクリプトから pitch を Random.Range(1.1f, 0.9f) 等にして音程をバラつかせ、変化を付けましょう。更に、同じような効果音(例えば足音)を複数用意し、その都度ランダムな効果音を再生すれば、より賑やかになります。効果音は AssetStore で購入できます。

カメラシェイク

カメラを揺らすだけで手ごたえや衝撃を感じられるようになります。ScreenShake.cs等を利用しましょう。カメラシェイクを考慮して画面外も少し用意しておくと安全です。揺らしすぎると酔うので注意。

UnityRoomの各種設定について

アイコン

ゲームの顔になるので、よく考えて作りましょう。クリックされやすくなる要素を紹介します。
textIcon.pn_g.png
文字
タイトル画面のスクショでも十分です。インパクトがある文字列にしましょう
imageIcon1.pngfaceIcon.png
顔イラスト
顔アップの方が目立ちます
designIcon.pn_g.png
デザイン
デザインの凝ったゲームは中身もしっかりしているように受け取られます
medatu_.png_meda2.png
原色
原色は目立ちますが安っぽく見えます。原色に近い色でアクセントを足すと質のいいカジュアルゲームっぽく見えます
gif.gif
Gif
動くアイコンも作れます。ScreenToGif等でゲーム画面をキャプチャしましょう。512kbまでなので、アイコンサイズやフレーム数、色数を減らしてやりくりしましょう。

説明文

迷ったら下記の順に書きましょう。
1. 一文でゲームの説明(例:磁石の力を使って進む2D横スクロールアクションゲームです。)
2. 簡潔なルール説明(任意)
3. 攻略情報(任意)
想定プレイ時間を入力する際はゲーム初心者がプレイした場合で考えましょう。開発者はプレイが上達し過ぎて感覚がマヒしています。

スクリーンショット

Windows10の場合、スタートボタン + Shift + S を同時押しするとスクリーンショットを撮れます。
スクリーンショットを取る事を考えて、ゲームで絵になる場面を用意しておくといいでしょう。

操作方法

箇条書きで簡潔に書きましょう。

 ←→:移動
 Z:ジャンプ

タグ設定

思いついたタグ候補を検索して、一番クリックされそうなタグを使いましょう。
例えばスマホ操作に対応しているゲームを作った場合「スマホ」「スマホ対応」「スマホ操作」「スマホ操作対応」辺りで検索します。検索結果から、ゲーム数や人気のあるゲームの閲覧数等を参考にタグ付けしていくと見てもらいやすくなります。
「初心者」タグを付ければ大目に評価してもらえるかもしれません。

イベント参加・公開設定

応募してから公開設定で一般公開しましょう。先に公開設定をいじるとTwitterのBotがゲーム情報を呟いてしまいます。

公開後

Unity1Weekは公開してから後半戦が始まります。他者の作品を評価しコメントすると自身の作品も評価やコメントがもらいやすくなるので、ドンドン遊んで短期ゲーム開発の教養を得ましょう。
コメントでは不具合や改善点が報告されることもあります。早めに対処しましょう。沢山のゲームを素早く公平に評価するために、評価基準を設けると楽です。

私の評価基準

楽しさ
1.遊ぶことができない
2.遊べるけど面白くない
3.遊べる
4.また遊びたいと思える
5.誰かに教えたくなる
絵作り(UI)
1.情報が伝わらない
2.情報は伝わる
3.絵になるけど見づらい
4.絵になる
5.絵になるし見やすい
サウンド
1.なし
2.BGM か SE の一方がある
3.BGM と SE がある
4.ゲームに合っている
5.気持ちいい
操作性
1.操作が困難
2.慣れが必要
3.遊べる
4.快適に遊べる
5.説明不要で快適に遊べる
雰囲気(統一感)
1.不快に思う
2.いびつ
3.世界観は伝わる
4.統一感がある
5.印象に残る
斬新さ
1.既視感があり面白くない
2.既視感
3.斬新だけど面白くない
4.斬新
5.斬新で面白い

ランキング

ゲーム公開から1週間後にランキングが発表されます。ランキングの部門は 総合、楽しさ、絵作り、サウンド、操作性、雰囲気、斬新さ の7つです。好成績を目指すなら、自分自身のゲームを評価しながら作り、各評価が4を超えるようにしましょう。一つの要素に欠陥があると他の要素もついでに評価を下げられがちです。

おわりに

Unity1Weekは短い期間でクリエイターからの感想がもらえる、初心者におすすめのイベントです。
破綻したゲームを投稿する人や、1日で作って投稿する人もいるので、気楽に参加してみてください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Unity】アクティブ切り替え用クラス

概要

毎回.gameObject.SetActive(true)のように記述するのは面倒だったため切り替え用のクラスを作成しました。

メインクラス

List型オブジェクトに切り替えたい要素を定義しCurrentのindex値で表示の切り替えを行う。

using UnityEngine;
using System.Collections.Generic;

namespace xxx
{
    [ExecuteInEditMode]
    public class ViewChanger : MonoBehaviour
    {
        [SerializeField]
        public List<GameObject> viewList;

        [SerializeField]
        private int current;
        public int Current {
            get { return this.current; }
            set {
                this.current = value;
                UpdateView();
            }
        }

        protected void UpdateView()
        {
            for (int i = 0; i < this.viewList.Count; i++) {
                GameObject view = this.viewList[i];
                if (view == null) {
                    continue;
                }
                view.SetActive(this.Current == i);
            }
        }
    }
}

切り替え処理

Controller等からCurrentにindex値を指定し切り替え

[SerializeField] private ViewChanger sampleViewChanger;
...
this.sampleViewChanger.Current = (int){index値};
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

UnityのiOSビルド時にBuild SettingsやBuild Phases等の項目を自動追加する方法

実装環境

  • Unity 2019.2.21f1
  • Xcode 11.6

参考サイト

https://stackoverflow.com/questions/56479894/unity-3d-postprocessbuild-how-to-add-new-run-script-to-pbxproject-from-unity

方法

  1. 参考サイト記載のサンプルプログラムをダウンロードし、'Assets/Editor'フォルダ下に設置

  2. Users/UserOnPostBuild.cs内のEditProjメソッドを適宜書き換える

PostXcodeBuild.cs
    private static void EditProj(string pathToBuiltProject)
    {
            // 項目追加に必要な情報を取得(必須)
            var projPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj";
            var pbxProj = new Users.Custom.PBXProject();
            pbxProj.ReadFromFile(projPath);
            var targetGuid = pbxProj.TargetGuidByName("Unity-iPhone");

            // BuildPhasesの追加サンプル
            // 不要なら削除
            pbxProj.AppendShellScriptBuildPhase(targetGuid,"Run Script copy_test.sh","/bin/sh","./../Assets/Editor/copy_test.sh");

            // BuildSettingsの追加処理サンプル
            // 不要なら削除
            pbxProj.SetBuildProperty(targetGuid, "IPHONEOS_DEPLOYMENT_TARGET", "9.0");

            // Frameworkの追加処理サンプル
            // 不要なら削除
            pbxProj.AddFrameworkToProject(targetGuid, "CoreBluetooth.framework", true);

            // embedded frameworkの追加サンプル
            // 不要なら削除
            var defaultLocationInProj = "Frameworks/Plugins/iOS/EmbeddedFramework/";
            var relativeCoreFrameworkPath = "";
            string[] commonFrameworkNames=new string[]{"EmbeddedFramework1","EmbeddedFramework2"};
            foreach (var frameworkNameTemp in commonFrameworkNames) {
                var frameworkName = frameworkNameTemp+".framework";
                 relativeCoreFrameworkPath = Path.Combine(defaultLocationInProj, frameworkName);
                AddDynamicFrameworks (ref pbxProj,targetGuid,relativeCoreFrameworkPath);
            }

            // .dylibの追加サンプル
            // 不要なら削除
            pbxProj.AddFileToBuild(targetGuid, pbxProj.AddFile("usr/lib/libresolv.dylib", "Frameworks/libresolv.dylib", Users.Custom.PBXSourceTree.Sdk));

            // 追加処理を書き込む(必須)
            pbxProj.WriteToFile(projPath);
        }
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unityでアセットをインポートするときに忘れてしまいそうなこと

さて、Unityの2020がようやく!リリースされました。その際に、いつも使っているアセットをインポートすることになるのですが、たまーにこういう警告が出ます。

unity_asset_caution.png

こういうときは、すかさず! 「スキップ」を押します。

「インストール/アップグレード」を選ぶと大抵ロクな結果になりません。
内包しているアセットより古いバージョンのものがインストールされて(アップグレードとか言いながら…)、原因不明のエラーに苛まされることになります。

という Unity の罠に引っかからないように皆さん良い Unity ライフを!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む