LemonteaのUnity部屋

UnityとかC#のおはなしです~

アプリ用の四隅(角)が丸い画像を作れる超便利な無料サイト

こんにちは。レモンティーです。
今回は、タイトルの通りの超便利な画像加工サイトの紹介です。

そのついでにUnityでアイコンを設定する方法も書きます。

そのサイトはこちら↓です。無料ですからご安心を(2017.8/6時点)

www.quickpicturetools.com

さっそく使ってみました。

f:id:sawalemontea:20170807010638p:plain

まずは丸めたい画像を選びます。

f:id:sawalemontea:20170807010726p:plain

そうしたら、赤丸のところで
ファイル形式をPNGにしましょう。

f:id:sawalemontea:20170807010828p:plain

次に、赤丸のチェックボックスにチェックをいれ、透過させます。

後は、青丸のところで丸め具合を調節するだけです。

f:id:sawalemontea:20170807011014p:plain

好きなだけ丸めたら、赤丸のボタンで保存して
Unityへ。

Projectにドロップしてインポートします。
f:id:sawalemontea:20170807011146p:plain

そうしたら、
BuildSetting>PlayerSettings で
アイコンに設定します。
ドロップするだけです。

f:id:sawalemontea:20170807011725p:plain

これで縁の丸いアイコンになりました。

もし透過してなかったら
TextureTypeをSpriteにしてください。

今回はこれでおしまいです。

Unity 自作の絵や写真 を シーンやボタンに使う方法

こんにちは。レモンティーです。

今回は、Unityで自作の絵や、写真なんかを使う方法を書きます。

ざっくり言うと、
インポートしてTextureTypeを変えるだけですが…

私自身がTextureTypeとか言われても知らんし…
って感じだったので書いておきます。

なにはともあれまずはインポートです。
これは、ProjectにドロップすればOKです。


f:id:sawalemontea:20170807003420p:plain

↑赤で囲った所ですね。

そうしたら、Inspectorを見てみましょう。

f:id:sawalemontea:20170807003524p:plain

赤丸の所をクリックして、
TextureTypeをSprite (2D and UI)
にしましょう。

これで、ゲームシーンに直接
絵や写真を貼り付けたり…

f:id:sawalemontea:20170807004559p:plain

ButtonのSourceImageに設定して、ボタンにしたりできます。

f:id:sawalemontea:20170807004628p:plain

f:id:sawalemontea:20170807004640p:plain

ボタンが自由にできると、
一気に楽しくなりますよね。

今回はここまでです。
ほかのTextureTypeについては↓に完全にのっています(それはそう)

docs.unity3d.com

GooglePlay アプリの更新 バージョンコード変更とは?

こんにちは、レモンティーです。

この間、GooglePlayStoreむけに
アプリをビルドして公開する記事をかきました。

sawalemounity.hatenablog.com


あれで最初の一回は問題ないのですが、
現実には一度出したら終わりではなく、
更新をおこないますよね。

そこで今回は、アプリの更新について書きたいと思います。

まず、GooglePlayConsoleで
すべてのアプリ から更新したいアプリをクリックして
ダッシュボードを開きます。こんなやつです

f:id:sawalemontea:20170807000933p:plain


そしたら左のメニューを見てください。
↓の赤丸のV2ロケットみたいなマークをクリックします。

f:id:sawalemontea:20170806235315p:plain

すぐ下にメニューがでますので、
アプリのリリース を選びます。

するとこんな画面になります。

f:id:sawalemontea:20170806235600p:plain

赤丸をクリックです。

あとは 手順としては 今まで通りです。

APKをアップロードして、下のほうの「確認」を押し、
次のページで公開をおせばいいですよね。

ではなにが違うかというと、
ただ中身を更新しただけではアップロードできない点です。

同じバージョンコードのAPKだと怒られます。

なので、Unityにもどり、
バージョンコードを書き換えてもう一度ビルドしましょう。

