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

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

ただいまの
回答率

90.76%

  • C#

    6562questions

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

  • Unity3D

    1177questions

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

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

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 339

jum6948

score 13

前提・実現したいこと

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

発生している問題・エラーメッセージ

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

該当のソースコード

【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を使う以外は、全部変更してもいいです。
ですので、このやり方でないと絶対ダメというわけではありません。

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • MasujimaRyohei

    2017/11/17 04:41 編集

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

    キャンセル

  • jum6948

    2017/11/17 11:57

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

    キャンセル

まだ回答がついていません

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

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C#

    6562questions

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

  • Unity3D

    1177questions

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