20191001のUnityに関する記事は8件です。

Unityで解像度を変更した後、UIをInstantiateした際にサイズが変化する

問題

UnityのGameシーンでは、解像度を自由に変更することが可能です。元々1920×1080で運用していたゲームを、複数解像度における調整のため3840×2160にしたところ、UIのサイズが半分になってインスタンス化されてしまいました。

原因

Canvas Scalerにおいて、UI Scale ModeをScale With Screen SizeReference ResolitionをX1920, Y1080にしていた。そのため、解像度を縦横2倍にした際に、キャンバス自体の大きさ(RectTransform.Scale)も2倍になっていたため。

対処法

Instantiateした後、SetParentする際の第二引数にfalseを渡す。
デフォルトではtrueが渡されており、ワールド座標における位置サイズに変更されてしまう。falseを渡すと、ローカル座標での位置サイズにしてくれる。

Transform.SetParent

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

RPG作成(UE4・Unity・DirectX・DXライブラリ、、、その他、諸々)(stage:1)

とりあえず、何かそれっぽいものを作ってみる。

RPGって、何だろう?
「ドラ〇エ」とか「エ〇エフ」あとは、「テイル〇オブ」とか??
スマホゲームもあるしなあ。

やっぱ、象徴するのは戦闘シーンなので、戦闘シーンをなんかそれっぽいものを作ろう。

用意するアセット
<プレイヤー側>
1. Unity-chan
2. SapphiArtchan
3. AcquireChan
まあ、フリーのやつなので何でもいいと思いますが。
<エネミー側>
1.「Zombie」× 4体

作り方

1.プレーンを敷きましょう。
1-1. メニュー画面で、「GameObject」→「3D Object」→「Plane」
1-2. これで、白い地面が設定されるはず

2。キャラクターを設定しよう。
1. Unity-chan
2. SapphiArtchan
3. AcquireChan

この3点を配置する。
普通に、キャラ選択して配置だけだと思うが。
rpg01.jpg

(※ 「SapphiArtchan」は「obj」内に「prefabファイル」が入って、分かりづらい、、、)

3.後は適当に動かすだけなるんだが。
わざわざ、ソースを一から作らなくとも、アセット内ののscriptファイル「C#」から作る手もある。
既に配置されているアセットを弄って動かすことも可能であろう。

注意点

1.色々scriptファイルがデフォルトでくっついているので、色々不要な奴の機能をoffにしとかなければならない。または、削除。
2.アニメーションを機能させるために、「Animator」の項目は変えておこう(変えなくてもいいかもしれないけど、、、)。

to be continued...

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

RPG作成(UE4・Unity・DirectX・DXライブラリ、、、その他、諸々)(stage:2)

とりあえず、何かそれっぽいものを作ってみる。

RPGって、何だろう?
「ドラ〇エ」とか「エ〇エフ」あとは、「テイル〇オブ」とか??
スマホゲームもあるしなあ。

やっぱ、象徴するのは戦闘シーンなので、戦闘シーンをなんかそれっぽいものを作ろう。

用意するアセット
<プレイヤー側>
1. Unity-chan
2. SapphiArtchan
3. AcquireChan
まあ、フリーのやつなので何でもいいと思いますが。
<エネミー側>
1.「Zombie」× 4体

作り方

1.プレーンを敷きましょう。
1-1. メニュー画面で、「GameObject」→「3D Object」→「Plane」
1-2. これで、白い地面が設定されるはず

2。キャラクターを設定しよう。
1. Unity-chan
2. SapphiArtchan
3. AcquireChan

この3点を配置する。
普通に、キャラ選択して配置だけだと思うが。
rpg01.jpg

(※ 「SapphiArtchan」は「obj」内に「prefabファイル」が入って、分かりづらい、、、)

3.後は適当に動かすだけなるんだが。
わざわざ、ソースを一から作らなくとも、アセット内ののscriptファイル「C#」から作る手もある。
既に配置されているアセットを弄って動かすことも可能であろう。

