🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2340閲覧

オブジェクトの原点を変更したい

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/01/06 12:10

現状

ダウンロードしたアセットのオブジェクトの原点がずれているためゲームを始めると中心からずれる
(スクリプトでレーンを作っているのでそれに合わせているのだと思う)

実現したいこと

オブジェクトの原点を中心に変えてゲーム初めても中心からずれないようにしたい

コード

unity

1コード 2public class PlayerCotroller : MonoBehaviour 3{ 4 private Vector3 touchStartPos;//タッチされた位置 5 private Vector3 touchEndPos;//離した位置 6 const int MinLane = -2; 7 const int MaxLane = 2; 8 const float LaneWidth = 1.0f; 9 public float gravity = 10.0f; 10 11 CharacterController controller; 12 13 Vector3 moveDirection = Vector3.zero; 14 int targetLane; 15 16 public float speedX; 17 18 19 // Start is called before the first frame update 20 void Start() 21 { 22 controller = GetComponent<CharacterController>(); 23 } 24 25 // Update is called once per frame 26 void Update() 27 { 28 //フリック入力(スマホ用) 29 Flick(); 30 //PC用 31 if (Input.GetKeyDown("right")) MoveToRight(); 32 if (Input.GetKeyDown("left")) MoveToLeft(); 33 34 //X方向は目的のポジションまでの差分の割合で速度計算 35 float ratioX = (targetLane * LaneWidth - transform.position.x) / LaneWidth; 36 moveDirection.x = ratioX * speedX; 37 38 moveDirection.y -= gravity * Time.deltaTime; 39 40 Vector3 gloabalDirection = transform.TransformDirection(moveDirection); 41 controller.Move(gloabalDirection * Time.deltaTime); 42 } 43 44 void Flick() 45 { 46 if (Input.GetKeyDown(KeyCode.Mouse0))//タップされたとき 47 { 48 touchStartPos = new Vector3(Input.mousePosition.x,//タップ位置 49 Input.mousePosition.y, Input.mousePosition.z); 50 } 51 if (Input.GetKeyUp(KeyCode.Mouse0))//離されたとき 52 { 53 touchEndPos = new Vector3(Input.mousePosition.x, 54 Input.mousePosition.y, Input.mousePosition.z);//離した位置 55 GetDirection(); 56 } 57 } 58 59 void GetDirection() 60 { 61 float directionX = touchEndPos.x - touchStartPos.x;//x距離 62 float directionY = touchEndPos.y - touchStartPos.y;//y距離 63 string Direction; 64 65 if (Mathf.Abs(directionY) < Mathf.Abs(directionX)) 66 { 67 if (30 < directionX) 68 { 69 //右フリック 70 Direction = "right"; 71 } else if (-30 > directionX) 72 { 73 //左フリック 74 Direction = "left"; 75 } 76 else 77 { 78 //タッチ 79 Direction = "touch"; 80 } 81 82 switch (Direction) 83 { 84 case "right": 85 MoveToRight(); 86 break; 87 case "left": 88 MoveToLeft(); 89 break; 90 case "touch": 91 break; 92 } 93 } 94 } 95 public void MoveToRight() 96 { 97 if (controller.isGrounded && targetLane < MaxLane) targetLane+=2; 98 } 99 public void MoveToLeft() 100 { 101 if (controller.isGrounded && targetLane > MinLane) targetLane-=2; 102 } 103}

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

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

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

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

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

rsu

2020/01/06 23:31

スクショとかあります? どのようなズレですか?
退会済みユーザー

退会済みユーザー

2020/01/07 01:48

スクショがなぜか入れれないのですが キャラがいて右前のほうにピボットがある感じです
rsu

2020/01/07 01:56

そのキャラの親子関係を見て頂けますか? GameObject(親) L キャラ になっていたらそれが原因のような気がします.
退会済みユーザー

退会済みユーザー

2020/01/07 01:59

車なのですが子はタイヤで本体の車体を見てもLキャラとはわからないです
rsu

2020/01/07 02:02

車の一番上の親は車体ですか?
退会済みユーザー

退会済みユーザー

2020/01/07 02:02

ねっとではぶれんだーに入れて治すと書いてたのですがunity側ではpivotの位置は変えれないんでしょうか
退会済みユーザー

退会済みユーザー

2020/01/07 02:03

上が車体子がタイヤです
rsu

2020/01/07 02:09

1.ブレンダーでオブジェクトを中心に動かす. 2.新しい空のオブジェクト(Create Empty)を作り,それに車を入れて空のオブジェクトの中心に合うように車の位置をかえて,今までの車体を空のオブジェクトにかえる. のどっちかで出来ると思います.
退会済みユーザー

退会済みユーザー

2020/01/07 02:12

2番目のを最初に試したのですがキャラクターコントローラと上記のスクリプトを空のオブジェクトにアタッチすると車が動かなかったんです 空に入れて車にアタッチするとまたずれてしまいました
guest

回答1

0

ベストアンサー

Blenderでオブジェクトを開き,Blenderの空間の中心にオブジェクトを移動させればいいと思います.

投稿2020/01/07 02:14

rsu

総合スコア75

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

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

退会済みユーザー

退会済みユーザー

2020/01/07 02:16

やはりそうですよねたくさん種類があるのでずれてないアセットを探します 回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問