code ソーシャル

Unityアプリcodetips(58)

スポンサーリンク

//tips

//stageselectからtitleへの回帰ボタン

ステージ選択画面からレベルを選択するためのタイトル画面へのシーン移行設定を行う。
Stageselectmanagerに下記のスクリプトを追加し、そのためのボタンも設置する。

public void BackScene()
{

SceneManager.LoadScene("TitleScene");
}

同時にtitleから各種stagelevelへのシーン移動。

//stage6のlevel加算設定

Stage6をクリアした際にレベルの加算を行うためゴール画面での称号を管理しているtitlemanageを編集する。

下記のスクリプトをclearStageNo == 6達成時に実行できるように設定する。

clearlevel = 1;
PlayerPrefs.SetInt("LEVEL", clearlevel);
PlayerPrefs.Save();

その際にint clearlevel = PlayerPrefs.GetInt("LEVEL", 0);を定義することを忘れない。

またきちんと各シーンのゴールのインスペクターのstageNoが設定されているか確認する。

//shareを完了後にpoint増加の方法

現状のnative shareではshareの完了をsns側から受け取る方法がないとのこと。

Share後にpoint加算は出来ないよう。

Shareしたくなるシーンにするしかなさそうである。

https://stackoverflow.com/questions/51291557/how-to-know-if-the-player-shared-my-link-on-a-social-app

//新しいlevelの作成にあたり

新しいlevelの階層の作成にあたり、シーン名を従来の6の延長ではなくlevel2のstage1として21として設定する。

そのためplayerPrefsなどが新たな設定となるだけでなく、ボタンの遷移スクリプトの別途作成、ゴールのスクリプトの別途作成などが必要になる。

外れたボタンへの再設定。ついでにtitle画面への遷移にもloadingを挟んだ。また、playstageのlevelも認識できるようにした。

ゴール・ゲームオーバーからの回帰するレベルの再設定も行なった。

stageselectManager以外は、なるべくシンプルに従来ののスクリプトに加筆する形で完結するようにしている。

<stageselectManager22>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class StageSelectManager22 : MonoBehaviour
{
public GameObject[] stageButtons; //ステージ選択ボタン配列

// 非同期動作で使用するAsyncOperation
private AsyncOperation async;
// シーンロード中に表示するUI画面
[SerializeField]
private GameObject loadUI;
// 読み込み率を表示するスライダー
[SerializeField]
private Slider slider;

void Start()
{
//PlayerPrefs.DeleteAll();

int clearStageNohd = PlayerPrefs.GetInt("CLEARhd", 0); //どのステージまでクリアしているのかをロード(セーブされていなければ「0」)

//ステージボタンを有効化
for (int i = 0; i <= stageButtons.GetUpperBound(0); i++)
{
bool buttonEnable;

if (clearStageNohd < i)
{
buttonEnable = false; //前ステージをクリアしていなければ無効
}
else
{
buttonEnable = true; //前ステージをクリアしていれば有効
}

stageButtons[i].GetComponent<Button>().interactable = buttonEnable; //ボタンの有効/無効を設定
}
}

void Update()
{

}

//ステージ選択ボタンを押した
//public void PushStageSelectButton(int stageNo)

//SceneManager.LoadScene("GameScene" + stageNo); //ゲームシーンへ

public void NextScene(int stageNo)
{
int nowlevel = PlayerPrefs.GetInt("nowLEVEL", 0);
nowlevel = 1;
PlayerPrefs.SetInt("nowLEVEL", nowlevel);
PlayerPrefs.Save();

// ロード画面UIをアクティブにする
loadUI.SetActive(true);

// コルーチンを開始
StartCoroutine("PushStageSelectButton" + stageNo);
}

IEnumerator PushStageSelectButton1()
{
// シーンの読み込みをする
async = SceneManager.LoadSceneAsync("GameScene21");

// 読み込みが終わるまで進捗状況をスライダーの値に反映させる
while (!async.isDone)
{
var progressVal = Mathf.Clamp01(async.progress / 0.9f);
slider.value = progressVal;
yield return null;
}
}

IEnumerator PushStageSelectButton2()
{
// シーンの読み込みをする
async = SceneManager.LoadSceneAsync("GameScene22");

// 読み込みが終わるまで進捗状況をスライダーの値に反映させる
while (!async.isDone)
{
var progressVal = Mathf.Clamp01(async.progress / 0.9f);
slider.value = progressVal;
yield return null;
}
}

IEnumerator PushStageSelectButton3()
{
// シーンの読み込みをする
async = SceneManager.LoadSceneAsync("GameScene23");

// 読み込みが終わるまで進捗状況をスライダーの値に反映させる
while (!async.isDone)
{
var progressVal = Mathf.Clamp01(async.progress / 0.9f);
slider.value = progressVal;
yield return null;
}
}
IEnumerator PushStageSelectButton4()
{
// シーンの読み込みをする
async = SceneManager.LoadSceneAsync("GameScene24");

// 読み込みが終わるまで進捗状況をスライダーの値に反映させる
while (!async.isDone)
{
var progressVal = Mathf.Clamp01(async.progress / 0.9f);
slider.value = progressVal;
yield return null;
}
}
IEnumerator PushStageSelectButton5()
{
// シーンの読み込みをする
async = SceneManager.LoadSceneAsync("GameScene25");

// 読み込みが終わるまで進捗状況をスライダーの値に反映させる
while (!async.isDone)
{
var progressVal = Mathf.Clamp01(async.progress / 0.9f);
slider.value = progressVal;
yield return null;
}
}
IEnumerator PushStageSelectButton6()
{
// シーンの読み込みをする
async = SceneManager.LoadSceneAsync("GameScene26");

// 読み込みが終わるまで進捗状況をスライダーの値に反映させる
while (!async.isDone)
{
var progressVal = Mathf.Clamp01(async.progress / 0.9f);
slider.value = progressVal;
yield return null;
}
}

public void BackScene()
{
// ロード画面UIをアクティブにする
loadUI.SetActive(true);

// コルーチンを開始
StartCoroutine("BackSeneloading");
//SceneManager.LoadScene("TitleScene");
}

IEnumerator BackSeneloading()
{
// シーンの読み込みをする
async = SceneManager.LoadSceneAsync("TitleScene");

// 読み込みが終わるまで進捗状況をスライダーの値に反映させる
while (!async.isDone)
{
var progressVal = Mathf.Clamp01(async.progress / 0.9f);
slider.value = progressVal;
yield return null;
}
}

}
<TitleManage>

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

