ramkaの朝ごはんはピーナッツパン

超個人的備忘録です。基本自分のためなので、内容の不備、読みづらさ、つまらなさはご了承ください。

タッチした場所にオブジェクトを生成

タッチしたポジションを、そのまま渡せばいいじゃない
と思っていたら少しつまずきました。

生成はできているけど、表示されない

以下が最終的に動いたソースですが、
タッチ時のポジションをそのままTouchOnに渡すだけではだめで、

position.z = 10f; // Z方向を設定

を行わないと思った通り動きませんでした。

   void Update()
    {
        // 押されているかを判定
        if (Input.touchCount > 0)
        {
            Touch touch = Input.GetTouch(0);
            
            position = touch.position; // 位置情報を取得
            position.z = 10f; // Z方向を設定
            if (touch.phase == TouchPhase.Began)
            {
                // タッチ開始
                TouchOn(Camera.main.ScreenToWorldPoint(position));
            }
            else if (touch.phase == TouchPhase.Moved)
            {
                // タッチ移動
            }
            else if (touch.phase == TouchPhase.Ended)
            {
                // タッチ終了
            }
        }
    }

    public void TouchOn(Vector3 pos)
    {
        GameObject pbl = Instantiate(m_pblObj);
        pbl.transform.localPosition = pos;
    }

UNITYで作ったアプリをAppStoreConnectにアップロードするときにつまづいたこと

普段であればXCODE内でコーディング、ビルド、アップロードが完了するのですが、
Unityでアプリを作った時は少し気をつけないといけないことがありました

【問題1】
アップロードしたのにAppstore Connectに反映されない。

xcodeでビルド、アップロードしたのに、一夜置いても反映されていませんでした。

原因はご丁寧にAppstore connectさんからメールが来ていました。

ITMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability. Learn more (https://developer.apple.com/documentation/uikit/uiwebview).

要はUIWebViewを使わないでねということらしいです

Unityのバージョンが古いといけない模様で、新しいUnityにてビルドしたものであれば大丈夫でした。

qiita.com

【問題2】
archive後、validateにてエラーが発生していました。

Invalid Bundle. You've included the "arm64" value for the UIRequireDeviceCapabilities key in your Xcode project, ~

おたくの作ったアプリ64ビットCPU対応してませんよ?って怒られています。
iOSiPhone5s以降64ビットになっているので、ちゃんと対応するように作ってねー
ってことなのかな

これもUnity側の設定を見直して解決できました。

light11.hatenadiary.com

この後アップロードは完了しましたが、まだ承認依頼はできておらず。

GameManagerを使ったゲームの進行

qiita.com

GameManagerというオブジェクトを作成して、そこにスクリプトをアタッチ

たとえばGameManager.csというスクリプトを作成して、そこにゲームの進行に関わる処理を記載していく。

他のスクリプトからGameManagerのスクリプトを実行しやすいように、
静的なメンバ変数を用意しておく

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

public class GameManager : MonoBehaviour
{
    public static GameManager m_instance;

    public Text m_waveClear; // レベルのテキスト
    public int m_waveLevel; // ウェーブのレベル

    // ゲーム開始時に呼び出される関数
    private void Awake()
    {
        // 他のクラスからプレイヤーを参照できるように
        // static 変数にインスタンス情報を格納する
        m_instance = this;

    }

    // Start is called before the first frame update
    void Start()
    {
        
    }

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

    }

    public void WaveClear()
    {
        // ウェーブクリアオブジェクトを表示
        m_waveClear.gameObject.SetActive(true);
        // 表示文字列を更新
        m_waveClear.text = "WAVE" + m_waveLevel + "CLEAR!";
        // ウェーブレベルをインクリメント
        m_waveLevel++;
    }
}

多次元配列を宣言して使えるまで

いろんな言語を味見するたび思う

インクリメントしかり、ループしかり、なんで書き方揃えないんでしょうね

それほどプログラミングが好きなわけではないのでわかりません

swiftでの多次元配列の宣言は以下のサイトを参考にしました
宣言はです

qiita.com

多次元の配列だよーってだけで、要素数は何個だよーって定義はされていないので、
これでhogehoge[1]なんて指定したら怒られる

appendで必要な分追加する

他にいい方法があるかもしれませんが、今のところわかりません

5×5の二次元配列であれば

var hoge = [[Double]]()        

〜〜〜中略〜〜〜

for cnt in 0..<5 {
    hoge.append([0])
    
    for _ in 0..<4 {
        hoge[Int(cnt)].append(0)
    }
}