バージョンコードは
BuildSetting>PlayerSettings>Bundle Version Code で変えられます。

f:id:sawalemontea:20170807000124p:plain

ここですね。
ふつうは1.1とかなんでしょうか…
そのへんの常識は詳しくないのですが、前と同じでなければ基本OKです。

いきなり5000兆とかにするのはやめた方が無難だとおもいますが…

ともかく
これで、更新後のAPKをアップロードできるようになりました!

今回はこれでおしまいです。
さようなら~

初めてのスクリプト(2) Inputで キー入力 タップ クリック を判定

こんにちは。レモンティーです。

ゲームを作る上で欠かせないのが、プレイヤーさんの行動を認識することですね。
それがなかったら映画みたいになりますし…

Unityではその大事な役割をInputが担っています。

今回はInputについてです。

キー入力

キー入力の取得は

Input.GetKeyDown(KeyCode.A);

のように書きます。
これは、指定したキーが押された瞬間、trueを返します。
それ以外の時はfalseを返します。

なので使用例としては、

if(Input.GetKeyDown(KeyCode.A)){
  //ここにAキーが押された時の処理
}

のようにif文にいれて、特定のキーが押された場合だけの処理をつくったりします。
初めてのUnity(5)のジャンプもそのパターンですね。

キーの指定はKeyCode.~の部分です。
アルファベットのキーはAのようにそのままです。
EnterキーはReturn
SpaceキーはSpace です。

ほかのコードはここに(そんなに使いませんが…)↓
docs.unity3d.com

もうひとつ大事なことがあります。
それはDownの部分です。
これが「押した時」というニュアンスを与えています。
ほかにもUpや何も無しといったものがあり、まとめると

Input.GetKey 押してる間ずっとtrue
Input.GetKeyDown 押した瞬間だけtrue
Input.GetKeyUp 離した(指をあげた)瞬間だけtrue
です。

これはこの他にもたびたび登場する表現です。


ちなみに、なんでもいいからどれかのキーが押されたとき
が取得したい場合は、
Input.AnyKeyDownをつかいます。

十字キー(矢印キー)

プレイヤーの移動によく使われるのがこれですね。
別にKeyCodeで矢印を一つずつ取得してもいいのですが、
左右、上下でまとめて取得できる方法があります。

Input.GetAxis()です。
引数(()の中)としてstring型の軸を指定してあげると、
その軸の正か負、どちら向きの入力がされたかを
-1から1の間の数で返します。

デフォルトでは、
左右の軸はHorizontal、上下の軸はVerticalです。

なので、例えば

 float x = Input.GetAxis("Horizontal");
 float y = Input.GetAxis("Vertical");
 Vector3 Direction = new Vector3(x,y,0);

のようにすると、十字キーで入力された方向を取得でき、
前回の、オブジェクトの移動と合わせると、入力した向きに
プレイヤーを動かすことができます。

また、重力から察するにUnityのデフォルトでは
オブジェクトはxz平面にいて、y方向が高さなので、
それにあわせると移動は↓のように書けます。

    void Update () {
        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");      
        Vector3 Direction = new Vector3(x, 0, z)*0.15f;
        GetComponent<Rigidbody>().AddForce(Direction, ForceMode.VelocityChange);
	}

言い忘れましたがベクトルにはスカラーを掛け算できるので
4行目で適当な値を掛け算して移動の速さを調節しています。
なんせそのままだとー1から1のあいだですので、
作っているゲームと合わないこともしばしばあります。

タップ・クリック

タップやクリックですが…
じつはさっきのInput.AnyKeyは、タップやクリックも検知します。

わりとこれでよかったりしますが、特定のものだけ判定したいときは、
UIのボタンなどを使うか、↓のようにEventTriggerを使うといいです。

sawalemounity.hatenablog.com

それでもだめならRayをとばすやり方もあります。
ここ↓とかどうでしょう。