using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class TitleManage : MonoBehaviour
{
[SerializeField] UnityEngine.UI.Text textbox;
[SerializeField] GameObject item;

void Start()
{
//PlayerPrefs.DeleteAll();

int clearStageNo = PlayerPrefs.GetInt("CLEAR", 0);
int clearStageNohd = PlayerPrefs.GetInt("CLEARhd", 0);//lavelhard

int playstage = PlayerPrefs.GetInt("playstage", 1);
int playstagehd = PlayerPrefs.GetInt("playstagehd", 1);//levelhard

int laststage = PlayerPrefs.GetInt("Last", 0);
int laststagehd = PlayerPrefs.GetInt("Lasthd", 0);//levelhard

int point_num = PlayerPrefs.GetInt("CPoint", 2);

int clearlevel = PlayerPrefs.GetInt("LEVEL", 0);
int nowlevel= PlayerPrefs.GetInt("nowLEVEL", 0);

//Debug.Log("c"+clearStageNo);
//Debug.Log("p" + playstage);
//Debug.Log("l" + laststage);
Debug.Log("LE" + clearlevel);

item.SetActive(false);

if (clearlevel == 0)//leveleasy
{

if (clearStageNo > laststage)
{

//if (clearStageNo == 0) DeleteALLの場合

item.SetActive(true);

if (clearStageNo == 1)
{
textbox.text = "お散歩の達人";

laststage = clearStageNo;
PlayerPrefs.SetInt("Last", laststage);

point_num += 1;
PlayerPrefs.SetInt("CPoint", point_num);
PlayerPrefs.Save();

}

if (clearStageNo == 2)
{
textbox.text = "スキップの達人";

laststage = clearStageNo;
PlayerPrefs.SetInt("Last", laststage);

point_num += 1;
PlayerPrefs.SetInt("CPoint", point_num);
PlayerPrefs.Save();

}

if (clearStageNo == 3)
{
textbox.text = "回転の達人";
laststage = clearStageNo;
PlayerPrefs.SetInt("Last", laststage);

point_num += 1;
PlayerPrefs.SetInt("CPoint", point_num);
PlayerPrefs.Save();

}

if (clearStageNo == 4)
{
textbox.text = "襲歩の達人";
laststage = clearStageNo;
PlayerPrefs.SetInt("Last", laststage);

point_num += 1;
PlayerPrefs.SetInt("CPoint", point_num);
PlayerPrefs.Save();
}

if (clearStageNo == 5)
{
textbox.text = "転身の達人";
laststage = clearStageNo;
PlayerPrefs.SetInt("Last", laststage);

point_num += 1;
PlayerPrefs.SetInt("CPoint", point_num);
PlayerPrefs.Save();
}

if (clearStageNo == 6)
{
textbox.text = "変身の達人";
laststage = clearStageNo;
PlayerPrefs.SetInt("Last", laststage);

point_num += 1;
PlayerPrefs.SetInt("CPoint", point_num);
PlayerPrefs.Save();

clearlevel = 1;
PlayerPrefs.SetInt("LEVEL", clearlevel);
PlayerPrefs.Save();

}

}
else
{
textbox.enabled = false;
}
}

if (clearlevel == 1)//levelhard
{

if (clearStageNohd > laststagehd)
{

//if (clearStageNo == 0) DeleteALLの場合

item.SetActive(true);

if (clearStageNohd == 1)
{
textbox.text = "忍者の卵";

laststagehd = clearStageNohd;
PlayerPrefs.SetInt("Lasthd", laststagehd);

point_num += 1;
PlayerPrefs.SetInt("CPoint", point_num);
PlayerPrefs.Save();

}

if (clearStageNohd == 2)
{
textbox.text = "忍者見習い";

laststagehd = clearStageNohd;
PlayerPrefs.SetInt("Lasthd", laststagehd);

point_num += 1;
PlayerPrefs.SetInt("CPoint", point_num);
PlayerPrefs.Save();

}

if (clearStageNohd == 3)
{
textbox.text = "下忍";
laststagehd = clearStageNohd;
PlayerPrefs.SetInt("Lasthd", laststagehd);

point_num += 1;
PlayerPrefs.SetInt("CPoint", point_num);
PlayerPrefs.Save();

}

if (clearStageNohd == 4)
{
textbox.text = "中忍";
laststagehd = clearStageNohd;
PlayerPrefs.SetInt("Lasthd", laststagehd);

point_num += 1;
PlayerPrefs.SetInt("CPoint", point_num);
PlayerPrefs.Save();
}

if (clearStageNohd == 5)
{
textbox.text = "上忍";
laststagehd = clearStageNohd;
PlayerPrefs.SetInt("Lasthd", laststagehd);

point_num += 1;
PlayerPrefs.SetInt("CPoint", point_num);
PlayerPrefs.Save();
}

if (clearStageNohd == 6)
{
textbox.text = "伝説の忍者";
laststagehd = clearStageNohd;
PlayerPrefs.SetInt("Lasthd", laststagehd);

point_num += 1;
PlayerPrefs.SetInt("CPoint", point_num);
PlayerPrefs.Save();

clearlevel = 1;
PlayerPrefs.SetInt("LEVEL", clearlevel);
PlayerPrefs.Save();

}

}
else
{
textbox.enabled = false;
}

}
}
}

