###前提・実現したいこと
動く床を作成したのですが、キャラクターが床の移動に合わせて移動してくれません。
また、床はキャラクターが初めて乗った時にに左右に動くようにしたいのですが、乗った瞬間に座標がズレてしまいます。
参考:unityst.jetengine.net/?eid=29
上記のサイトの通り
動く床にプレイヤーが乗ると「子」なるようにプレイヤー側にスクリプトに追加しています。
ヒエラルキー上でもプレイヤーが動く床の「子」になっていることを確認していますが
床の移動に合わせて移動してくれません。(画像参考)
※デバックの関係で走るアニメーションを止めていません
本来着地したらキャラクターは停止状態になります。
動く床からジャンプ等で離れると走る動作に戻る形になります
画像追加
上記の画像はデバック時のものなので改めて追加致します。
動く床に着地したらキャラクターは静止状態のアニメーションに移行します。
(physics material 2D 変更後)
着地してもキャラクターが固定されず
キャラクターが遅れて追従する形になってしまいます。
着地した瞬間動く床が右にズレてしまいます。
ご回答のほどよろしくお願い致します。
###該当のソースコード1
---------動く床側のソース----------- private Rigidbody2D rd2d; private Vector2 defaultpotison; void Start() { rd2d = GetComponent<Rigidbody2D>(); defaultpotison = transform.position; } void Update() { if (rd2d.isKinematic == false) { rd2d.MovePosition(new Vector2(defaultpotison.x + Mathf.PingPong(Time.time, 3), defaultpotison.y)); } } void OnCollisionStay2D(Collision2D col) { if (col.gameObject.tag == "Player") { rd2d.isKinematic = false; } } ``` ###該当のソースコード2
-----------プレイヤー側-----------
void OnCollisionStay2D(Collision2D col)
{
//移動ブロックに乗った時
if(col.gameObject.tag == "Moveblock")
{
playerState = PLAYER_STATE.STOP;
animator.SetBool("isDash", false);
transform.parent = col.gameObject.transform;
}
}
void OnCollisionExit2D(Collision2D col) { //移動ブロックから離れた時
playerState = PLAYER_STATE.MOVE;
animator.SetBool("isDash", true);
if (col.gameObject.tag == "Moveblock")
{
transform.parent = null;
}
}
###プレイヤーの移動処理(追記)
void FixedUpdate()
{
//地面判定
isGroud = rd2D.IsTouching(filter2d);
//プレイヤーステータス switch (playerState) { case PLAYER_STATE.STOP://停止中 moveSpeed = 0; break; case PLAYER_STATE.MOVE://移動中 moveSpeed = SPEED; transform.localScale = new Vector2(0.8f, 0.8f); break; case PLAYER_STATE.DOWN://ヤラレタ moveSpeed = -3f; isAlive = false; break; } //キャラの移動(自動で右移動) //rd2D.velocity = new Vector2(Beltspeed + moveSpeed, rd2D.velocity.y); //デバック用(手動で左右のキー入力で移動) float dx = Input.GetAxis("Horizontal"); rd2D.velocity = new Vector2(Beltspeed + dx * 7, rd2D.velocity.y);
}
Unity 2019.2.8f1 言語:C#
回答1件
あなたの回答
tips
プレビュー