質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

415閲覧

Listの処理が上手くいかない

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/10/28 18:02

編集2018/10/28 18:05

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class WG : MonoBehaviour { 6 7 public int suuzi; 8 public int All_suuzi; 9 public GameObject Player; 10 private GameObject G_game; 11 private GameObject GR_game; 12 public GameObject Grass; 13 public GameObject Ground; 14 private List<GameObject> Grasslist = new List<GameObject>(); 15 private List<GameObject> Groundlist = new List<GameObject>(); 16 private List<Vector3> Grasspos2 = new List<Vector3>(); 17 private List<Vector3> Groundpos2 = new List<Vector3>(); 18 private List<Vector3> Movepos = new List<Vector3>(); 19 20 // Use this for initialization 21 void Start() { 22 Object_information(); 23 First_position(); 24 Move_position(); 25 } 26 27 // Update is called once per frame 28 void Update () { 29 if (Input.GetKeyDown("up")) 30 { 31 Move(); 32 } 33 34 } 35 36 void Object_information() 37 { 38 float x = Player.transform.position.x - 25.43f; 39 float y = Player.transform.position.y - 1.352f; 40 41 for (int i = 0; i < All_suuzi; i++) 42 { 43 float seed = Random.Range(0, 5); 44 float w = 1; 45 float h = 1; 46 float px = w / 2f * (x + y); 47 float py = h / 4f * (-x + y); 48 Vector3 pos = new Vector3(px, py, 0); 49 int random = (int)(Mathf.PerlinNoise(px + seed, py + seed) * 10); 50 if (random > 3) 51 { 52 G_game = Instantiate(Grass, pos, Quaternion.identity); 53 G_game.transform.parent = transform; 54 Renderer renderer = G_game.GetComponent<Renderer>(); 55 float posY = G_game.transform.position.y; 56 float height = posY * 100; 57 renderer.sortingOrder -= (int)height; 58 Grasslist.Add(G_game); 59 } 60 else 61 { 62 GR_game = Instantiate(Ground, pos, Quaternion.identity); 63 GR_game.transform.parent = transform; 64 Renderer renderer = GR_game.GetComponent<Renderer>(); 65 float posY = GR_game.transform.position.y; 66 float height = posY * 100; 67 renderer.sortingOrder -= (int)height; 68 Groundlist.Add(GR_game); 69 } 70 x++; 71 if (x >= suuzi) 72 { 73 x = 0; 74 y++; 75 } 76 } 77 } 78 79 void First_position() 80 { 81 float x = Player.transform.position.x - 25.43f; 82 float y = Player.transform.position.y - 1.352f; 83 for (int i = 0; i < 49; i++) 84 { 85 float w = 1; 86 float h = 1; 87 float px = w / 2f * (x + y); 88 float py = h / 4f * (-x + y); 89 Vector3 pos = new Vector3(px, py, 0); 90 Movepos.Add(pos); 91 x++; 92 } 93 } 94 95 void Move_position() 96 { 97 for(int i = 0;i < 49; i++) 98 { 99 float seed = Random.Range(0, 5); 100 float x = Movepos[i].x + 24.5f; 101 float y = Movepos[i].y + 12.25f; 102 Vector3 pos = new Vector3(x, y, 0); 103 int random = (int)(Mathf.PerlinNoise(x + seed, y + seed) * 10); 104 if (random > 3) 105 { 106 Grasspos2.Add(pos); 107 } 108 else 109 { 110 Groundpos2.Add(pos); 111 } 112 } 113 } 114 115 void Move() 116 { 117 for(int j = 0,i = 0; j < Grasslist.Count && i < Grasspos2.Count; j++, i++) 118 { 119 if (Movepos.Contains(Grasslist[j].transform.position)) 120 { 121 Grasslist[j].transform.position = Grasspos2[i]; 122 Renderer renderer = Grasslist[j].GetComponent<Renderer>(); 123 renderer.sortingOrder = 0; 124 float posY = Grasslist[j].transform.position.y; 125 float height = posY * 100; 126 renderer.sortingOrder -= (int)height; 127 } 128 } 129 130 for(int i = 0,j = 0; i < Groundlist.Count && j < Groundpos2.Count; i++, j++) 131 { 132 if (Movepos.Contains(Groundlist[i].transform.position)) 133 { 134 Groundlist[i].transform.position = Groundpos2[j]; 135 Renderer renderer = Groundlist[i].GetComponent<Renderer>(); 136 renderer.sortingOrder = 0; 137 float posY = Groundlist[i].transform.position.y; 138 float height = posY * 100; 139 renderer.sortingOrder -= (int)height; 140 } 141 } 142 } 143 144} 145

イメージ説明

Upボタンを押すと、左端のオブジェクトが、右端に移動するように書いたのですが、なぜか画像のように少しだけオブジェクトが残ってしまい、完全に移動しません。なぜこうなってしまうのかを考えたのですが、分からなかったので質問しました。自分はリストの処理が上手くいっていないのだと考えています。
分かりにくいコードだと思いますが、アドバイスをいただけるとありがたいです。
回答よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Debugで確かめたところ、スクリプトに間違いはありませんでした。
右端の空いている部分は、本来、Groundオブジェクトが入るはずなので、空いていただけでした。

投稿2018/10/28 19:54

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問