<goalcontroller>

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

public class GoalController : MonoBehaviour
{
[SerializeField] GameObject Fade;

GameObject Player;

public int stageNo;

public int clearlevel;

void Start()
{

this.Player = GameObject.Find("Player");
clearlevel = PlayerPrefs.GetInt("LEVEL", 0);//easy0,hard1,hell2

}

void Update()
{

Vector3 p1 = transform.position;
Vector3 p2 = this.Player.transform.position;

 

if (p1 == p2)
{
Fadeover();

if (Player != null)
{
Invoke("Goal", 1.0f);

}
}

}

void Goal()
{
if (clearlevel == 0)
{
if (PlayerPrefs.GetInt("CLEAR,0") < stageNo)
{
PlayerPrefs.SetInt("CLEAR", stageNo);
}
}

if(clearlevel ==1)
{
if (PlayerPrefs.GetInt("CLEARhd,0") < stageNo)
{
PlayerPrefs.SetInt("CLEARhd", stageNo);
}

}
if (clearlevel == 2)
{
if (PlayerPrefs.GetInt("CLEARhd,0") < stageNo)
{
PlayerPrefs.SetInt("CLEARhl", stageNo);
}

}

SceneManager.LoadScene("Goal");
}
void Fadeover()
{
Fade.SetActive(true);
}

}

