Unityでソシャゲを作りたい#02 TapToStart画面を作る
今日はもう遅いのでさっさと作っていきます。
ここでは基本的に画面を呼び出したいときスクリプトから呼び出して、スクリプト側でサイズ調整してくれるところまでをやります。
全く知らない人には参考になるかもしれません。
作り方
まず要素に適当に名前を付けたプレハブを作ります。
TapToStart画面ではタップする用と引継ぎ用と設定用で三つボタンを用意し適当なパネルの中に子要素として配置します。
パネルだけ全画面にするので
こう。
それ以外はサイズはなんでもいいので
この状態にしといてください。
button内のテキストは今回は不要なので消します。
代わりにImage要素に適当な画像を設定しておきます。
フォルダ内に画像を入れてスプライトに設定します。
あとはボタンとパネルのイメージ要素にDDすれば入ります。
次にスクリプトを書きます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TapToStart_script : MonoBehaviour{
public void Set_TapToStart(){
GameObject TTS_BT = GameObject.Find("TTS_BT");
GameObject TTS_hikitsugi_BT = GameObject.Find("TTS_Hikitugi_BT");
GameObject TTS_setting_BT = GameObject.Find("TTS_Setting_BT");
float w = Screen.width;
float h = Screen.height;
TTS_BT.GetComponent<RectTransform>().sizeDelta=new Vector2(w/3f,(w/3f)/2f);
TTS_BT.GetComponent<RectTransform>().localPosition=new Vector2(0f,-h/5f);
TTS_hikitsugi_BT.GetComponent<RectTransform>().sizeDelta=new Vector2(w/6f,w/6f);
TTS_hikitsugi_BT.GetComponent<RectTransform>().localPosition=new Vector2((w*0.9f/2f)-((w/6f)/2f),(h/3f));
TTS_setting_BT.GetComponent<RectTransform>().sizeDelta=new Vector2(w/6f,w/6f);
TTS_setting_BT.GetComponent<RectTransform>().localPosition=new Vector2((w*0.9f/2f)-((w/6f)/2f),(h/3f)-(w/6f));
}
public void Tap(){
Destroy(GameObject.Find("TapToStart_panel(Clone)"));
}
}
画面の縦横幅をScreen.~で取得して要素に代入します。
要素は名前で取るのいかがなものかと思いますが、まぁ楽なのでいいです。
RectTransFormコンポーネントのsizeDeltaで大きさlocalPositionで位置を指定できます。floatなので気を付けて。
こうやって指定すると、画面サイズ変動時にアス比が変わらないようにできたり、高さ変わったときにどこ犠牲にするか選べたりと、面倒ですがいいんじゃないかと思います。
タップしたらこの画面は終了するので、タップさせるボタンのOnclick要素に自身を消す処理を書いたTap()を指定してプレハブは一旦完成です。
ヒエラルキーからプロジェクトのResourceフォルダ内、なければResourceって名前でフォルダを切って中に入れておいてください。
引継ぎ画面やら設定画面やらを作ったらそこを表示するようにOnclickに指定します。
ゲームの進行を管理する用のスクリプトを作っておいて、呼び出すタイミングが来たら、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ConfigDatas{
public string prefabTempPath = "SOtmp/";
}
public class GameManager : MonoBehaviour{
GameObject Canvas;
ConfigDatas c;
void Start(){
c = new ConfigDatas();
Canvas=GameObject.Find("GameBaceCanvas");
GameObject TTS_prefab = (GameObject)Resources.Load(c.prefabTempPath+"TapToStart/TapToStart_panel");
GameObject TTS =Instantiate(TTS_prefab) as GameObject;
TTS.transform.SetParent(Canvas.transform, false);
TTS.GetComponent<TapToStart_script>().Set_TapToStart();
}
}
こうやって呼び出せます。
Resource.Load(ここはあなたのResourceより下の階層のパスを打ちます)
今回はStart関数内で呼んでみてます。
適当にテスト用で入れた背景画像はスマホ壁紙会の王道ショックアイ氏。ボタンも適当ですが後でちゃんと作ればいい話なのでご安心を。
pngとかにすれば透過も行けますので自由度は高めです。
アニメーションがないので殺風景ですがとりあえず20分くらいで作れました。
少し先を見越した話をすると、このレベルならわざわざスクリプト書きまくる必要はないんですが、押したタイミングで通信処理をしたりすることを考えると、逐一関数を挟んだ方が便利なので逐一挟んでます。
今は無駄でも後々役に立つといいね。ハム太郎。
今日は疲れたので寝ます。
おやすみなさい。
この記事が気に入ったらサポートをしてみませんか?