code ソーシャル

Unityアプリcodetips(11)

スポンサーリンク

やっと作成した全てのアプリの分解を終えたので、再度アプリ作成に戻っていきます。

Unityの初歩はだいぶわかってきたので、次のステップとしては、いかに適切なツールを使用できるかが勝負になりそうです。

と言うのも、9×9マスの床を設置するのに、コピーアンドペーストで一つずつ座標を手直しして作成するのと、導入したブラシツールでドラッグするだけで床が適切な位置に配置されていくのでは作業効率が100倍程度異なるからです。

これは知識があるかどうかの話になってくるので、事前に作成方法を検証して、知識ストックを増やしていくのがベストになりそうです。

また、そのあとは複数ツール間でのバグが発生するかと思うので、ツールの働き方の理解と取捨選択が必要になります。自前スクリプトで補完する必要が出てきます。

その後、アプリ動作負荷をいかに減らすかの戦いとなります。

//tips

//Random.Rangeで確率を表現する

Random.Rangeを使った確率の考え方は、Random.Rangeでとりうる範囲を母数にし、変数で分子としたい値を設定。

実際にRandom.Rangeを実行して得た値が分子で設定して得た値以上か以下かで確率結果を表現する。

ここではif(dice <= this.ratio)・・・elseで分岐させ、当たりの場合、ハズレの場合を表現している。

int ratio = 2;

void Update()
{
this.delta += Time.deltaTime;
if(this.delta > this.span)
{
this.delta = 0;
GameObject item;
Int dice = Random.Range(1,11);
if(dice <= this.ratio)
{
item = Instantiate(bombPrefab) as GameObject;
}
else
{
item = Instantiate(applePrefab) as GameObject;
}
float x = Random.Range(-1,2);
float z = Random.Range(-1,2);
item.transform.position = new Vector(x, 4, z)
}
}

//制限時間の表示

制限時間を管理するためには下記のような監督スクリプトGameDirectorを準備する。

public class GameDirector : MonoBehaviour
{
GameObject timerText;
float time = 60.0f;
void Start()
{
this.timerText = GameObject.Find(“Time”);
}
void Update()
{
this.time -= Time.deltaTime;
this.timerText.GetComponent<Text>().text = this.time.ToString(“F1”);
}
}

Findで事前に作ったemptyオブジェクトのアクセスを手に入れ、設定した制限時間からフレームごとの時間Time.deltaTimeを減少させ、最終的に、オブジェクトのtext項目にアクセスし、そこに小数点1位までの残り時間を表示させるようにしてある。

//獲得ポイントの表示

獲得ポイントの表示も、制限時間の表示と似ていて監督スクリプトで管理できる。

オブジェクトを取得し、アクセスをする変数と初期ポイントを宣言しておき、
GameObject pointText;
int point = 0;

リンゴを獲得した場合のポイント加算、ボムを獲得した場合のポイント減率のメソッドを追加する。
public void GetApple()
{
this.point += 100;
}
public void GetBomb()
{
this.point /= 2;
}
ここでpublicとしているのは、カゴとリンゴの当たり判定の際に呼び出される必要があるからである。

void Start()
{
this.pointText = GameObject.Find(“Point”);
}

void Update()
{
this.pointText.GetComponent<Text>().text = this.point.ToString() + ”point”;
}

これらを監督スクリプトに記載した上で、当たり判定のカゴのスクリプトに下記の追加を行う。

public class BasketController : MonoBehaviour
{
GameObject director;

void Start()
{
this.director = GameObject.Find(“GameDirector”);
}

void OnTriggerEnter(Collider other)
{
if(other.gameObject.tag ==“Apple”)
{
this.director.GetComponent<GameDirector>().GetApple();
}
else
{
this.director.GetComponent<GameDirector>().GetBomb();
}
}
}
このように、GameDirectorへのアクセスを確保した後、OnTriggerEnterの中で、監督オブジェクトにアクセスした後、そのオブジェクトにアタッチされているGameDirectorスクリプトに入り、GetApple(),GetBomb()のメソッドを呼び出すようにしている。

//時間経過で難易度を変える

時間経過で難易度を変えたい場合、難易度に関わる要素を先に抜き出す。

今回は落下物の生成時間、落下スピード、爆弾の混入割合を難易度に関わる要素とする。

これらを一つずつ管理するのは大変なのでSetparameterメソッドを作成して、簡単に各要素を編集できるようにしておく。

public void SetParameter(float span, float speed, int ratio)
{
this.span = span;
this.speed = speed;
this.ratio = ratio;
}

SetParameter(0.9f, -0.04f, 3);とすると生成時間0.9秒、落下スピードフレームごとに-0.04、爆弾の割合、10分の3となる。

これを時間の経過の段階ごとに設ければいいので、

void Update()
{
this.time -= Time.deltaTime;

if(this.time < 0)
{
this.time = 0;
this.generator.GetComponent<ItemGenerator>().SetParameter(10000.0f,0,0);
}
else if(0<=this.time&& this.time<5)
{
this.generator.GetComponent<ItemGenerator>().SetParameter(0.9f,-0.04f,3);
}
else if(5<=this.time&& this.time<10)
{
this.generator.GetComponent<ItemGenerator>().SetParameter(0.4f,-0.06f,6);
}
}
などと設定していくことができる。

おまけ:
Unity製のiOSアプリをApple Storeに公開する手順や方法まとめの参考

【2019年】Unity製のiOSアプリをApple Storeに公開する手順や方法まとめ【スクショあり】

https://qiita.com/sea_mountain/items/ab2c631d0785e653be34

Unityのカメラワークの種類

【Unity】ここだけ押さえる! Unityのカメラワーク初級編

Unityでゲームを作りたい part5(カメラの追従と移動制限)

人気の記事

1

コロナによる需要変化 コロナパンデミックの影響で、人々は外に出られなくなり、自宅で過ごす時間が増えました。 この自粛ムードの中、下記のようなビジネスの需要変化が引き起こされています。 【利用者減少】 ...

2

米国レストランの決済時に毎日お世話になっていた「Square」のビジネスモデルについて本日はふれていきたいと思います。 「Square」とは、ネットにつながったモバイル端末と専用のカードリーダーを用意 ...

3

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

4

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

5

ナイキのSNKRSが、なぜこれほどまでに人気なのか?調べてみました。 きっかけは米国での友達との会話。彼は自分のシューズをみせて、「これ20万円もしたんだぜ。」と語ってくれました。 あまり靴に興味がな ...

-code, ソーシャル
-,

Copyright© BUSINESS HACKER , 2020 All Rights Reserved Powered by AFFINGER5.