<changescene>

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

public class ChangeScene : MonoBehaviour
{

// Use this for initialization
void Start()
{
Invoke("Game", 5.0f);

}

 

void Game()
{
int nowlevel = PlayerPrefs.GetInt("nowLEVEL", 0);

if (nowlevel == 0)
{
SceneManager.LoadScene("StageSelect");
}
if (nowlevel == 1)
{
SceneManager.LoadScene("StageSelecthard");
}
if (nowlevel == 2)
{
SceneManager.LoadScene("StageSelecthell");
}

}
}

<UITEXT>

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

using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class UItext : MonoBehaviour
{
[SerializeField] UnityEngine.UI.Text textbox;

public int playstage;

void Start()
{
//PlayerPrefs.DeleteAll();

int clearStageNo = PlayerPrefs.GetInt("CLEAR", 0); //どのステージまでクリアしているのかをロード(セーブされていなければ「0」)
int clearStageNohd = PlayerPrefs.GetInt("CLEARhd", 0);//lavelhard

int clearlevel = PlayerPrefs.GetInt("LEVEL", 0);

int playstage = PlayerPrefs.GetInt("playstage", 1);//stageボタンクリックで認識ninposスクリプト

if (clearlevel == 0)
{

if (clearStageNo == 0)
{
textbox.text = "称号:" + "お使い" + "\n" + "STAGE" + playstage;

}

if (clearStageNo == 1)
{
textbox.text = "称号:" + "散歩" + "\n" + "STAGE: " + playstage;
}

if (clearStageNo == 2)
{
textbox.text = "称号:" + "スキップ" + "\n" + "STAGE: " + playstage;
}

if (clearStageNo == 3)
{
textbox.text = "称号:" + "ランニング" + "\n" + "STAGE: " + playstage;
}

if (clearStageNo == 4)
{
textbox.text = "称号:" + "ダッシュ" + "\n" + "STAGE: " + playstage;
}

if (clearStageNo == 5)
{
textbox.text = "称号:" + "転身" + "\n" + "STAGE: " + playstage;
}

if (clearStageNo == 6)
{
textbox.text = "称号:" + "変わり身" + "\n" + "STAGE: " + playstage;
}

}
if (clearlevel == 1)
{

if (clearStageNohd == 0)
{
textbox.text = "称号:" + "忍者の卵" + "\n" + "STAGE: 2-" + playstage;

}

if (clearStageNohd == 1)
{
textbox.text = "称号:" + "忍者の卵" + "\n" + "STAGE: 2-" + playstage;
}

if (clearStageNohd == 2)
{
textbox.text = "称号:" + "忍者見習い" + "\n" + "STAGE: 2-" + playstage;
}

if (clearStageNohd == 3)
{
textbox.text = "称号:" + "下忍" + "\n" + "STAGE: 2-" + playstage;
}

if (clearStageNohd == 4)
{
textbox.text = "称号:" + "中忍" + "\n" + "STAGE: 2-" + playstage;
}

if (clearStageNohd == 5)
{
textbox.text = "称号:" + "上忍" + "\n" + "STAGE: 2-" + playstage;
}

if (clearStageNohd == 6)
{
textbox.text = "称号:" + "頭領" + "\n" + "STAGE: 2-" + playstage;
}

}

}
}

人気の記事

1

皆さん、ついに、エアラインでも、サブスクリプションが始まったのはご存じですか? まだ実験段階ですが、ANAが、定額全国住み放題サービスを提供する「ADDress」と組んで、国内線を4回まで定額利用可能 ...

2

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

3

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

4

ついに、noteの月間アクティブユーザー数が4400万人(2020年3月時点)に到達しました。 そもそも、「note」とは、クリエイターが、文章やマンガ、写真、音声を投稿することができ、ユーザーはその ...

5

ボードゲームカフェが1日2回転で儲かるという記事をみつけたので興味を持ち、調べてみました。 まずは、需要がどれくらいあるのか、市場のようすからみていきましょう。 世界最大のボードゲーム市場はドイツで、 ...

-code, ソーシャル
-,

Copyright© BUSINESS HUNTER , 2023 All Rights Reserved Powered by AFFINGER5.