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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

解決済

1回答

852閲覧

【Unity】 Addforceで動く物(Z軸)にCharacterControllerで動くキャラを乗せて動かしたい

jum6948

総合スコア20

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

0クリップ

投稿2017/11/16 13:08

編集2017/11/21 01:53

###前提・実現したいこと
主人公をキャラクターコントローラーで操作するゲームを作っております。
ソリの上に主人公が乗ったら坂を滑らせたい

###発生している問題・エラーメッセージ
ソリは震えるだけで、前に進みません。
ソリには落下防止用に、コライダーを付けております。
ソリに乗り続けて時間が立つと、斜めになってソリは空に飛んでいってしまいます。
主人公は、ソリから落ちます。

###該当のソースコード
【C#で作っております】

using System.Collections; using System.Collections.Generic; using UnityEngine; public class SoriLog : MonoBehaviour { [Header("移動関係")] public int gravity; //重力強化 public int front; //前に進むスピード Rigidbody rb; //物理属性 public float t; //タイマー public GameObject refObj1; //読み込むオブジェクト1 public GameObject refObj2; //読み込むオブジェクト2 // Use this for initialization void Start () { rb = GetComponent<Rigidbody>(); t = 0; } // Update is called once per frame void Update () { rb.AddForce(Vector3.down * gravity); } void OnTriggerEnter(Collider Collider) { //プレイヤーが触れたらカウンターリセット if (Collider.gameObject.tag == "Player") { t = 0; Debug.Log("tri"); } } void OnTriggerStay(Collider Collider) { //プレイヤーが触れたら if (Collider.gameObject.tag == "Player") { t += Time.deltaTime; //ソリの上に2秒以上乗っていたら if (t > 2f) { transform.position += transform.forward * front * Time.deltaTime; //rb.AddForce(Vector3.forward * front); Debug.Log("ON"); } //ソリの上に1秒いたら if (t > 1f) { refObj1.GetComponent<BoxCollider>().enabled = true; refObj2.GetComponent<BoxCollider>().enabled = true; Debug.Log("VON"); } } } void OnTriggerExit(Collider Collider) { //プレイヤーが離れたら if (Collider.gameObject.tag == "Player") { t += Time.deltaTime; //ソリの上に2秒以上乗っていたら動きは止まる if (t > 2f) { transform.position += transform.forward * 0 * Time.deltaTime; //rb.AddForce(Vector3.forward * front); Debug.Log("Off"); } //ソリの上に1秒いたら if (t > 1f) { refObj1.GetComponent<BoxCollider>().enabled = false; refObj2.GetComponent<BoxCollider>().enabled = false; Debug.Log("VOff"); } } } }

###試したこと
【1】
ソリのコライダーに抵抗が殆ど無いPhysic Materialを付け、AddForceで動かそうとしましたが、思うような動きにはならなかった。(ほとんど動かない)
【2】
AddForceで前に進む力をむちゃくちゃあげて、落下防止用に、後ろに大きい壁型のコライダーをつけて動かす。ソリが、ガタガタ震えるだけで、前には進まない。
【3】
ソリの前にもコライダーをつけて、主人公が前に動けばと思ったがこれも動かない
【4】
Rigidbodyを使うのをうやめて、キャラクターコントローラーにしたところ、ソリっぽい動きにはなったが、主人公の事を無視して遠くまで飛んでいってしまった。
【5】
すり抜け防止に主人公の後ろにでかい壁型のコライダーを設置した所、前に進まずガタガタ震えて動かない。

###補足情報(言語/FW/ツール等のバージョンなど)
【制作環境】
Unity5.6.1f1 personal
win10
MicrosoftVisualStudio

【ソリに割り当てているコンポーネント】
イメージ説明
Rigidbody
BoxCollider
CharacterController
ソリのプログラム

【主人公に割り当てているコンポーネント】
イメージ説明
CharacterController
CapsuleCollider
オーディオソース
その他プログラム

自分で分かる範囲の部分は書いていますが、説明不足だったら申し訳ありません。
また、主人公がCharacterControllerを使う以外は、全部変更してもいいです。
ですので、このやり方でないと絶対ダメというわけではありません。

いつも回答者様には感謝しております。
また、フォローさせていただいている方は皆様優秀なので、質問しているレベルが高すぎて全然お返しできず誠に申し訳なく思います。
いつか自分のプログラム知識が高まって何らかの形で貢献できれば幸いです。
よろしくお願い致します。

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

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

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

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

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

MasujimaRyohei

2017/11/16 19:41 編集

コードは```で囲む また、コンポーネントやGameビューのスクショがあったほうが答えやすいです
jum6948

2017/11/17 02:57

スクリーンショットと、’’’で囲みました。
guest

回答1

0

ベストアンサー

プレーヤーの方をCharacter Controllerを使うのをやめてRigidbodyを使えば普通に外力によって移動させることが出来るようになります。
どうしてもCharacter Controllerを使いたいのであれば、プレーヤー側のOnCollisionStay(Collision c)で

C#

1transform.parent=c.transform; 2GetComponent<CharacterController>().enabled=false;

とすれば良いのではないでしょうか

投稿2018/12/23 00:16

bochan2

総合スコア2050

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問