Unity 2021.3.3f1
3D
脱出ゲームを制作していまして、マウスのホイールの動きによってカメラを動かすようにしています。
transform.positionで動かしていることもあり、壁をすり抜けてしまうので、Rayをカメラの方向に進む分だけ飛ばして
壁に当たったら移動させない という風にしたいのですが、うまくいきません。
■CameraManager.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraManager : MonoBehaviour { //クリックで前に進むで追加 public float speed = 0.1f; // マウスホイールの回転値を格納する変数 private float scroll; //Raycastの当たり判定情報 RaycastHit hitInfo; // Start is called before the first frame update void Start() { Camera.main.transform.position = mainCameraTransforms[1].position; Camera.main.transform.rotation = mainCameraTransforms[1].rotation; } private void Update() { //ホイール操作によるカメラ移動。参考:http://corevale.com/unity/6445 scroll = Input.GetAxis("Mouse ScrollWheel"); // マウスホイールの回転値を変数 scroll に渡す // カメラの前後移動処理 if (scroll > 0 || scroll < 0) { if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hitInfo, scroll * speed)) { Debug.Log("壁!"); } else { //カメラの移動(カメラが向いている方向 forward に変数 scroll を加算する) Camera.main.transform.position += Camera.main.transform.forward * scroll * speed; } } //Rayが出ているかのチェック if (Physics.Raycast(Camera.main.transform.position, -Camera.main.transform.up, out hitInfo, 5.0f)) { Debug.Log("hit");//hitって表示する } } }
マウスのホイールでカメラの前後の移動は問題なくされますが、
壁があるときは、Logに壁!と出すだけで移動させたくないのですが、移動してしまいます。
またRayが出ているか確認するために
//Rayが出ているかのチェック if (Physics.Raycast(Camera.main.transform.position, -Camera.main.transform.up, out hitInfo, 5.0f)) { Debug.Log("hit");//hitって表示する }
をやっていますが、Logにhitとは表示されています。
※よくある、
Debug.DrawRay(transform.position, -transform.up * 5.0f, Color.red);//Raycastを表示する
で、Rayを赤く表示するやつは、なぜだか赤い線が出てこず…こちらも解決できていません…
アドバイスいただけますと幸いです。
よろしくお願いいたします!
Unity には Cinemachine, Chimenachine Collider という「カメラの制御」「カメラが壁をすり抜けるのを防止する機能」が最初からありますよ。
あなたの回答
tips
プレビュー