future-software-labo.anyagent.net


あと、マウスの入力は
Inpu.GetMouseButton()でもとれます。

これのすごいところは、左右どちらのクリックか区別できるところです。
()のなかに0,1,2のどれかを引数としてわたすことで判別します。

0が左 1が右 で、2は真ん中のホイールボタンです。 

例えば、左クリックが終わった(指が離れた)瞬間 なら

Input.GetMouseButtonUp(0);

です。


また、Input.touchCountで、何か所タッチされているか取得できます。
これをつかって条件分岐すれば、複数タップの操作も可能です。

switch(Input.toucuCount){
   case(0):
    //タップされていないときの処理
     break;
   case(1):
    //一か所タップされているときの処理
     break;
   case(2):
    //二か所タップされているときの処理
     break;
}

みたいな感じです。


さらに、タップされている座標の取得もできますが…
これは座標の種類の説明がいるので後日書きます。

ずいぶん長くなりましたが、今回はここまでです。

Next

sawalemounity.hatenablog.com

関連
今回のスクリプトの使用
sawalemounity.hatenablog.com

前回
sawalemounity.hatenablog.com

初めてのスクリプト(1)オブジェクトの移動

こんにちは。レモンティーです。

今回から、後回していたスクリプトをみていきましょう。

まずは、オブジェクトの移動です。

オブジェクトを動かすやり方として、今回は
(A)transformを直接いじる
(B)Rigidbodyで力を加えて演算する

の二種類を紹介します。

(A)transformを直接いじる。

ほぼ全てのオブジェクトはTransformコンポーネントがついています。

f:id:sawalemontea:20170805145346p:plain

これですね。

この、positionの値をスクリプトで直接いじることで、
物体を任意の場所に移動できます。

自分(そのスクリプトがアタッチされているオブジェクト)
の今の場所はtransform.positionと書きます。
また、positionの値はVector3型の変数…つまり、
三次元ベクトルとして扱います。

なので例えば、点(0,4,2)に移動させたければ

transform.position = new Vector3(0,4,2);

のように書きます。

Vector3型は足し引きできますので、

X方向に1動かしたいときは

transform.position += new Vector3(1,0,0);

のように書けばOKです。

(おまけ)
最初にほぼと言いましたように、Transformがないやつもあります。
UIはCanvas上にあるのでTransformがありません。
UIは↓のように動かします。
sawalemounity.hatenablog.com

(B)Rigidbodyで動かす

Rigidbodyをアタッチしたオブジェクトには、
スクリプトで、
力を加えたらどうなるか演算させて動かすこともできます。

自分(そのスクリプトがアタッチされているオブジェクト)
に力を加えるには、
GetComponent().AddForce(Vector3 , ForceMode);
を使います。

なので例えば、

GetComponent<Rigidbody>().AddForce(new Vector3(0,1,0), ForceMode.Force);

の場合、Y軸方向に1の大きさの力が加わります。
Vector3の部分で力のベクトルを指定するわけです。
ここは普通、先にVector3型の変数を作っておいて、それを書きます。


ForceModeは加えるベクトルの種類です。
Force   は力
Acceleration は加速度
Impuls   は撃力
VelocityChange は速度   です。

今まで力、力と言ってきましたが、ほかのやつでも当然動きます。


今回はここまでです。
まあ単体で使うものでもないし、これから頻繁に見かけることになります。
次回はさっそくImputと組み合わせて使っていきます。

Next

sawalemounity.hatenablog.com

関連
今回のスクリプトの使用
sawalemounity.hatenablog.com

ビルドとGooglePlayへの公開まとめ

こんにちは。レモンティーです。

今回は、予告どおりビルドと公開について書きたいと思います。


…とはいったものの、じつは下の二つに完璧に書いてありました(゜゜;)
世の中、探してみるものですね笑

ただ、電話番号の国番号とか地味に知らないことがあったので、
二つの記事のしたに補足しておきます。(順番どおりではないかも)


