5年後起業することを夢見る、初心者ゲームプログラマーの神楽坂 冬月による同人と気ままな日記ブログです。

スポンサーサイト

--.--.--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

反映!(Unityメモ書き

2017.02.13


クロ ということで、
今回はUnityで複数のオブジェクトをスクリプトで操作
することを書いておこうと思います


前回はスクロールバーを使って
リストを作ったわね
今回はそのリストを選択すると中央の表示が変わるっていうのをやってみるわ
霊夢


魔理沙 ここからプログラムを多用する感じだな
とは言え、独学なので間違いがあったら指摘してほしいな
一応、参考書3冊ぐらい買ってるけど、ほとんど読んでないし


ということで
リストを選択して、真ん中の画面に反映するのをやってみます
詳しくは「続きを読む」からどうぞー
妖夢




クロ まず、
リストを生成します
で、それが下のソースコードになります



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

/// 
/// キャラクターセレクトのスクロール項目を作成する
/// 
public class CharaterSelectScrollViewScript : MonoBehaviour 
{
	///  【外部取得】 スクロールオブジェクト 
	public GameObject ParentScrollView;
	///  キャラリスト  
	private List CharaterList;

	// Use this for initialization
	void Start () 
	{
		GameDataScript GameData = GameDataScript.Instance;

		// 項目を作成する
		for (int n = 0; n < GameData.CharacterNameList.Count; n++)
		{
			// プレハブを取得
			GameObject prefab = (GameObject)Resources.Load("common/SelectNamePanel");
			// プレハブからインスタンスを生成
			GameObject tmpSelectNamePanel = Instantiate(prefab, Vector3.zero, Quaternion.identity);
			tmpSelectNamePanel.transform.SetParent(ParentScrollView.transform);
			tmpSelectNamePanel.transform.localScale = Vector3.one;
			tmpSelectNamePanel.transform.position = Vector3.zero;
			tmpSelectNamePanel.transform.localPosition = new Vector3(0, -50 - (n * 65), 0);
			tmpSelectNamePanel.name = "List" + n.ToString();

			// 子オブジェクトのテキストオブジェクトとを取得
			GameObject childObject = tmpSelectNamePanel.transform.FindChild("NameText").gameObject;
			childObject.GetComponent().text = GameData.CharacterNameList[n];
        }
	}
	
	// Update is called once per frame
	void Update () 
	{
		
	}
}
ゲーム上の生コードよ
単純に「common/SelectNamePanel」を生成して「ParentScrollView」に配置してるだけよ
ParentScrollViewはUnity側でスクロールバーのGameObjectを登録してるわ
霊夢


魔理沙 当然上のソースはスクロールバーのGameObjectに登録するぞ
スクロールバーが表示されるとリストも生成されるようになる
もっといい方法があるのかもしれないけど、冬月はこう作ってる


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

/// 
/// 名前選択ボタンの設定
/// 
public class SelectNamePanelScript : MonoBehaviour
{
	// Use this for initialization
	void Start()
	{

	}

	// Update is called once per frame
	void Update()
	{

	}

	/// 
	/// 選択したときの処理
	/// 
	public void OnClick()
	{
		GameDataScript GameData = GameDataScript.Instance;

		// 子オブジェクトのテキストオブジェクトとを取得
		GameObject childObject = this.transform.FindChild("NameText").gameObject;
		string CharNameText = childObject.GetComponent().text;
		// 名前からキャラクターの番号を取得
		GameData.SelectCharacterNum = GameDataScript.Instance.GetNumberFromName(childObject.GetComponent().text);

		//キャラクターイメージ欄
		GameObject CharacterImagePanel = GameObject.Find("CharacterImagePanel");
		// 子の名前テキスト
		GameObject childCharacterNameText = CharacterImagePanel.transform.FindChild("NameText").gameObject;
		childCharacterNameText.GetComponent().text = CharNameText;
		// 子のステータステキスト
		List statusTextList = new List();
		CharacterDataScript tmpCharacterDataScript = new CharacterDataScript(GameDataScript.Instance.SelectCharacterNum);
		statusTextList = tmpCharacterDataScript.GetStatusTextList();

		GameObject childCharacterStatusText1 = CharacterImagePanel.transform.FindChild("StatusText1").gameObject;
		childCharacterStatusText1.GetComponent().text = statusTextList[0];
		GameObject childCharacterStatusText2 = CharacterImagePanel.transform.FindChild("StatusText2").gameObject;
		childCharacterStatusText2.GetComponent().text = statusTextList[1];
		
        GameObject childCharacterStatusText3 = CharacterImagePanel.transform.FindChild("StatusText3").gameObject;
		childCharacterStatusText3.GetComponent().text = tmpCharacterDataScript.GetAttackStatusText();

		// スキルカード
		GameObject childCharacterSkillText = CharacterImagePanel.transform.FindChild("SkillStatusText").gameObject;
		childCharacterSkillText.GetComponent().text = tmpCharacterDataScript.GetSkillDataText(GameDataScript.Instance.SelectSkillIndex);
    }
}
いきなり本編ですが
リスト側のボタン処理になります
これはPrefabに保存しているボタンオブジェクトに登録します
妖夢


クロ 処理の流れとしては
onClick()関数にクリックされたときに処理されるようにしておき、各GameObjectにデータを投げる
感じになってます


string CharNameText = childObject.GetComponent().text;で
今このリストに表示されている名前(判断するためのもの)を引っ張ってきて
それからこのボタンが何かを判別し処理を分けてるわ
霊夢


魔理沙 肝心なのは
GameObject CharacterImagePanel = GameObject.Find("CharacterImagePanel");これね
Hierarchyから同じ名前のGameObjectを取得するぞ


そしてこうやって
GameObject childCharacterStatusText1 = CharacterImagePanel.transform.FindChild("StatusText1").gameObject;とすれば
子レイヤーのGameObjectも取得できます
妖夢


クロ 子レイヤーはテキストオブジェクトなので
childCharacterStatusText1.GetComponent().text = statusTextList[0]としてテキストの変更を行っています
いちおうこんな感じに作れば一方のオブジェクトから一方を操作することが出来ます




関連記事

コメント
コメントの投稿


管理者にだけ表示を許可する

FC2カウンター
プロフィール

神楽坂 冬月(かぐらざか ふゆつき)

Author:神楽坂 冬月(かぐらざか ふゆつき)
【イベント情報】

2015年08月14日(1日目)
コミックマーケット88に参加します!
【金曜日 東地区 "ソ" ブロック 43a】
です!
東方紅魔烏【ウォーシミュレーション】
妖夢龍剣伝(体験版)【アクション】
の2点を出店予定です
よろしくお願い致します!

-----------------------------------------
2014年12月29日
コミックマーケット87に参加します!
【月曜日 東地区 "ハ" ブロック 50a】
参加してくださった型、ありがとうございます&
お疲れ様でした!

-----------------------------------------

めざせ!業界有名人!ということで新米ゲームプログラマーとして活動しています。
次の段階へ移行!
5年後起業という目標に目指してがんばりますぞ!

バナー2
http://studio-cross.com/
HPも作ってますので、どうぞよろしくお願いします

pixiv
月別アーカイブ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。