■継承( C#)
- やったこと
- アイテムが回転する動作など、どのアイテムにも共通する処理は基本クラスにした
- アイテムを取ったときの処理は派生クラスで行うようにした
- アイテム取得時の音の処理はアイテムスポーンクラスに行わせることにした(常にHierarchyにいて、且つアイテムクラスが参照するため)。こういった共通処理に手を加えたいときに、基本クラスを修正するだけで良くなった。
- スクリプトについて
■スクリプト(基本クラス)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using System.Collections; | |
public class ItemBehaviour : MonoBehaviour { | |
private SpawnManager spawn; //<! SpawnManagerで設定 | |
protected GameObject manager; | |
// 派生先で処理を拡張する | |
protected virtual void Start () { | |
//HierarchyからManagerを見つける | |
manager = GameObject.FindWithTag("Manager"); | |
} | |
// Update is called once per frame | |
void Update () { | |
//回転の演出 | |
transform.Rotate(Vector3.up, 5, Space.World); | |
} | |
//InstantiateしたSpawnManagerを受け取る | |
public void SetSpawnManager(SpawnManager spaMan){ | |
spawn = spaMan; | |
} | |
void OnTriggerEnter(Collider other){ | |
//Playerタグを持っているか確認 | |
if(other.tag == "Player"){ | |
GetItem (); | |
} | |
} | |
protected virtual void GetItem(){ | |
//対応するスポーンのカウンターを減らす | |
spawn.counter--; | |
//SEを鳴らす | |
spawn.PlaySE(); | |
//このオブジェクトを破壊 | |
Destroy (gameObject); | |
} | |
} |
■スクリプト(派生クラス)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using System.Collections; | |
public class CoinBehaviour : ItemBehaviour { | |
public ParticleSystem parSys; | |
public int score = 10;//<! コインによる獲得スコア | |
private GameObject [] characters = new GameObject[3]; | |
private int gettableIndex = 0;//<! コインを入手できるキャラクターのindex。objectNamesに対応。 | |
private ScoreManager scoreManager; | |
protected override void Start(){ | |
//基本処理の呼び出し | |
base.Start (); | |
//基本クラスで取得済みのmanagerから必要なコンポーネントを取得 | |
scoreManager = manager.GetComponent<ScoreManager>(); | |
//現在のキャラクターの取得 | |
GameObject player = GameObject.FindWithTag("Player"); | |
Transform chaTra = player.transform.Find("Character"); | |
characters[0] = chaTra.Find ("SunnySD").gameObject; | |
characters[1] = chaTra.Find ("LunaSD").gameObject; | |
characters[2] = chaTra.Find ("StarSD").gameObject; | |
//コインを入手できるキャラクターをランダムで決定 | |
gettableIndex = Random.Range (0, characters.Length); | |
//パーティクルの色を変える | |
SetCollor(gettableIndex); | |
} | |
void SetCollor(int index){ | |
//インデックスに応じてパーティクルの色を変更 | |
switch(index){ | |
case 0: | |
parSys.startColor = Color.red; | |
break; | |
case 1: | |
parSys.startColor = Color.white; | |
break; | |
case 2: | |
parSys.startColor = Color.blue; | |
break; | |
} | |
} | |
protected override void GetItem(){ | |
//アクティブならアイテム入手の処理を行う | |
if (characters[gettableIndex].activeSelf) { | |
//基本処理の呼び出し | |
base.GetItem(); | |
//スコアの処理 | |
scoreManager.GetScore(score); | |
} | |
} | |
} |
0 件のコメント:
コメントを投稿