[過去ログ]
UnityでC#勉強してMMO作たいけどどうする!?(^^ [無断転載禁止]©2ch.net (1002レス)
UnityでC#勉強してMMO作たいけどどうする!?(^^ [無断転載禁止]©2ch.net http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
209: 名前は開発中のものです。 [sage] 2017/09/06(水) 20:57:31.72 ID:zgtqawfd ボッキングくん 起きていても寝ていても元気よく返事をしたまえ http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/209
211: 名前は開発中のものです。 [sage] 2017/09/06(水) 21:07:34.67 ID:zgtqawfd うむ、俺の元気がなくなった ではさっそくだが 作業していただこう ソースの整理である http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/211
212: 名前は開発中のものです。 [sage] 2017/09/06(水) 21:08:23.62 ID:zgtqawfd あ、作業前にバックアップしたまえ ■ItemTest.cs 消す public ItemData ItemData; [SerializeField] Public int ID; //publicを消す ■ItemSlot.cs ItemManager itemManager; static つける Sprite[] itemIcon; staticつける 
static public void setItemIcon(Sprite[] icons){ staticつけて引数名修正 itemIcon = icons; 引数名直してとthis.を消す } 
static public void setItemManager(ItemManager im){ staticつけて引数名修正 itemManager = im; } http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/212
213: 名前は開発中のものです。 [sage] 2017/09/06(水) 21:12:38.97 ID:zgtqawfd ■Playerbokking.cs 以下不要になったので削除 private List<int> itemIDs = new List<int>(); public List<int> getItemIDs() { return itemIDs; } ここまで if (dis < AttackRange) { int IDちんこ = target.GetComponent<ItemTest>().アイテムIDかえす(); itemIDs.Add(IDちんこ); この行削除 int アイテム取得 = target.GetComponent<ItemTest>().ID; この行削除 itemManager.setItem(IDちんこ); 引数直す Destroy(target); } public void アイテム返すメソッド() { int IDちんこ = target.GetComponent<ItemTest>().アイテムIDかえす(); itemIDs.Add(IDちんこ); この行削除 } http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/213
214: 名前は開発中のものです。 [sage] 2017/09/06(水) 21:14:01.97 ID:zgtqawfd ■ItemManager.cs Start内を下記に直す textures = Resources.LoadAll<Sprite>("ItemTityPotions"); Slots = GameObject.Find("Slots"); bokking = GameObject.Find("Ethan").GetComponent<Playerbokking>(); GameObject slotPrefab = (GameObject)Resources.Load("itemSlotPrefab"); ItemSlot.setItemIcon (textures); ItemSlot.setItemManager (this); for (int i = 0; i < 100; i++) { GameObject slot = Instantiate(slotPrefab); slot.transform.SetParent(Slots.transform); ItemSlot itemSlot = slot.GetComponent<ItemSlot> (); itemSlotList.Add(itemSlot); } 終わり http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/214
215: 名前は開発中のものです。 [sage] 2017/09/06(水) 21:22:39.29 ID:zgtqawfd 何をしているかというと インベントリ関連の不要になったコードの削除と 効率悪い処理を直している これ終わったらインベントリ処理の説明をする 説明理解して消化できれば アイテムの配置換えはヒントぐらいでできるであろう http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/215
217: 名前は開発中のものです。 [sage] 2017/09/06(水) 21:29:00.20 ID:zgtqawfd はやっ ちゃんとうごくかね? http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/217
219: 名前は開発中のものです。 [sage] 2017/09/06(水) 21:31:50.30 ID:zgtqawfd さよか では説明 まず、フィールド上に配置されるアイテムのスクリプト itemTest.csだっけ? この中身をみる 見た目はともかく、宣言されてるのはIDだけだな? ここにはexcelで作ったデータとか一切ない IDのみ 魂の器は空っぽなのよ http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/219
220: 名前は開発中のものです。 [sage] 2017/09/06(水) 21:34:42.87 ID:zgtqawfd 次に Playerbokking.csの アイテム取得処理をみる else if(targetTag == "Item") { Vector3 Apos = transform.position; //このスクリプトの持ち主、つまりplayerの座標 Vector3 Bpos = target.transform.position; //targetの座標 float dis = Vector3.Distance(Apos, Bpos); //距離計算しておく if (dis < AttackRange) { int IDちんこ = target.GetComponent<ItemTest>().アイテムIDかえす(); Debug.Log ("IDちんこ"); itemManager.setItem(IDちんこ); Destroy(target); } 距離が一定以内なら、アイテムをとる、すなわち itemTestのIDもらって、ItemManagerにIDを渡し、destroyする ただこれだけしかしない IDの意味について考えるのはItemManagerであって bokkingはたいしたことはしない http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/220
222: 名前は開発中のものです。 [sage] 2017/09/06(水) 21:38:22.09 ID:zgtqawfd ちょっと寄り道して ItemSlot.cs static ItemManager itemManager; static Sprite[] itemIcon; staticは意味わかるか? http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/222
223: 名前は開発中のものです。 [sage] 2017/09/06(水) 21:38:43.10 ID:zgtqawfd 難しいと思う http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/223
225: 名前は開発中のものです。 [sage] 2017/09/06(水) 21:41:04.24 ID:zgtqawfd というか、文法的には普通のことしかしてない むしろボッキング向けになるべく簡単なコード選んでる ラムダはこのスレッド内で誰か説明してたからあえていれてる http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/225
226: 名前は開発中のものです。 [sage] 2017/09/06(水) 21:42:41.40 ID:zgtqawfd staticはまぁそんな感じ ラムダも含めて猫でも知っているので猫に尋ねたらよろしいな http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/226
228: 名前は開発中のものです。 [sage] 2017/09/06(水) 21:45:36.78 ID:zgtqawfd そんで ItemSlotはインベントリに100個ならべてるイメージのスクリプト public void setId(int id){ img.sprite = itemIcon [id]; this.id = id; } このメソッドが呼ばれると、渡されたIDを保存しつつ itemIconのID番目の画像を取り出して設定している http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/228
230: 名前は開発中のものです。 [sage] 2017/09/06(水) 21:49:52.92 ID:zgtqawfd んでItemManager.cs どうやってIDを処理しているか public void setItem(int id) { int index = itemSlotList.FindIndex(s => s.getId() == 0); itemSlotList [index].setId(id); } PlayerbokkingにまるなげされたIDがここで呼ばれる 何をするかというと、itemSlotのスクリプトのリストを調べて IDが0のものを探すというラムダ ID0が設定されているスロットは要するに「空」 「空」のスロットを探して、このスロットのスクリプトのリストがなんばん目であるか indexに保存している そのindexのスロットに対して、さっきのItemSlot.setidを読んでやる http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/230
231: 名前は開発中のものです。 [sage] 2017/09/06(水) 21:51:23.20 ID:zgtqawfd slotListの初期化とか飛ばして説明しているので 今は理解できないかも あとで初期化も含めて読み直してみるべし 以上で「アイテムがスロットにセットされる」 http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/231
232: 名前は開発中のものです。 [sage] 2017/09/06(水) 21:53:43.76 ID:zgtqawfd 日本語で流れを整理すると playerbokkingがアイテムをクリック アイテムIDを入手してItemMangerに渡す ItemManagerが空きスロットを探して そのスロットにIDと画像をセットする http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/232
234: 名前は開発中のものです。 [sage] 2017/09/06(水) 21:56:31.64 ID:zgtqawfd ちょっと補足すると ItemManagerはitemSlotのスクリプト100個、Startで所有しているので 空きをしらべてIDを渡すことができる itemSlotはSpriteをすべてもっているので指定IDの画像を自分自身にセットできる http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/234
236: 名前は開発中のものです。 [sage] 2017/09/06(水) 22:00:32.30 ID:zgtqawfd 結局のところ IDを渡して、IDに相当する画像セットしてるだけで 回復するとかなんとかまったくここまででてこない あとで自分で流れおいながらコメントつけてみな それで多分わかるようになる http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/236
239: 名前は開発中のものです。 [sage] 2017/09/06(水) 22:02:54.43 ID:zgtqawfd もうちょっとでおわるよ こっからアイテムの使用 さっきまではクリックされたアイテムIDがスロットにセットされるという説明 今度はスロットをクリックして保存されてるIDを使う処理 http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/239
240: 名前は開発中のものです。 [sage] 2017/09/06(水) 22:06:25.13 ID:zgtqawfd スロットの public void OnPointerClick(PointerEventData eventData){ //右クリック対応 if (eventData.button == PointerEventData.InputButton.Right) { //アイテム使用 itemManager.useItem(id); setId(0); //画像をからっぽに } } が右クリックされたときの処理 このメソッドは特殊で public class ItemSlot : MonoBehaviour, IPointerClickHandler { の IPointerClickHandler これがないと機能しない インターフェイスという文法 これがついてると OnPointerClick はクリックされたときの処理の意味になる そんでこれは右クリックなら・・・という意味で if (eventData.button == PointerEventData.InputButton.Right) { ItemManagerにアイテム使用を指示し //アイテム使用 itemManager.useItem(id); 使った以上は、スロットのIDと画像を0に設定している setId(0); //画像をからっぽに http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/240
242: 名前は開発中のものです。 [sage] 2017/09/06(水) 22:13:18.82 ID:zgtqawfd itemManagerは itemManager.useItem(id); を実行するので public void useItem(int id){ funcs [id] (itemData.param[id], bokking); } が呼ばれる ここが一番難しいかも ここは文法的にはデリゲートつて関数を変数に蓄えておいて呼び出すような処理 その応用編で、関数の配列にしてある http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/242
243: 名前は開発中のものです。 [sage] 2017/09/06(水) 22:14:13.22 ID:zgtqawfd そうだなレフトだろうな で、理解できるかはともかく、つづけると このスクリプトの一番下がその配列 ItemFunction[] funcs = { //0番 (itemData, bokking) => { Debug.Log ("なんもないがな"); }, //1番 (itemData, bokking) => { Debug.Log ("HPが" + itemData.HP回復量 + "回復した"); bokking.recoveryHP(itemData.HP回復量); }, (itemData, bokking) => { Debug.Log ("しらんがな"); }, (itemData, bokking) => { Debug.Log ("わからんがな"); } }; このデリゲートの処理で、やっとScriptableObjectにデータを問い合わせて ID1番なら1番のアイテムデータを取り出して使っている 実際の回復処理はPlayerbokkingが処理すべきなので 必要なデータを渡しつつrecoveryHPというPlayerbokkingのメソッドを 作っておいて実行している http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/243
244: 名前は開発中のものです。 [sage] 2017/09/06(水) 22:15:26.74 ID:zgtqawfd ID2番てどんな効果? http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/244
246: 名前は開発中のものです。 [sage] 2017/09/06(水) 22:20:40.49 ID:zgtqawfd なら1番のコードそのままつかえる コピペでも多分動く http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/246
247: 名前は開発中のものです。 [] 2017/09/06(水) 22:21:43.99 ID:zgtqawfd Debug.Log ("しらんがな"); を Debug.Log ("HPが" + itemData.HP回復量 + "回復した"); bokking.recoveryHP(itemData.HP回復量); にかえてやればおそらくそのまま動く http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/247
248: 名前は開発中のものです。 [sage] 2017/09/06(水) 22:22:07.46 ID:zgtqawfd うわあああああああああああああああ ぎゃあああああああああああああ ぐおおおおおおおおおおおおおおおおお http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/248
250: 名前は開発中のものです。 [sage] 2017/09/06(水) 22:24:33.67 ID:zgtqawfd デリゲートうんぬんとかアーキテクチャ的に理解できなくても 以降、4番5番と実装していけばアイテム増やしていくことは ボッキングでもできると思う ただこのコードを書いてるとき せいぜいアイテム数200だろうと思ってこんな風に書いたのだが 2000とかいうぶっとんだアイテムをまじで実装するなら もっと高度というかそれなりの処理をしないと無理 というか2000個もメソッド書くとか意味わからない http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/250
251: 名前は開発中のものです。 [sage] 2017/09/06(水) 22:26:40.17 ID:zgtqawfd あ、そうww なんかおまいはわかりやすいなw ま、ちゃんと前半理解すればアイテム配置換えもできるよ そいじゃーな http://mevius.5ch.net/test/read.cgi/gamedev/1504200394/251
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.027s