注意点

1.色々scriptファイルがデフォルトでくっついているので、色々不要な奴の機能をoffにしとかなければならない。または、削除。
2.アニメーションを機能させるために、「Animator」の項目は変えておこう(変えなくてもいいかもしれないけど、、、)。

to be continued...

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

DoozyUIを触ってみた

初めに

先日から始まったHunbleBundleの破格セールに含まれていた「DoozyUI」というアセットを試してみました。
HunbleBundleのセールはこちら

※無いとは思いますが、購入した結果、何らかの不利益を被ったとしても僕は責任取れませんので、自己責任でご購入ください。

今後の諸注意

先日のCEDECやUniteにて、UIBuilderについて告知がありました。
(UIElementsについてはそれよりも前からアナウンスがありますが。)

Unity2019.3バージョンで、既にPreview版として触ることができます。
(ここでは本筋から外れるので、詳細には書きません)

結論から言うと、今後DoozyUI(というかuGUI)はこれらの技術に置き換わり、使えなくなる可能性があります。
なので、これを覚えれば安泰!というものではなく、「そのうちレガシーになってしまうかもしれない技術」と思って勉強してください。
(そらそうだろ、と思えない。使えなくなるなら勉強しなくていいや。と思う方はブラウザバック推奨)

本題

環境

DoozyUI version 3.0.c3

導入

AssetStoreからDL&インストール
内部的にDotweenも利用しているようなので、もし所持していない場合は同じくDL&インストール

インストールが完了すると、Assets/Doozyフォルダにまとめて配置されます。
image.png

サンプル

Assets/Doozy/Examples/_Sceneフォルダに、12種のサンプルシーンがあります。
image.png

こういうものも作れるんだ!と参考にする分には良いですが、最初から様々な機能がふんだんに取り込まれているため、
いきなりサンプルシーンを紐解いていくのはオススメしません。
(特にUnity初学者)

とりあえず作ってみる

サンプルを見て挫折するのはお金が勿体ないだけなので、とりあえず作ってみましょう。

インストールに成功すると、Hierarchy/Create/Doozyというメニューが追加されています。
image.png

uGUIはここにある「UI」を選択し、画面を構築していったと思いますが、
DoozyUIを利用時は、「Doozy」メニューを使っていくこととなります。

以下の方法でUIButtonを生成してみましょう。
image.png

すると、画面上にボタンが出てきますね。
image.png

基本的には通常のボタンと同じものですが、「UI Button」というScriptがアタッチされています。
image.png

すぐ下に「Settings」「Manual」「Youtube」と3種のボタンがあるのは、とてもユーザビリティがあって分かりやすいですね。

普通の紹介記事なら一番上から説明すると思いますが、本項は「とりあえず作ってみる」なので、
上記の3種の神器や「ButtonCategory」、「Open Database」などといったものは、一旦放っておきましょう。
こういうものは必要になってから調べればいいのです。

上から順にみていくと、OnPointerEnter~OnClickまで、(Unityを触った人なら)見知ったイベントがありますね。
デフォルトではOnClickのみ有効化されているようです。

▶を押して、開いてみましょう。
image.png

はい、分かりません。

「ClickMode」とやらを設定出来たり、「Preset」で初期状態をロードする機能があるようですが、これらも放っておきましょう。
僕たちが最初にやりたいことは、ボタンを良い感じに動かすことです。(違ったらすいません…)

というわけで、ひとまずこの部分に注目しましょう。
image.png

なんとなくわかりますね。

OnClickイベントが発行された時に行うAnimationを、ここで設定できるようです。(デフォルトではPunchというものが設定されています。)
Punch?殴るのか?
その下の「Preview Animation」という項目で、プレビューできるようなので、押してみましょう。

……何も動かない。

不良品を掴まされたと思って、怒り狂う前に、その下を見てみましょう。
「Move,Rotate,Scale」という3つの項目がありますね。

