先日、UnityでCharacterControllerを使う場合、オブジェクトを動かすためのMove()とSimpleMove()では基本的にはMove()を使おうという記事を書きました。 そちらのサンプルスクリプトではキャラクターのオブジェクトが前後左右に平行移動するだけでした。 折角だからちゃんと3Dゲームで使える感じの動きにしてみようと思って回転処理を実装したらまたしても沼にハマったため、最終的に出来上がったスクリプトと解説をまとめることにしました。 新年度からの目標は、戦いの記録を積極的にアップして … 3D空間でのカメラ移動と言えば、あるオブジェクトに対して回り込むようにカメラを移動させる必要があるため、メインカメラのGameObjectをそのまま動かすのは面倒です。 ということで、1つ空オブジェクトを作り、その子としてメインカメラを設定します。 ご相談内容マウスホイールを使って、カメラの平行投影(Orthographic)モードでカメラズームを検討しておりますCameraコンポーネントのなかの「Size」の値を調整するのと同時に、カメラのZ(青矢印)方向にも一緒に移動できるように考えております。 ジ説明](28254252abc84a06 ということで、1つ空オブジェクトを作り、その子としてメインカメラを設定します。カメラの位置はゲームや場面に合わせて調整しましょう。, あとは親となる移動用オブジェクトをくるくる回せば、子となっているメインカメラも相対的に移動します。, 当然ながら、作成した空オブジェクトは「視点移動のベースとなるオブジェクト」の位置に移動させる必要があります。大抵はプレイヤーキャラクターが基点になるので、今回もそれに合わせてみます。, 先程のカメラ移動用オブジェクトに対して回転を掛けます。 OculusGoでアプリが作りたくてUnityを勉強中です。 今回はオブジェクトの移動方法の備忘録です。用途としては「OculusGo用のカメラをコントローラーなどで移動させる」際に使うことになると思います。 1:絶対座標での移動方法 Unityのオブジェクトには「Transform」という項目があります。 eulerAnglesはワールド基準による回転情報です。, エディター上の回転の値を、transform.rotation.xのように取得することはできません。 X軸とY軸を同時に回転させた際にZ軸まで回転し、傾いた視点になってしまいます。, > だとすると、Rotateメソッドの引数でSpace.Worldを指定すると、ワールド空間での回転になるので、たぶん期待する回転になると思います。 ここで面倒になるのは下方向に向けた場合で、X軸の角度的には0→360度になるため、Transform.eulerAnglesの値そのままで制限するのは厳しいです。なのでX軸だけちょっと細工を入れます。, 三項演算子で「Transform.eulerAngles.xが180度以上であれば360度減算する」処理を入れます。超ダイレクトな方法ですが、これでX軸の角度が-180~180度の間になり、Mathf.Clamp()での制限が容易になります。, ついでにカメラ視点移動を「マウス右クリック中」のみにしてみました。定数ROTATE_BUTTONで1を指定しておき、Update()内のrotateCmaeraAngle()呼び出し前にifで判定します。, 今日の3Dゲームでは必ずと言っていいほど備わっている「ロックオン」機能です。 だとすると、Rotateメソッドの引数でSpace.Worldを指定すると、ワールド空間での回転になるので、たぶん期待する回転になると思います。デフォルトだとローカル空間です。 移動: クリック&ドラッグでカメラを移動します。 回転: Alt を押したまま、クリック&ドラッグでカメラを現在のピボットポイントを中心に回転します。2D モードのビューは平行投影のため、このオプションは 2D モードでは使用できません。 transform.rotationはQuaternion(四元数)で表現されています。 根本解決にはなりませんが、処理を`FixedUpdate()`内で行うように変えると少しはマシになるかもしれません。 というわけで、グラボのDisplayPort端子にHDMIケーブルを刺そうと頑張ってしまった今日この頃です。パッと見でHDMIと似ていたので「このグラボ2つHDMIあるじゃん!」とか悟ったのが軽率でした。デュアルディスプレイをすべくHDMI対応のモニタを買ったのにこの有様です。 Transform.RotateAround()は指定した点を中心に回転させる機能なので、用途が違うかなと(太陽の周りを回る地球のような動きをさせたいときに使う), > Transform.Rotateで軸がブレたとのことですが、y軸回転させると斜めになっちゃう感じですかね? 三本の平行線が並んだような図形に変化しました! この、三本の平行線が並んだような図形のときは ”遠近法が解除された状態”となっています。 この状態で視点のアングルを変えてGameObjectをみてみま … 「カメラのSize値を元にした目的地」を定めて、そこに徐々に近付ければいいんじゃないですかね?, CamCheck_T1.transform.localPosition = Vector3.Lerp(CamCheck_T1.transform.localPosition, CamCheck_T1.transform.forward * CamCheck_T1.orthographicSize, ZoomSpeed); 解決したいことキャラクターの移動を一枚のスクリプトで行っています、移動の方法はAddForceで上下左右に平行移動させ、これに回転を組み合わせています。移動に関してはこちらの記事を参考にさせていただきました。UnityでRigidBodyのAddForce()に速度制限をつけてすーっと動かして … 最近できた関数かと思いきや、かなり前からあるようです。やはり無知は罪であると思う。, 【2017/10/07 追記】 ・ソースを適当なオブジェクトにAddして使います。 ※CameraはMainCameraを自動取得しています, unityのカメラは縦回転も360°回転させることができるんだけど、上記計算式では0°をまたいだ時にカメラが反転してしまうので、仰角の1°と179°でロックしてそれ以上回転しない様にしています。, 「たのしいさんすう」リリース開始!札幌で働くゲームデザイナーです。プログラマー10年、プランナー10年やっています。メインプランナー4本/ディレクター2本やりました。unityとソシャゲが好き。2児の父親です, 【unity】AnimatorControllerからState(アニメクリップ)を削除する【エディタ拡張】, 【unity】dynamicboneが割り当てられているボーンの一覧を表示&選択できるエディタ拡張【アセット】, 次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。, 【unity】Obi Fluidを使ってみる3:液体を白くする2 別アプローチ【アセット】, 【unity】Obi Fluid part4:リアルなコリジョンは重すぎるという話【アセット】, Twitterでバズったあの リセット用のキーはロックオンと同じ「R」でいきます。, 単に値を設定するだけでは瞬時に回転して味気ないので、iTween.RotateTo()を使用して徐々に変化するようにします。ハッシュのrotationにはtransform.eulerAnglesを指定しましょう。, ちなみにtransform.forwardをiTween.ValueTo()やDOTween.To()等でプレイヤーの値に合わせることでも実現できますが、現在の向きと真反対を向いた際にイージングが上手くいかないので見送りました。, そんなわけで、今更3Dカメラの動かし方についておさらいしてみました! | の範囲で動くようにしました。それに伴いカメラZ移動も、Size値が最小値(1.0f)・最大値(30f)になったと同時に移動ストップを試みました。 がついにリリースされました!(2020/5/9), 今年小学生に上がる娘は少し算数が苦手なので、unityで学習ゲームを作っている。意外にも結構気に入ったようで、早く完成させろと毎日せがまれる #unity #開発 #ゲーミフィケーション pic.twitter.com/8r80o4PbG9, — gamebox (@gamebox7777) February 10, 2020, 「たのしいさんすう」誠意開発中!札幌で働くゲームデザイナーです。プログラマー10年、プランナー10年やっています。メインプランナー4本/ディレクター2本やりました。unityとソシャゲが好き。2児の父親です, yStandard Theme by yosiakatsuki Powered by WordPress, 【Rider】お気に入り/Favoritesウィンドウを開く・追加など【unity】, 【GAS】googleスプレッドシートでガチャプログラム書いてみた(スクリプトあり), 【Unity】Bolt、無償化されるってよ【ビジュアルスクリプティング】 │ エクスプラボ, 【unity】dynamicbone一括設定ツール【アセット】 – gamebox. teratailを一緒に作りたいエンジニア, 「CamCheck_T1.transform.forward * CamCheck_T1.orthographicSize」は, //Sizeが1.0になったのを認識してから、前後を止めたいため、ここでは1.0より大きいにする。. 以下のような感じです。, あとはこれを呼び出す記述をUpdate()内に追加すれば、最低限のものはできます。, このままの場合、左右は問題ありませんが、上下に移動させた際に視点が1回転してしまいます。3Dゲームの多くは上下に対する角度制限がある印象なので、それに習ってみます。 「回転に制限のついたカメラ」を作ります。 仰る通り、本投稿のやり方にRotateAround()は不適当かと思います。 本ブログを閲覧いただいている方には常識レベルかもしれませんが、必要となったパッと書けるようにしたいので、気まぐれと勢いで作ってみました!, 3D空間でのカメラ移動と言えば、あるオブジェクトに対して回り込むようにカメラを移動させる必要があるため、メインカメラのGameObjectをそのまま動かすのは面倒です。 無理やり上下にマウスを動かすと画面が反転してしまいます!, ご指摘ありがとうございます。確かに稀に逆さまになってしまいますね…。 Unityでtransformを変更してオブジェクトを移動させる方法をわかりやすくまとめてみました。よかったら参考にしてください。 マウスによる操作 位置を固定したままカメラの向きを変える ョンをクリックします。そして「3本指でスワイプ」か「2本指または3本指でスワイプ」のどちらかに設定します。, 右マウスボタンをクリックしたままにする。, ビューの移動は、マウスを使いながら. Cameraコンポーネントのなかの「Size」の値を調整するのと同時に、カメラのZ(青矢印)方向にも一緒に移動できるように考えております。, ジ説明](28254252abc84a06444bb766ca827faa.jpeg)81dcd9eec166a7d7709fbdc9b4286436.jpeg), Size値はデフォルトで25f、マイナスの値になるとカメラの向きが反転してしまうため、最小値を1.0f、最大値を30f シーンビューの操作についてご紹介していきます. 0.5ずつずれてしまいます。 //transform.RotateAround()をしようしてメインカメラを回転させる, 【入門】Unityを使ったアプリ開発ができるようになる!Unityの基本からARへの応用まで, 【Déraciné レビュー】PSVR×傑作ADVゲームの評価、魅力、攻略方法まとめ!. 具体的には`rotateCmaeraAngle()`を以下のように修正します。, 【Unity】エディタ拡張でシーンビューからオブジェクトを選択した際の挙動を変えてみたお話, AWSのLambdaへのリクエストがCORSエラーかと思ったらサイズが大きすぎたお話, 【Unity】2DAnimationでboneを入れてSpriteを動かしてみたお話, 【Unity】パラメータ変更するマテリアルをアセットから実行中のインスタンスに変えたお話, 【Unity】AnimationControllerでループするステートから一定確率で別のモーションを実行する方法, アザラシが大好きな山梨県産Webエンジニア。2019年3月よりフリーランスSEとして東京で活動中。自称「Web業界のアザラシ」 [詳細], Unity2019.3でBlenderのImportSettingsが正常に表示されない現象の対処法, 「第2回 1週間でWebサービスを作るイベント(web1week)」に参加しました!, AWSの「Lambda + CloudWatchイベント」でサイトの監視をさせてみたお話, 【Visual Studio2017】VB.NETのインテリセンスをEnterで確定した場合に改行させない方法, 【Unity】体力ゲージの実装方法の紹介 (一瞬で減る緑ゲージ+徐々に減る赤ゲージ). 1 / クリップ 今回は四元数ではなくx,y,zの値で表現されたEulerAnglesなどがあるのでこれを角度制限のフックに使います。, eulerAnglesとlocalEulerAnglesのx,y,zは時計回りに0°~360°の値になっているので180°前後の条件も付けています。, monimoni114514さんは、はてなブログを使っています。あなたもはてなブログをはじめてみませんか?, Powered by Hatena Blog