ねっとぱんだ-プログラミング勉強ブログ-

Webデザイン、プログラミングの勉強ブログ。

【Unity、C#】玉転がしゲーム チュートリアル


unityの日本語チュートリアルで玉転がしゲームを作成しました。
Home · unity3d-jp/FirstTutorial Wiki · GitHub
f:id:p_and_a_fam:20170618123115p:plain

制作時間
2時間

目標

改善点、今後

  • APIを調べて独自の動きやゲーム性を追加していく。
  • マテリアル等、見た目を変えてみる。

コード

Player(玉)の動き

using System.Collections;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
	//speed変数を定義
	public float speed = 10;

	void FixedUpdate ()
	{
		//xとzにキーボードの入力を代入
		float x = Input.GetAxis("Horizontal");
		float z = Input.GetAxis("Vertical");
		//Rigibodyコンポーネントを取得
		Rigidbody rigidbody = GetComponent<Rigidbody>();
		//AddForceというAPIでrigidbodyのxとyに力を加える
		rigidbody.AddForce(x,0,z);
		//キーを押した時の値を大きくして早く動くようにする
		//速さの値を変数化してinspector画面から調整できるようにする
		rigidbody.AddForce(x * speed, 0, z * speed);
	}
}

Playerについていくカメラの動き

using System.Collections;
using UnityEngine;

public class FllowPlayer : MonoBehaviour
{

	//Transformのコンポーネントを持つオブジェクトを参照
	public Transform target;
	//相対距離を取得
	private Vector3 offset;
	void Start ()
	{
		offset = GetComponent<Transform> ().position - target.position;
	}

	void Update ()
	{
		//targetの座標に上で取得した相対距離をプラス
		GetComponent<Transform>().position = target.position + offset;
	}
		
}

触れたら消えるアイテム

using System.Collections;
using UnityEngine;

public class Item : MonoBehaviour {
	//接触した時に呼ばれる関数
	void OnTriggerEnter (Collider hit)
	{
		//もし接触したのがplayerタグだったら
		if (hit.CompareTag ("Player")) {
			//ゲームオブジェクトを排除
			Destroy (gameObject);
		}
	}

}

アイテム数のカウントとゲーム終了の表示

using System.Collections;
using UnityEngine;

public class GameController : MonoBehaviour
{
	//textを取得
	public UnityEngine.UI.Text scoreLabel;
	//WinnerLabelを取得
	public GameObject winnerLabelObject;
	public void Update ()
	{	//Itemタグの全部の数を表示
		int count = GameObject.FindGameObjectsWithTag ("Item").Length;
		//itemの数を代入
		scoreLabel.text = count.ToString ();
		//countが0だったら
		if (count == 0) {
			//winnerlabelobjectを表示する
			winnerLabelObject.SetActive(true);
		}
	}

}

Playerが触れたらリスタートする壁

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

public class DangerWall : MonoBehaviour {
	//接触した時に呼ばれる関数
	void OnCollisionEnter (Collision hit){
		//もしPlayerと接触したら
		if (hit.gameObject.CompareTag ("Player")) {
			//現在のシーンを取得
			int sceneIndex = SceneManager.GetActiveScene().buildIndex;
			//現在のシーンを再読み込み
			SceneManager.LoadScene(sceneIndex);
		}
	}

}