…お察しの良い方はお分かりかと思いますが、ココでPunchアニメーションの詳細な動きを設定できます。
やってみましょう。
とりあえず一番直感的に動きそうなScaleを選択してみましょう。

image.png

Scale部分を押すと、上図のように薄赤で描かれたScaleを設定する部品が表示されます。
ひとまずScale By Xの部分に「1」を入力し、Preview Animationの▶を押してみます。

yoke1.gif

動きました!

後はPreviewで逐一確認しながら値を調整したり、ScaleだけでなくMoveやRotateを有効化してみたりすれば、
クリック時(OnClick)のアニメーションを作れたも同然ですね。

一度動けば、少しづつ色んな事をしてみたい!と思うのがクリエイターです。
Punchアニメーション以外にも出来ることはないか…?

image.png

上図のセレクトボックスから、設定方法を選択できるようです。

しかし、クリエイター心があるといえども、一から「良い感じ」のアニメーションを作るのは至難の業です。
(デザイナーの方は出来るかもですけど)

Preset

そこで先ほどすっ飛ばした「Preset」機能を見てみましょう。
image.png

ここの「Preset Category」から適当なものを選び
image.png
「Preset Name」からも任意のものを選択します。(最初は適当に選びましょう)
image.png

今回は「Organic」カテゴリーの「JellyFast」を選択しました。

image.png

さて、Preview Animationを押してみましょう!

……動かない!!!

はい。
この状態では、Presetを「選択」しただけで「Load」が出来ておりません。
というわけで、ちょうど「PresetName」の上部にある「Load Preset」ボタンを押してみましょう。

image.png

すると、以下のように、Scale部分が赤くなり、先ほど手動で追加したときと同じようになりました!
image.png

その状態で再びPreviewしてみると、ボタンがアニメーションしていることが確認できると思います。
(どんなアニメーションをするかは実際にお試しください)

OnTrigger

Animationの右にあるOnTriggerでは、押下したときのイベントを設定することができます。
image.png

この辺は実現方法がいっぱいありますので、利用するかどうかは人それぞれかなと(個人的には)思います。

触ってみた結果

「とりあえず触ってみる」ことで、「いろんなことを試したい」と思えるようになれば、
後は必要に応じて調べたり、試行錯誤するだけとなり、勝ちが確定します。
やったぜ。

長くなりそうなんで、各機能の詳細は別で分けてしようと思います。

終わりに

とりあえずHundleBundle買ったはいいものの、よくわからない人へ向けて、
触ってみてもいいかな?と思う人が増えればいいな、と思い書きました。

今回書いたのは本当に一部分でしかないので、ご興味あれば一緒に勉強しましょう。

また、HunbleBundleは、セール期間とは別にアセット毎に売り切れもあるらしい(?)ので、
欲しいと思った方はお早めにご購入ください。
(謎の宣伝。)(僕は無関係なので一銭も入りません。)

追記

ArborとDoozyUIの連携方法を下記ブログにて掲載してくださっています!
https://gameshi.info/archives/863

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

Unityを用いたAndroidアプリの開発で詰まったところ

はじめまして、最近個人開発で収益を得ようと奔走しているushijiroです。初投稿なのでお手柔らかにお願いします(*´ω`*)

先日Chick Jumpというアプリをリリースしました。内容はUnityを用いて開発したシンプルなミニゲームで、以前デベロッパー登録して放置していたGoogleアカウントがあったので、AndroidアプリとしてPlayStoreからリリースしました。

ミニゲームということもあり、ゲーム自体は3日間で完成したのですが、それ以外の部分は初めての連続でなかなか苦戦しました。そこでこの記事では、詰まったところをまとめておこうと思います。

あと、もしよかったら遊んでみてください。未だにダウンロード数が0なので…(ヽ´ω`) こちらからダウンロードできます。
20190927185444.png

