転職を繰り返したサラリーマンの多趣味ブログ

30才未経験でSEに転職した人の多趣味ブログ

【Unity】Prefabからゲームオブジェクトを自動生成する方法

1.GameObjectを作成し、以下スクリプトをアタッチする。

public class Emitter : MonoBehaviour {

// Enemyプレハブを格納する
public GameObject enemyOrigin;

public void createEnemy()
{
    // Enemyを作成する
    GameObject enemy = (GameObject)Instantiate(enemyOrigin, transform.position, Quaternion.identity);

}
}

2.上記のcreateEnemy()メソッドを、以下スクリプトから呼び出す。

public class GameManager : MonoBehaviour {

    // 
    const int RecoSeconds = 10;

    // Time
    public Text time;

    public GameObject emitter;

    private Emitter emitterScript;

    // 秒数
    private int seconds = 0;

	// Use this for initialization
	void Start () {

        emitterScript = emitter.GetComponent<Emitter>();

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

        // 秒数の表示
        time.text = "TIME:" + seconds;

        // secondsが0秒のときにカウントスタート
        if(seconds == 0)
        {
            // コルーチンのスタート
            StartCoroutine(CountTime());

        } 

	}

    IEnumerator CountTime()
    {
    
        seconds = RecoSeconds;

        // Enemyの作成
        emitterScript.createEnemy();

        while (seconds > 0)
        {
            // 1秒待機
            yield return new WaitForSeconds(1.0f);
            seconds--;
        }

    }

}

【Unity】秒数をカウントし、UIに表示する方法

1.GameObjectを作成し、以下のスクリプトをアタッチする

const int RecoSeconds = 10;

// Textオブジェクト
public Text time;

private int seconds = 0;
	
// Update is called once per frame
void Update () {

    // UI
    time.text = "TIME:" + seconds;

    // secondsが0秒のときにカウントスタート
    if(seconds == 0)
    {
        // コルーチンのスタート
        StartCoroutine(CountTime());

    }

}

IEnumerator CountTime()
{
    
    seconds = RecoSeconds;

    while(seconds > 0)
    {
        // 1秒待機
        yield return new WaitForSeconds(1.0f);
        seconds--;
    }

}

2つめのiOSアプリをリリースしようとしたら、4.3リジェクトを食らってしまった話

何より数が大事だと思い、クオリティーは気にせずiOSアプリをガンガンリリースしていこうと思い、さっそく2つめのiOSアプリを審査に出したところ、4.3 Design: Spamなるリジェクトを食らいました。
で、この「4.3 Design: Spam」の内容を調べてみたところ、かなり厄介な問題で。。

4.3 スパム
同一のAppに対して複数のバンドルIDを作成しないでください。特定の場所、スポーツチーム、大学などに向けた異なるバージョンが存在するAppの場合は、単一のAppを提出し、異なるバージョンはApp内課金で提供する方法を検討してください。また、すでに飽和状態のカテゴリにAppを追加することは避けてください。App Storeには、おなら、げっぷ、懐中電灯、カーマ・スートラといったAppが多数あります。App Storeでスパム行為をすると、Developer Programから除名される可能性があります。

引用元:App Store Reviewガイドライン - Apple Developer

 同じようなアプリは出さないでってことらしいです。
今回、審査に出したアプリは、たしかに1つめにリリースしたアプリと見た目酷似してる。って、Unityの3Dオブジェクトをそのまま使ってるだけだし。。

けど、これだと毎回見た目はかなり変えないといけないし、同じようなジャンルのゲームは作れないってことも言える。いや、これはゲーム開発初心者にとって、かなりハードルが高いような。
わざわざ、iOSアプリを作るためだけにdeveloper登録料まで払わせておいて。。もうね、絶望しかないです。うーん、これからどうしよう。。

【Unity】ゲームオブジェクトを自動で動かし、オブジェクトに当たると反射する方法

動かしたいオブジェクトに、Physics Materialをアタッチする。
f:id:uuc1h:20181023113416p:plain
以下スクリプトをアタッチする。

// 移動速度
public float speed = 5.0f;

// Rigidbodyコンポーネント
Rigidbody rb;

// Use this for initialization
void Start () {

    // Rigidbodyコンポーネント取得
    rb = GetComponent<Rigidbody>();

    //右上にボールを動かす
    rb.AddForce((transform.up + transform.right) * speed, ForceMode.VelocityChange);

}

【Unity】衝突時、ゲームオブジェクトを削除する方法

private void OnTriggerEnter(Collider other)
{
        
    // 地面に衝突したら自オブジェクト削除
    if(other.gameObject.tag == "Ground")
    {
        Destroy(gameObject);

    // Playerと衝突したら、自オブジェクトとPlayerオブジェクトを削除
    } else if (other.gameObject.tag == "Player")
    {
        Destroy(gameObject);
        Destroy(other.gameObject);
    }

}

【Unity】自オブジェクトのコンポーネントを取得するスクリプト

GetComponent<コンポーネント名>

// Rigidbodyコンポーネント
Rigidbody rb;

// Use this for initialization
void Start () {

    // Rigidbodyコンポーネントの取得
    rb = GetComponent<Rigidbody>();

}