20190301のUnityに関する記事は4件です。

【激初心者】知識ほぼゼロUnity~インストールと基本レッスン~

はじめに

Unityを2日前ほどから弄り始めたけど、成果物を見せる相手が
ペットの犬くらいなもので、空虚なものを感じたためにネットに備忘録を残す。
まずはインストール及びネットに転がる基本レッスンをいくつかしたので、
どのサイトが良いかなどを書き残しておく。

インストール

ここからダウンロード出来る。
※Unity Hubを選ぶこと。Hubの方が後々の管理や日本語化がしやすくなる。

色々と選択肢があるけど取り敢えずPersonal版かつデフォルト選択肢を選べばOK。
コンポーネントセレクションで日本語を選んでおくと、後々エディタから日本語化出来る。
足りない追加機能はUnity Hubから簡単にインストール出来るので無問題です。

参考サイト
公式マニュアル
【Unity】Unityエディターを日本語化する方法

まずはブロック崩しを作るところから

下記サイトが非常に分かりやすかった。
超初心者向けUnityチュートリアル「はじめてのUnity」のブロック崩しと同等をC#で
ここで基本的な操作方法の感触を掴めました。

おわりに

今の所先人が作った偉大なる道を後からなぞってるだけなので、
本記事では参考リンクしか無くて申し訳ありません。
現在は勉強のためにマリオライクな2Dゲームを作っているので
それについての記事を書く予定です。
将来的にはElonaとかWizardryみたいなゲームを作りたいなあと。

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

UnityでBluetooth接続したPS4のコントローラ(DUALSHOCK 4)を使う

手元にあったBluetooth対応のコントローラがPS4のコントローラだったのでUnityで動くようにしてみました.
キーボード,USBゲームパッド,iPadを入力としてデモ展示することが多いのですが,今後はPS4コントローラでも良いかも.

とりあえずよく使うESP32やMirageSoloと組み合わせてみたい

2019/03/03追記
Android環境下ではInputManagerの割当が異なるため,Scriptを追加
本当は環境を認識して切り替えるのが良さそう
https://qiita.com/Ubermensch/items/75072ef89249cb3b30e7

環境

Unity 2018.1.3f1
Windows10 Home 64bit
PS4 コントローラ CUH-ZCT2J
Bluetoothのペアリングはこのサイトを参考にしました(https://gacho-info.com/pc-ps4controller/)

参考ページ

https://qiita.com/o_s_t/items/c18edeeee869d42c6eb9
https://qiita.com/nanmo/items/559a58f76dda82323283
https://gacho-info.com/pc-ps4controller/
https://www.jp.playstation.com/accessories/dualshock4/

Unityプロジェクトはこちら(ダウンロードしたら使えると思います)

https://github.com/gupen/CheckPS4Controller

InputManagerの設定

右スティックX軸 → X axis
右スティックY軸 → 3rd axis
左スティックX軸 → 4th axis
左スティックY軸 → 7th axis
R2トリガー → 6th axis
L2トリガー → 5th axis
十字キーX軸 → 8th axis
十字キーy軸 → 9th axis

私がBluetoothで接続してるからなのか,PCの設定によるものなのか分かりませんが,参考にさせて頂いたページ(https://qiita.com/o_s_t/items/c18edeeee869d42c6eb9 )と,私の環境では割当てが少し違う結果となりました.

動作確認用に単純にif文並べたコード↓

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

public class CheckPS4Controller : MonoBehaviour
{

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown("joystick button 0"))
        {
            Debug.Log("□");
        }
        if (Input.GetKeyDown("joystick button 1"))
        {
            Debug.Log("✕");
        }
        if (Input.GetKeyDown("joystick button 2"))
        {
            Debug.Log("○");
        }
        if (Input.GetKeyDown("joystick button 3"))
        {
            Debug.Log("△");
        }
        if (Input.GetKeyDown("joystick button 4"))
        {
            Debug.Log("L1");
        }
        if (Input.GetKeyDown("joystick button 5"))
        {
            Debug.Log("R1");
        }
        if (Input.GetKeyDown("joystick button 6"))
        {
            Debug.Log("L2");
        }
        if (Input.GetKeyDown("joystick button 7"))
        {
            Debug.Log("R2");
        }
        if (Input.GetKeyDown("joystick button 8"))
        {
            Debug.Log("Share");
        }
        if (Input.GetKeyDown("joystick button 9"))
        {
            Debug.Log("Option");
        }
        if (Input.GetKeyDown("joystick button 10"))
        {
            Debug.Log("L3");
        }
        if (Input.GetKeyDown("joystick button 11"))
        {
            Debug.Log("R3");
        }
        if (Input.GetKeyDown("joystick button 12"))
        {
            Debug.Log("PS");
        }
        if (Input.GetKeyDown("joystick button 13"))
        {
            Debug.Log("TouchPad");
        }


        //Left Stick
        //1:→↓
        //-1:←↑
        float LeftStick_X = Input.GetAxis("LeftAnalogStick_X");
        Debug.Log("LeftAnalogStick_X:" + LeftStick_X );
        float LeftStick_Y = Input.GetAxis("LeftAnalogStick_Y");
        Debug.Log("LeftAnalogStick_Y:" + LeftStick_Y);

        //Right Stick
        //1:→↓
        //-1:←↑
        float RightStick_X = Input.GetAxis("RightAnalogStick_X");
        Debug.Log("RightAnalogStick_X:" + RightStick_X );
        float RightStick_Y = Input.GetAxis("RightAnalogStick_Y");
        Debug.Log("RightAnalogStick_Y:" + RightStick_Y);

        //L2|R2Trigger
        //1:Push
        //-1:Release
        float R2Trigger = Input.GetAxis("R2Trigger");
        Debug.Log("R2Trigger:" + R2Trigger);
        float L2Trigger = Input.GetAxis("L2Trigger");
        Debug.Log("L2Trigger:" + L2Trigger);


        //Dpad
        //1:↑→
        //-1:↓←
        float Dpad_X = Input.GetAxis("Dpad_X");
        Debug.Log("Dpad_X:" + Dpad_X);
        float Dpad_Y = Input.GetAxis("Dpad_Y");
        Debug.Log("Dpad_Y:" + Dpad_Y);

    }
}