環境

  • OS: Windows 10
  • Unity: Unity 2019.2.6f1
  • AdMob: GoogleMobileAds-v4.0.0
  • GPGS: GooglePlayGamesPlugin-0.9.64

JDKやAndroid Studioを自分でインストールする必要はない

インストールする際にAndroid Build Support、Android SDK & NDK Toods、Open JDKにチェックを入れておくと、特に何もしなくてもAndroidアプリをビルドできるようになります。すでにUnityをインストールしている場合、Unity Hubからモジュールを追加できます。

Play Services ResolverがGradle failed to fetch dependencies.で止まる

恐らくJAVA_HOMEという環境変数が設定されていません。ビルドインのJDKはC:\Program Files\Unity\Hub\Editor\Unityのバージョン\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\OpenJDK\Windowsにあるので、システム環境変数にJAVA_HOMEという名前でパスを通しておきましょう。

ビルド時にNeither AdManager nor AdMob is enabled yet.というエラーが出る

GoogleMobileAdsSettingsのAdMob App IDが設定されていない可能性があります。GoogleMobileAdsSettingsは、Assets > Google Mobile Ads > Settings...から開くことができます。

実装に問題はなさそうなのにGPGSが動かない

プレイストア経由でないと動作しないようです。テストする際は内部テスト版としてリリースしましょう。

アプリの署名で求められるSHA1フィンガープリントをどうやって調べるのかわからない

内部テスト版でも良いのでストアにアプリをアップロードすると、SHA1が入力された状態になるので楽ちんです。

どうしても自分で調べたい場合、コマンドライン上から先程のビルドインJDKのディレクトリに移動し、以下のようなコマンドを入力するとSHA1を確認できます。

bin\keytool.exe -v -list -keystore キーストアの場所

アプリを64ビット要件に準拠していないと言われる

Project SettingsのConfigurationからScripting BackendをIL2CPPに変更し、Target ArchitecturesのARM64にチェックを入れることで64ビットに対応したアプリをビルドできます。

APKが最適化されていないと言われる

Build Settings画面のBuild App Bundle(Google Play)にチェックを入れておくと、アプリをAndroid App Bundleとしてビルドできます。生成された.aabという拡張子のファイルをアップロードしましょう。同時に生成されるzipファイルの方はよくわかりません(;´∀`)

version codeをすでに使っていると言われる

Project SettingsのOther Settingsの中にあるBundle Version Codeを変えましょう。更新するたびに一つずつ加算していけば良いと思われます。

You device dose not match the hardware requirements of this application

実機で動かした際このような警告が出て、構わずContinueするとクラッシュしたり画面がピンクになる場合、Project SettingsのOther SettingsにあるAuto Grapics APIにチェックを入れると直るかもしれません。

どうやらここにチェックが入っていると下にあるGraphics APIの中から選ばれるようで、デフォルトではVulkan等ごっつい面々が揃い踏みしており、最新の端末でしか動きそうにありません。

プライバシーポリシーをどう書けばいいかわからない

App Privacy Policy Generatorという素敵なサービスがあります。私はこのツールで生成したプライバシーポリシーをGitHub Pagesを使って公開しました。アプリをリリースして間もないので、正直問題ないか定かではありませんが、審査はパスし、今の所削除もされていません。

最後に

勉強目的かつ短期間で作ったミニゲームとはいえ、全くダウンロードされず、アプリ開発の厳しさをまざまざと思い知らされる結果となりました。評価云々以前に存在しら認識されないというのはなかなか応えますね…(´・ω・`) やはり最初から宣伝込みで独創的なアプリを作るべきと感じました。

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

初めてゲームを作るためにしたこと

はじめに

はじめまして、株式会社テクロスでアルバイトをしている大学生です。プログラミングをしたことがない私が、ゲームを作ろうとするお話です。

ゲーム作りに興味を持っている人の役に立てば幸いです。

私はUnityというゲームエンジンをインストールして使いました。

