Unity2D
全体プログラム
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5 6public class Player : MonoBehaviour { 7 8 public float jumpPower;//Player跳躍力変数 9 public float DestroyTsumikiTimer;//積み木削除時間計測用変数 10 public GameObject tsumikiPrefabs;//積み木Prefabs格納 11 public Vector2 tsumikiGeneratePosition= new Vector2();//積み木生成位置 12 13 private Rigidbody2D rg2d;//コンポーネント取得用変数 14 public float speed ; 15 private float moveX; 16 private float moveY; 17 private Rigidbody2D rb; 18 // Use this for initialization 19 void Start() 20 { 21 rb = GetComponent<Rigidbody2D>(); 22 } 23 24 private void Update() 25 { 26 moveX = Input.GetAxis("Horizontal") * speed; 27 //移動時左右反転 28 Vector3 scale = transform.localScale; 29 if(moveX >= 0) 30 { 31 scale.x = -4;//右向き 32 } 33 else 34 { 35 scale.x = 4;//左向き 36 } 37 transform.localScale = scale; 38 39 moveY = Input.GetAxis("Vertical") * speed; 40 Vector3 direction = new Vector2(moveX, 0); 41 } 42 43 private void FixedUpdate() 44 { 45 rb.velocity = new Vector3(moveX, 0); 46 //関数呼び出し 47 tsumiki(); 48 49 } 50 private void tsumiki() 51 { 52 var P_pos = transform.localPosition.x; 53 54 // Spaceキーを入力されたら、積み木Prefabを複製する。 55 if (Input.GetKeyDown(KeyCode.Space)) 56 { 57 Vector2 position = transform.position + transform.up * tsumikiGeneratePosition.y + transform.forward * tsumikiGeneratePosition.x; 58 GameObject tsumikiObj = Instantiate(tsumikiPrefabs, this.transform.localPosition, Quaternion.identity); //積み木Prefabの複製 59 60 61 62 //Spaceキーを入力している間は、Playerと親子関係。 63 if (Input.GetKey(KeyCode.Space)){ 64 65 var Tsumiki_Pos = transform.localPosition;//Player座標取得 66 67 tsumikiObj.transform.parent = GameObject.Find("Player").transform;//積み木Prefabを親子関係に 68 Debug.Log("くっついた!"); 69 70 // Spaceキーを離したときに、親子関係を解除し、ひとつのブロックとして扱う 71 if (Input.GetKeyUp(KeyCode.Space)) 72 { 73 transform.parent = null;//親子関係解除 74 Debug.Log("解除"); 75 } 76 //数秒経つと積み木Objが破棄される。 77 //Destroy(tsumikiObj, DestroyTsumikiTimer);//積み木Destroy and 時間計測 78 } 79 80 } 81 82 } 83} 84
###** わからないこと**
C#
1 public Vector2 tsumikiGeneratePosition= new Vector2();
と宣言し、Inspector側で(1,0)と入れた。が、反映されずPlayerの中心部分に生成されたこと。
C#
1 moveX = Input.GetAxis("Horizontal") * speed; 2 //移動時左右反転 3 Vector3 scale = transform.localScale; 4 if(moveX >= 0) 5 { 6 scale.x = -4;//右向き 7 } 8 else 9 { 10 scale.x = 4;//左向き 11 } 12 transform.localScale = scale; 13
ここでSpriteの反転の処理を入れたが、入力の後に強制的に最初の向きに変わってしまう
C#
1 private void tsumiki() 2 { 3 var P_pos = transform.localPosition.x; 4 5 // Spaceキーを入力されたら、積み木Prefabを複製する。 6 if (Input.GetKeyDown(KeyCode.Space)) 7 { 8 Vector2 position = transform.position + transform.up * tsumikiGeneratePosition.y + transform.forward * tsumikiGeneratePosition.x; 9 GameObject tsumikiObj = Instantiate(tsumikiPrefabs, this.transform.localPosition, Quaternion.identity); //積み木Prefabの複製 10 11 12 13 //Spaceキーを入力している間は、Playerと親子関係。 14 if (Input.GetKey(KeyCode.Space)){ 15 16 var Tsumiki_Pos = transform.localPosition;//Player座標取得 17 18 tsumikiObj.transform.parent = GameObject.Find("Player").transform;//積み木Prefabを親子関係に 19 Debug.Log("くっついた!"); 20 21 // Spaceキーを離したときに、親子関係を解除し、ひとつのブロックとして扱う 22 if (Input.GetKeyUp(KeyCode.Space)) 23 { 24 transform.parent = null;//親子関係解除 25 Debug.Log("解除"); 26 } 27 //数秒経つと積み木Objが破棄される。 28 //Destroy(tsumikiObj, DestroyTsumikiTimer);//積み木Destroy and 時間計測 29 } 30 31 } 32 33 }
複製され、親子関係にするという処理までは通っているのにそこからの、if文が通らない理由
実装したいこと
・Spriteが反転してもそのままにしておきたい。
・複製の先の場所をPlayerの対して正面に出るようにしたい
・親子関係にした後にキーを離したら解除できるようにしたい。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。