Unityでの操作はこちらです。

indie-du.com


GooglePlayに公開する手順はこちら。

techacademy.jp


(補足1)
公開手順の最後について補足しておくと、

f:id:sawalemontea:20170804172751p:plain

のような画面左の注意マークのところが、未設定事項がある部分になります。
ここをうめていけばOKです。


(補足2)
電話番号についてです。
日本のかたは、頭の0をけして+81をつけてください。

例えば、010-1111-1111 なら、+81-10-1111-1111です。


(補足3)
SDKの場所について
普通には見えない場所にあるみたいです。

f:id:sawalemontea:20170804173723p:plain

の赤丸の欄に直接入力したら見られます。


Next
アップしたアプリの更新について
sawalemounity.hatenablog.com

初めてのUnity(7) ゴール

こんにちは。レモンティーです。

ゴールの作り方だけみたい場合はコチラ↓のほうがいいかもしれません
sawalemounity.hatenablog.com

以下、前回の続きでゴールをつくっていきます。

予告通りゴールを作って、飾り付け以外の基礎は
ひとまずおわります。
ビルドのやり方を次回解説します。

今後は、
アニメーションやUIなどの飾り付けや、
後回しにしていたスクリプト
自作モデルの作成とインポート
について書きたいと思います。

さて、今回の内容に入りましょう。

まずはゴールの作成です。

ちょっとマニアックですが、このシリーズで作っていたのは
遊●王の漫画にでてくるDe●th-Tです。
社長が主人公に復讐するためにつくりあげた
死のテーマパーク…でしたね。
その三番目のアトラクションがこれでした。(壁を忘れていましたが…)

なのでゴールは上の方に作ります。
ブロックに潰されないように、
重なっていくブロックを登って
ゴールを目指すゲームです。まんまですね笑

ただ、壁がないのでゴールは半透明のオブジェクトで表します。
Create>3D Object>Cube で、Cubeをつくります。
↓のようにお好みの形にして、高さ(y座標)を5くらいにします。

f:id:sawalemontea:20170803222256p:plain

そしたら、↓を参考に、少しスケスケにします。
色はお好みで。

sawalemounity.hatenablog.com



こんな感じに

f:id:sawalemontea:20170803222318p:plain

そうしたら、CubeのタグをFinishにします。

そして、例のごとくスクリプト丸コピです。
PlayerMoovを全部消してこれに置き換えてください。

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

public class PlayerMoov : MonoBehaviour {
    int OnFooting = 0;
	// Update is called once per frame
	void Update () {
        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");
        if (Input.GetKeyDown(KeyCode.Space))
        {
            if(OnFooting == 1)
            {
                GetComponent<Rigidbody>().AddForce(Vector3.up*5,ForceMode.Impulse);
                OnFooting = 0;
            }
        }
        Vector3 Direction = new Vector3(x, 0, z)*0.15f;
        GetComponent<Rigidbody>().AddForce(Direction, ForceMode.VelocityChange);
        Direction = Vector3.zero;
        if(transform.position.y <= -10)
        {
            SceneManager.LoadScene("GameOver");
        }
	}

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "GameOver")
        {
            SceneManager.LoadScene("GameOver");
        }

        if(collision.gameObject.tag == "footing")
        {
            OnFooting = 1;
        }

        if(collision.gameObject.tag == "Finish")
        {
            Debug.Log("クリアです!!");
        }
    }
}

これで実行すれば、クリアした時に

f:id:sawalemontea:20170803222336p:plain

みたいにメッセージがでます!
GameOverみたいにシーンを作って飛ばしてもいいですね!

これでひとまずおしまいです。

関連

ビルド
sawalemounity.hatenablog.com

スクリプトシリーズ
sawalemounity.hatenablog.com

sawalemounity.hatenablog.com

前回
sawalemounity.hatenablog.com