ゲーム作成のためにしたこと

1. Unityを触る

Unity上に立方体のオブジェクトを置いてその向きや場所をドラッグして動かしたり、大きさを変えたりしていました。またそれぞれのタブがどのような役割を持つのかをざっくりと把握しました。
たとえば…
Hierarchy:ステージに置いている物を文字で表示してるとこ
Scene:ステージの映像
Game:カメラ視点の映像、再生すると結果をカメラ視点で見れる
Project:使った道具や物を置いておくところ
Console:エラーを教えてくれるところ
Inspector:置いた物の位置とかいろいろ書いているところ
スクリーンショット 2019-09-30 12.31.00.png

こんな感じで厳密ではないです。厳密なのが知りたい方はUnityの公式マニュアルを確認してください。正直ここまでは全然楽しくなかったです。やっぱりUnityにある ▶️(再生) を押してオブジェクトを指示通りに動かしたいですね。

2. プログミングの勉強

オブジェクトにスクリプトをアタッチする(くっつける)と、スクリプトの指示通りにオブジェクトを動かすことができます。
さて肝心のスクリプトですが、Unity上で
Projectで右クリック -- > Creat -- > C#Script
とすることで以下のようなスクリプトを用意することができます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class sample : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }
}

この画面を使ってUnity5の教科書, 北村愛実を参考にしながら、プログラミングの基本的なことを確認していきました。

  • 記述のルール、クラスや型などの考え方
  • 演算の仕方
  • 条件説や繰り返しなどの処理の仕方 等

本などで勉強していると章とかが進む度にステップアップしてる感じがしていいですね。その後は本にあった例題や、ネットの初心者向けの記事などの正しいスクリプトがすぐに参照できるもので練習しました。

私は全く同じように書いたつもりでも{ }が抜けていたり、大文字小文字を間違えていたりとミスが多かったので、エラー文と格闘している時間が長かったかなと思います…ただ一発で思い描いた動きをしてくれた時や、エラーを解決できた時はものすごく達成感がありました。

私が実際にゲームを作成するまでにしたことは以上です。ゲームを作成するのはもっと難しいと思っていたので、簡単なゲームを作成するのであれば、必要な知識もそれほど多くないというのが個人の感想です。

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

Unity の OnCollisonEnter と OnTriggerEnter と IsTrigger と Rigidbody の関係を表にまとめた

TL;DR

Unity で OnCollisonEnter するためには、Rigidbody を入れて、IsTrigger は Off にする、です。

Rigidbody は必須

image.png

IsTrigger が優先

image.png

それでは説明です

確認した環境

Unity のバージョンは 2019.1.6f1 で、こんな感じの簡単な環境で実施しています。

image.png

Code sample

Sphere.cs

using UnityEngine;

public class Sphere : MonoBehaviour
{
    private void OnCollisionEnter(Collision other)
    {
        Debug.Log($"{other.transform.name} is OnCollisionEnter in Sphere.");
    }

    private void OnTriggerEnter(Collider other)
    {
        Debug.Log($"{other.transform.name} is OnTriggerEnter in Sphere.");
    }
}

Cube.cs

using UnityEngine;

public class Cube : MonoBehaviour
{
    private float speed = 0.1f;
    private float elapsed = 0.0f;

    // 適当に動かしてぶつけることにした
    void Update()
    {
        elapsed += Time.deltaTime;

        var pos = transform.position;
        transform.position = new Vector3(pos.x + speed, pos.y, pos.z);

        if (elapsed > 1.0f)
        {
            speed = -speed;
            elapsed = 0.0f;
        }
    }

    private void OnCollisionEnter(Collision other)
    {
        Debug.Log($"{other.transform.name} is OnCollisionEnter in Cube.");
    }

    private void OnTriggerEnter(Collider other)
    {
        Debug.Log($"{other.transform.name} is OnTriggerEnter in Cube.");
    }
}

