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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Unity3D

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

解決済

Unity:プレイヤーがterrainをすり抜けてしまい しかもカメラもブレる

削除済ユーザー
削除済ユーザー

総合スコア0

Unity3D

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

1回答

0評価

0クリップ

3878閲覧

投稿2019/04/05 10:56

編集2022/01/12 10:58

Unity3Dでゲームを作っています

ちょうどプレイヤーの操作やカメラ操作が出来上がってきたので 最近terrainを使って地形を作っているのですが
下るときにカメラがブレたりプレイヤーが地形をすり抜けてしまいます

動画で説明した方が早いと思うので YouTubeにあげておきました https://youtu.be/-OoGGfgsopY
こんな感じです
恐らくCharacterControllerやRigitbodyが関係していると思います
ので プレイヤーのインスペクターの画像を置いておきます
イメージ説明
こんな感じです
Rigitbodyはプレイヤーの子オブジェクトであるボーンにつけています

まだUnity初心者なので挙げるべき画像をあげていないかもしれません 不備がありましたらご指摘ください

どなたか分かる方教えて下さい

バージョン

Unity 2018.3.11f1

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

Bongo
Bongo

2019/04/07 04:51

上り坂は問題なさそうなのに下り坂はおかしくなっていますね... PlayerControllerがどうなっているか気になるのですが、コードをご提示いただけるでしょうか?
削除済ユーザー
削除済ユーザー

2019/04/07 13:18 編集

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class PlayerController : MonoBehaviour { float InputHorizontal; float InputVertical; public float MoveSpeed_1 = 2.0f; public float MoveSpeed_2 = 1.0f; public float RotateSpeed = 700.0f; public float gravity = 9.0f; //Animatorを入れる Animator PlayerAnimator; //Rigidbodyを入れる CharacterController PlayerCharacon; //CameraControllerコンポーネントを入れる GameObject CameraCon; Vector3 cameraForward; Vector3 moveForward; // Start is called before the first frame update void Start() { PlayerAnimator = GetComponent<Animator>(); PlayerCharacon = GetComponent<CharacterController>(); CameraCon = GameObject.Find("CameraController"); } // Update is called once per frame void Update() { InputHorizontal = Input.GetAxis("Vertical2"); InputVertical = Input.GetAxis("Horizontal2"); // カメラの方向から、X-Z平面の単位ベクトルを取得 cameraForward = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized; // 方向キーの入力値とカメラの向きから、移動方向を決定 moveForward = cameraForward * InputVertical + Camera.main.transform.right * InputHorizontal; if (CheckGrouded()) { if (InputHorizontal == 0 && InputVertical == 0 && !(Input.GetKey((KeyCode)KeyCode.Joystick2Button14))) { PlayerAnimator.SetBool("ReadyForBullet", false); PlayerAnimator.SetBool("Run", false); PlayerAnimator.SetBool("Idle", true); } else if (Input.GetKey((KeyCode)KeyCode.Joystick2Button14)) { PlayerAnimator.SetBool("Idle", false); PlayerAnimator.SetBool("Run", false); PlayerAnimator.SetBool("ReadyForBullet", true); PlayerAnimator.SetFloat("X", InputHorizontal); PlayerAnimator.SetFloat("Z", InputVertical); Move_2(moveForward); } else if (!(Input.GetKey((KeyCode)KeyCode.Joystick2Button14))) { PlayerAnimator.SetBool("Idle", false); PlayerAnimator.SetBool("ReadyForBullet", false); PlayerAnimator.SetBool("Run", true); //走ってる中はカメラの角度リセット出来ないようにする CameraCon.GetComponent<CameraController>().CameraSet = false; ChangeDirection(moveForward); Move_1(moveForward); } } else { transform.position = new Vector3(transform.position.x,transform.position.y - gravity * Time.deltaTime,transform.position.z); } //落ちたら戻る(多分テスト用) if (transform.position.y < -20) { transform.position = new Vector3(4, 1, 0); } } //移動する関数(早く移動する) void Move_1(Vector3 DistanceToMove) { PlayerCharacon.Move(DistanceToMove * Time.deltaTime * MoveSpeed_1); } //(遅い) void Move_2(Vector3 DistanceToMove) { PlayerCharacon.Move(DistanceToMove * Time.deltaTime * MoveSpeed_2); } //向きを変える関数 void ChangeDirection(Vector3 DirectionToTurn) { //向きたい方角をQuaternion型に直す Quaternion HogeQ = Quaternion.LookRotation(DirectionToTurn); //向きをHogeQに向けてじわ~っと変化させる transform.rotation = Quaternion.RotateTowards(transform.rotation, HogeQ, RotateSpeed * Time.deltaTime); } public bool CheckGrouded() { if (PlayerCharacon.isGrounded) return true; //放つ光線の初期位置と姿勢 //若干身体にめり込ませた位置から発射しないと正しく判定できない時がある var ray = new Ray(this.transform.position + Vector3.up * 0.1f, Vector3.down); //探索距離 var tolerance = 0.25f; //Raycastがhitするかどうかで判定 //地面にのみ衝突するようにレイヤを指定する return Physics.Raycast(ray, tolerance); } // 衝突が合った際に呼ばれる void OnControllerColliderHit(ControllerColliderHit hit) { if (hit.gameObject.tag == "Stopper" && Input.GetKey((KeyCode)KeyCode.Joystick1Button0)) { SceneManager.LoadScene("HuntScene"); } } }
削除済ユーザー
削除済ユーザー

2019/04/07 13:18

そのまんまコピーしてるので分からないところがおっしゃってください コントローラーはSwitchのJoy-Conです

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

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Unity3D

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。