Android環境下ではInputManagerの割当が異なるため,Scriptを追加

Androidに繋いだときにボタンと動作が対応して無くて困ったが,下記サイトを参考に解決
https://nabesi777.hatenablog.com/entry/2018/10/04/Android%E7%AB%AF%E6%9C%AB%E3%81%A7PS%EF%BC%94%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%82%92%E4%BD%BF%E3%81%86%E9%9A%9B%E3%81%AEUnity%E3%83%9C%E3%82%BF%E3%83%B3

PC向けに設定したInputManagerを流用してAndroid対応しているので,AnalogInputの部分はInputManager名と一致してなくて汚い...

https://github.com/gupen/CheckPS4Controller/blob/for-Android/Assets/CheckPS4Controller_Android.cs

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

public class CheckPS4Controller_Android : MonoBehaviour {

    private GameObject StatusText;
    private GameObject StatusText_Analog;
    private string StatusDigital;

    // Use this for initialization
    void Start()
    {
        StatusText = GameObject.Find("Status");
        StatusText_Analog = GameObject.Find("Status_Analog");
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown("joystick button 0"))
        {
            StatusDigital = "□";
        }
        if (Input.GetKeyDown("joystick button 1"))
        {
            StatusDigital = "✕";
        }
        if (Input.GetKeyDown("joystick button 2"))
        {
            StatusDigital = "△";
        }
        if (Input.GetKeyDown("joystick button 3"))
        {
            StatusDigital = "L1";
        }
        if (Input.GetKeyDown("joystick button 4"))
        {
            StatusDigital = "L2";
        }
        if (Input.GetKeyDown("joystick button 5"))
        {
            StatusDigital = "R2";
        }
        if (Input.GetKeyDown("joystick button 6"))
        {
            StatusDigital = "Share";
        }
        if (Input.GetKeyDown("joystick button 7"))
        {
            StatusDigital = "Option";
        }
        if (Input.GetKeyDown("joystick button 8"))
        {
            StatusDigital = "TouchPad";
        }
        if (Input.GetKeyDown("joystick button 10"))
        {
            StatusDigital = "R3";
        }
        if (Input.GetKeyDown("joystick button 11"))
        {
            StatusDigital = "L3";
        }
        if (Input.GetKeyDown("joystick button 12"))
        {
            StatusDigital = "PS";
        }
        if (Input.GetKeyDown("joystick button 13"))
        {
            StatusDigital = "○";
        }
        if (Input.GetKeyDown("joystick button 14"))
        {
            StatusDigital = "R1";
        }

        StatusText.GetComponent<TextMesh>().text = StatusDigital;


        //Left Stick
        //1:→↓
        //-1:←↑
        float LeftStick_X = Input.GetAxis("LeftAnalogStick_X");
        float LeftStick_Y = Input.GetAxis("A");

        //Right Stick
        //1:→↓
        //-1:←↑
        float RightStick_X = Input.GetAxis("B");
        float RightStick_Y = Input.GetAxis("C");

