Portfolio
受賞作品「Platform」

ゲーム紹介
制作者: 大石(中3)
2Dプラットフォームゲームです。プレイヤーは球体を操作し、障害を避けながらゴールを目指します。シンプルで洗練されたデザインとエフェクトが特徴です。
プレイ動画
面紹介
第1面から第20面まで制作済みで、手応えのあるゲーム体験が楽しめます。ステージが進むにつれて難易度が上がり、後半では高度なプレイスキルが求められます。







プログラミング
ネットなどを調べながら全て生徒が構築しました。
プログラムの一部を紹介いたします。
プログラムの一部を紹介いたします。
●プレイヤーをコントロールするプログラム
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System;
public class Charactar : MonoBehaviour
{
private float speed = 0.12f; //移動スピードの設定
[SerializeField] private float _minY = -4.2f; //Y軸の変域の最小値
[SerializeField] private float _maxY = 4.2f; //Y軸の変域の最大値
[SerializeField] private ParticleSystem particle; //particleにあのパーティクルを追加
//public GameObject Audio_Object; //効果音を取得
[SerializeField] StageControl stageControl; //StageControlをstageControlにしてobject自身をアタッチ
[SerializeField] Touch touch; //Touchをtouchにしてobjectを
public bool isPushed = false; //押されたかを判定するフラグ
public bool isTouch; //触れたときに操作をできなくするフラグ
public AudioClip SE;
public GameObject ob;
void Start()
{
ob.SetActive(false);
isTouch = false;
}
// Update is called once per frame
void Update()
{
if (!isTouch)
{
Vector2 position = transform.position;
if (Input.GetKey(KeyCode.W)) //前
{
position.y += speed;
}
if (Input.GetKey(KeyCode.S))//後ろ
{
position.y -= speed;
}
position.y = Mathf.Clamp(position.y, _minY, _maxY); //上下の移動を制限
transform.position = position; //transform.positionにpositionをいれて移動
}
}
//このオブジェクトが他のオブジェクトと当たったときに呼ばれるメソッド
public void OnTriggerEnter2D(Collider2D other) //別の物体があたったとき
{
if (isPushed) return; //isPushedがtrueならばreturn
if (other.gameObject.CompareTag("Enemy")) // this objectがenemyにあたったとき
{
stageControl.gameOver(); //EnemyにあたったときにgameOverクラスを呼び出す
touch.Stopmove(); //Enemyにあたったときtouchにあるstopmoveを呼び出す
AudioSource.PlayClipAtPoint(SE, new Vector3(0, 0, -10));
isPushed = true; //触れたことにする
particle.Play();
}
if (other.gameObject.CompareTag("Goal")) // this objectがgoalにあたったとき
{
//ゴールしたときに呼び出すclassをここに
stageControl.clearGame(); // stagecontrolのclearGameを呼び出す
isTouch = true;//操作できなくする
}
}
}
●障害物オブジェクトを移動するプログラム
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
public class Touch : MonoBehaviour
{
public float MoveSpeed = 0.1f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
private void FixedUpdate()
{
transform.position -= Vector3.right * MoveSpeed; //左に動いていく
}
public void Stopmove()
{
MoveSpeed = 0; //動きを止める
}
}
●面をコントロールするプログラム
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System;
public class StageControl : MonoBehaviour
{
[SerializeField] private GameObject ClearText; //ClearTextの取得
[SerializeField] private GameObject GameOvertext;//GameOvertextの取得
[SerializeField] private Renderer hi;
Coroutine coroutine; //コルーチンのインスタンス保存用
private void Start()
{
ClearText.SetActive(false); //ClearTextのアクティブをfalseにする
GameOvertext.SetActive(false); // gameOvertextのアクティブをfalseにする
}
//---------------------------------------------------------------Goalに触れたときに呼ばれるメソッド---------------------
public void clearGame()
{
ClearText.SetActive(true); //Clearテキストを表示
Coroutine coroutine = StartCoroutine("DelayMethod", 2.5f); // 2.5fをまってからDelayMethodを読み込む
}
private IEnumerator DelayMethod(float waitTime) //帰ってきたwaitTimeの分をまつ
{
yield return new WaitForSeconds(waitTime); //yieldでIEnumeratorの遅延時間を引数として渡し、その時間待つ
string sceneName = ""; //初期化
//----------------------------------------------------------------ステージの切り替え-------
if (SceneManager.GetActiveScene().name == "1-1")
{
sceneName = "1-2";
}
else if (SceneManager.GetActiveScene().name == "1-2")
{
sceneName = "1-3";
}
else if (SceneManager.GetActiveScene().name == "1-3")
{
sceneName = "1-4";
}
else if (SceneManager.GetActiveScene().name == "1-4")
{
sceneName = "1-5";
}
else if (SceneManager.GetActiveScene().name == "1-5")
{
sceneName = "2-1";
}
else if (SceneManager.GetActiveScene().name == "2-1")
{
sceneName = "2-2";
}
else if (SceneManager.GetActiveScene().name == "2-2")
{
sceneName = "2-3";
}
else if (SceneManager.GetActiveScene().name == "2-3")
{
sceneName = "2-4";
}
else if (SceneManager.GetActiveScene().name == "2-4")
{
sceneName = "2-5";
}
else if (SceneManager.GetActiveScene().name == "2-5")
{
sceneName = "3-1";
}
else if (SceneManager.GetActiveScene().name == "3-1")
{
sceneName = "3-2";
}
else if (SceneManager.GetActiveScene().name == "3-2")
{
sceneName = "3-3";
}
else if (SceneManager.GetActiveScene().name == "3-3")
{
sceneName = "3-4";
}
else if (SceneManager.GetActiveScene().name == "3-4")
{
sceneName = "3-5";
}
else if (SceneManager.GetActiveScene().name == "3-5")
{
sceneName = "4-1";
}
else if (SceneManager.GetActiveScene().name == "4-1")
{
sceneName = "4-2";
}
else if (SceneManager.GetActiveScene().name == "4-2")
{
sceneName = "4-3";
}
else if (SceneManager.GetActiveScene().name == "4-3")
{
sceneName = "4-4";
}
else if (SceneManager.GetActiveScene().name == "4-4")
{
sceneName = "4-5";
}
SceneManager.LoadScene(sceneName); //次のシーンへ
//------------------------------------------------------------------------------------
}
//----------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------enemy触れてgameoverになったときに呼び出されるメソッド
public void gameOver() //gameoverになったときに呼び出されるメソッド
{
GameOvertext.SetActive(true); //GAMEOVERテキストを表示
Coroutine coroutine = StartCoroutine("DelayDeathMethod", 2.5f); //2.5秒待ってからDelayDeathMeathodを読み込む
}
private IEnumerator DelayDeathMethod(float waitTime) //CoroutineのDelayDeathMethodの中の処理
{
hi.enabled = false;
yield return new WaitForSeconds(waitTime); //yieldでIEnumeratorの遅延時間を引数として渡し、その時間待つ
SceneManager.LoadScene(SceneManager.GetActiveScene().name);//現在のシーンを再度読み込み
}
}

DIGILAB edutainment Company
デジラボは、プログラミング教育をはじめとする多彩なSTEAM教育の開発と普及を支援しています。
Copyright © 2025 Digilab. All Rights Reserved.