確認した内容

Rigidbody のある・なし、IsTrigger の On・Off を切り替えて、コンソールに出力されるログを確認しました。

Rigidbody のある・なし

左側の Cube には Rigidbody がなく、右側の Sphere にはRigidbody がある状態です。
image.png

IsTrigger のOn・Off

左側の Cube の Box Collider の IsTrigger は Off で、右側の Sphere Sphere Collider の IsTrigger は On です。
image.png

補足

発火する条件を満たしていれば、OnCollisonEnter は Cube・Sphere のどちらに書いても、両方に書いても、処理が走ります。

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

Unity で OnCollisonEnter か OnTriggerEnter が呼ばれない

Unity で OnCollisonEnter か OnTriggerEnter が呼ばれないと困っている人もいるかと思い、イベントを呼ぶための Rigidbody と IsTrigger の関係を表に整理しました。
Cube と Sphere を衝突させて、イベントが起こる起こらないを確認しています。

TL;DR

Unity で OnCollisonEnter か OnTriggerEnter を呼ぶためには、まず、

  • Rigidbody を入れる

です。

その上で Collider の

  • IsTrigger が Off なら OnCollisionEnter が呼ばれます。
  • IsTrigger が On なら OnTriggerEnter が呼ばれます。

表のまとめ

Rigidbody は必須

ぶつかり合う Cube と Sphere の 両方 に Rigidbody が入っていないと、イベントは起きません。
image.png

IsTrigger が優先

さっきの表をよくよく見ると、ある法則があり、青、緑、ピンクで塗ったセルの塊ごとに結果は同じ。
image.png
つまり、Rigidbody がありのときは、IsTrigger が On か Off に影響され、On ときは OnTriggerEnter が呼ばれます。
image.png

それでは説明です

確認した環境

Unity のバージョンは 2019.1.6f1 で、こんな感じの簡単な環境で実施しています。

image.png

Code sample

Sphere.cs

using UnityEngine;

public class Sphere : MonoBehaviour
{
    private void OnCollisionEnter(Collision other)
    {
        Debug.Log($"{other.transform.name} is OnCollisionEnter in Sphere.");
    }

    private void OnTriggerEnter(Collider other)
    {
        Debug.Log($"{other.transform.name} is OnTriggerEnter in Sphere.");
    }
}

Cube.cs

using UnityEngine;

public class Cube : MonoBehaviour
{
    private float speed = 0.1f;
    private float elapsed = 0.0f;

    // 適当に動かしてぶつけることにした
    void Update()
    {
        elapsed += Time.deltaTime;

        var pos = transform.position;
        transform.position = new Vector3(pos.x + speed, pos.y, pos.z);

        if (elapsed > 1.0f)
        {
            speed = -speed;
            elapsed = 0.0f;
        }
    }

    private void OnCollisionEnter(Collision other)
    {
        Debug.Log($"{other.transform.name} is OnCollisionEnter in Cube.");
    }

    private void OnTriggerEnter(Collider other)
    {
        Debug.Log($"{other.transform.name} is OnTriggerEnter in Cube.");
    }
}

確認した内容

Rigidbody のある・なし、IsTrigger の On・Off を切り替えて、コンソールに出力されるログを確認しました。

Rigidbody のある・なし

左側の Cube には Rigidbody がなく、右側の Sphere にはRigidbody がある状態です。
image.png

IsTrigger のOn・Off

左側の Cube の Box Collider の IsTrigger は Off で、右側の Sphere Sphere Collider の IsTrigger は On です。
image.png

補足

  • 発火する条件を満たしていれば、OnTriggerEnter・OnCollisonEnter は、 Cube・Sphere のどちらに書いても、両方に書いても、処理が走ります。
  • Console に Debug.Log が表示されないと思ってこの結果が間違っていると思うかもしれませんが、実は Console にデバッグレベルのログが表示されない設定になっているかもしれません。お気を付けください。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む