        //L2|R2Trigger
        //1:Push
        //-1:Release
        float R2Trigger = Input.GetAxis("RightAnalogStick_X");
        float L2Trigger = Input.GetAxis("LeftAnalogStick_Y");


        //Dpad
        //1:↑→
        //-1:↓←
        float Dpad_X = Input.GetAxis("L2Trigger");
        float Dpad_Y = Input.GetAxis("R2Trigger");

        StatusText_Analog.GetComponent<TextMesh>().text =
            "LeftAnalogStick_X:" + LeftStick_X + "\n"
            + "LeftAnalogStick_Y:" + LeftStick_Y + "\n"
            + "RightAnalogStick_X:" + RightStick_X + "\n"
            + "RightAnalogStick_Y:" + RightStick_Y + "\n"
            + "R2Trigger:" + R2Trigger + "\n"
            + "L2Trigger:" + L2Trigger + "\n"
            + "Dpad_X:" + Dpad_X + "\n"
            + "Dpad_Y:" + Dpad_Y;

    }
}

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

unityゲームビューが勝手に拡大される。

問題

unityでスマホアプリ開発を行っていた際、ゲームを実行すると

Scaleが勝手に拡大される。

 

2018.2.12f1から2018.3.6f1に更新した後に起こったという話しや

スマートフォン向けのビルドで起こっていたという話もありました。

 

他に不具合が起こっていた人の記事を見ると2018年6月あたりから2019年3月現在までのものが多くみられました。

unity2018.3あたりからの不具合なのかもしれません。

解決策

unity右上にあるレイアウトを変更する。

 

 

 

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

Android SDK をCLI で管理する(Unity向け)

はじめに

Android SDKをアップデートしなきゃと思ったらCLIを見つけたので使ってみたメモ。UnityでしかAndoroidアプリを作らないのでAndroid Studioは不要、IDEなしで軽くコマンドライン管理できたら嬉しい。

追記:Unity公式ドキュメント:Android environment setup
(shienaさんより情報を頂きました。ありがとうございます)

セットアップ

  1. Android Studioのダウンロードページの下の方「Command line tools only」から環境に合わせてダウンロード
  2. zipを解凍してできたtoolsを適当な場所に配置
  3. tools/bin/sdkmanager.bat(Windowsの場合)がSDK ManagerのCLI。

使い方

sdkmanagerのユーザーガイドより。

リストアップ

インストール済みパッケージ(Installed packages)と利用可能パッケージ(Available packages)をリストアップする。

$ sdkmanager --list

実行するとまず Installed packages、続けて Available packages が表示される。 Available packagesのリストは長いので、だいぶスクロールして戻らないと Installed packagesを確認できない。

インストール

$ sdkmanager パッケージ名

パッケージ名は--list で表示されたPath を書けばOK。スペース区切りで複数指定できる。

アンインストール

$ sdkmanager --uninstall パッケージ名

インストール済みパッケージのアップデート

$ sdkmanager --update

UnityのAndroid SDK設定

パッケージのインストール

UnityでAndroidアプリをビルドするために必要な最低限のパッケージをインストールする。バージョンはビルドターゲットに合わせて必要なものを。2019/03/01 現在の最新バージョンだと最終的こんな感じ。実験用なので、自前のPixel 3だけで動けばいいや、な環境。

$ sdkmanager build-tools;28.0.3 platform-tools platforms;android-28

結果。

$ sdkmanager --list
Installed packages:=====================] 100% Computing updates...
  Path                 | Version | Description                    | Location
  -------              | ------- | -------                        | -------
  build-tools;28.0.3   | 28.0.3  | Android SDK Build-Tools 28.0.3 | build-tools\28.0.3\
  platform-tools       | 28.0.1  | Android SDK Platform-Tools     | platform-tools\
  platforms;android-28 | 6       | Android SDK Platform 28        | platforms\android-28\
  tools                | 26.1.1  | Android SDK Tools 26.1.1       | tools\
(略)

Unity側の設定

Preferences

いつも忘れるのでメモ。Preferences... > External Tools のAndroid SDK 設定には、先程CLI を配置したパスを指定すればOK。つまり指定したパスの直下に以下のディレクトリがあるようにすると、その下をUnityが探してくれる。

build-tools
platform-tools
platforms
tools

Player Settings

Project Settings > Other Settings。Minimum API Level とTarget API Level には先程インストールしたパッケージのバージョンを指定する(実際は先にこっちが決まるはずなので順序が逆かも……)。

まとめ

ひとまずでかいAndroid Studio不要でUnity用にAndroid SDKをコマンドライン管理できるようになった。たぶんすぐ忘れるのでメモとして残しておく。

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