左右に移動する床にキャラクターコントローラーで動くプレイヤーが乗ったときに
滑らないようにしたいのですが、どうしても滑ってしまいます。
バージョン:Unity 2019.2.11f1 (64-bit)
左右に動く床には、タグ:MoveFlowerを設定。
プレイヤーにつけたスクリプトは以下
using System.Collections; using System.Collections.Generic; using UnityEngine; public class FALLGUYS_Ctrl_src : MonoBehaviour { const string mvflower_tag = "MoveFlower"; public float speed = 7.0f; //移動する速さ public float rotateSpeed = 3.0f; //回転する速さ public float gravity = 9.8f; //重力の強さ public float jumpPower = 6.0f; //ジャンプのスピード private CharacterController cc; Vector3 direction; //シーソーに乗ったときに使用 public GameObject asimoto; // 床に与える力 [SerializeField] private float power = 1f; Animator anim; bool mvf_f = false; void Start() { cc = GetComponent<CharacterController>(); anim = GetComponent<Animator>(); } void Update() { if (cc.isGrounded) //CharacterControllerが接地している場合の処理 { // 回転 transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed, 0); //キャラクターのローカル空間での方向 direction = transform.transform.forward * Input.GetAxis("Vertical") * speed; //アニメーション if (Input.GetAxis("Vertical") > 0) { //走るアニメーション anim.SetBool("run_f", true); } else { //止まるアニメーション anim.SetBool("run_f", false); } if (Input.GetKeyDown("space")) //スペースキーが押されている場合 { direction.y = jumpPower; //Y方向への速度にジャンプのスピードを代入 //ジャンプアニメーション anim.SetTrigger("jump_f"); } } if (mvf_f == false) { // 下向き重力を加える direction.y -= gravity * Time.deltaTime; // Move関数で移動 cc.Move(direction * Time.deltaTime); } } void OnControllerColliderHit(ControllerColliderHit col) { // rayPositionから下にレイを飛ばし、Blockレイヤーに当たっていたら力を加える if (Physics.Linecast(asimoto.transform.position, asimoto.transform.position + Vector3.down, LayerMask.GetMask("Block"))) { //Debug.Log("addfoce"); col.gameObject.GetComponent<Rigidbody>().AddForceAtPosition(Vector3.down * power, transform.position, ForceMode.Force); } //左右に移動する床に接触した場合 if (col.gameObject.CompareTag(mvflower_tag)) { //左右に移動する床を親オブジェクトに設定し、一緒に移動するようにする transform.SetParent(col.gameObject.transform); mvf_f = true; } } void OnTriggerExit(Collider col) //オブジェクトが離れたとき { //左右に移動する床から離れたときの処理 transform.parent = null; mvf_f = false; } void OnTriggerStay(Collider col) //オブジェクトが触れている間 { //左右に移動する床に触れている間 if (col.gameObject.CompareTag(mvflower_tag)) { //OnControllerColliderHitだけだと左右にあまり動かなかったため mvf_f = true; } } }
プレイヤーが、動く床の子オブジェクトになっていることは確認できています。
キャラクターコントローラーを無効にすると、一緒に動くのですが
その後、なんの動作もできなくなってしまいます。
いろいろ調べたり、試したりしたのですが、どうしてもうまくいきません。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。