前提・実現したいこと
Unityで横スクロールの2Dアクションゲームを作成しています。
プレイヤーは空中を浮遊させたいのでRigidBody2DのBodyTypeをkinematicにしています。
また床も重力のせいで下に落ちないようにkinematicにしています。
プレイヤーは矢印キーで上下左右に動くように設定し、床と接触したときにプレイヤーの色が青になるようにCollisionモードのOnCollisionStay2Dで制御しようと試みたのですが上手くいかず、色が変わりません。
ちなみにプレイヤーと床両方にPolygon collider 2Dをアタッチして、IsTriggerの項目にチェックは入れていません。そして、プレイヤーをkinematicからdynamicに変更すると上手くいって青になります。
どうしたらkinematicのまま青に変えることができるでしょうか。
教えていただけたら嬉しいです。
発生している問題・エラーメッセージ
void OnCollisionStay2D(Collision2D collision)の中身が実行されていない。
プレイヤーが床を無視して移動してしまう。
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.SceneManagement; 5 6public class PlayerController : MonoBehaviour 7{ 8 Rigidbody2D rigid2D; 9 10 // Start is called before the first frame update 11 void Start() 12 { 13 this.rigid2D = GetComponent<Rigidbody2D>(); 14 } 15 // Update is called once per frame 16 void Update() 17 { 18 19 //左右移動 20 int key = 0; 21 if(Input.GetKey(KeyCode.LeftArrow)) { 22 key = -1; 23 transform.Translate(-0.1f, 0.0f, 0.0f); 24 } 25 if(Input.GetKey(KeyCode.RightArrow)) { 26 key = 1; 27 transform.Translate(0.1f, 0.0f, 0.0f); 28 } 29 if(Input.GetKey(KeyCode.UpArrow)) { 30 transform.Translate(0.0f, 0.1f, 0.0f); 31 } 32 if(Input.GetKey(KeyCode.DownArrow)) { 33 transform.Translate(0.0f, -0.1f, 0.0f); 34 } 35 //キャラの反転 36 if(key != 0){ 37 transform.localScale = new Vector3(-key, 1, 2) / 2; 38 } 39 40 //画面外に落下したとき 41 if(transform.position.y < -10){ 42 SceneManager.LoadScene("GameScene"); 43 } 44 } 45 46 void OnCollisionStay2D(Collision2D collision) 47 { 48 if(collision.gameObject.name == "Floor"){ 49 GetComponent<Renderer>().material.color = Color.blue; 50 } 51 }
試したこと
補足情報(FW/ツールのバージョンなど)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/20 07:02