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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Unity

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

Q&A

解決済

2回答

2169閲覧

座標を強く固定する

1129

総合スコア121

C#

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

Unity

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

0グッド

0クリップ

投稿2017/11/09 11:24

編集2017/11/14 08:44

###前提・実現したいこと
現在シーソーで物を飛ばすゲームを作っています。
しかし、シーソーに重い物体を落とすとシーソーの座標がずれます。
Freeze Positionのおかげで重い物体がシーソーからどくと
すぐに元の位置に戻りますが、絶対にシーソーの座標を変えさせたくないです。

下の画像はシーソーの設定です。
シーソーのプロパティ

###発生している問題・エラーメッセージ
以下のキャプチャの通りです。シーソーにTrail Rendererを付けているので、
座標がずれているのが分かると思います。

前
後
後

###試したこと
以下のスクリプトで、初期の座標に強制移動させましたが効果を確認できませんでした。

C#

1using UnityEngine; 2 3public class ForceStay : MonoBehaviour { 4 5 6 private Vector3 firstPos; 7 private Vector3 currentPos; 8 void Start () { 9 Transform t = GetComponent<Transform> (); 10 firstPos = new Vector3(t.position.x, t.position.y, t.position.z); 11 } 12 13 14 void FixedUpdate () { 15 currentPos = GetComponent<Transform> ().position; 16 if (currentPos != firstPos) { 17 currentPos.Set(firstPos.x, firstPos.y, firstPos.z); 18 } 19 } 20}

###補足情報
Unity 2017.2
シーソー部分はHinge Joint2Dを使っています。

###追記
こんな感じでずれます。

そしてシーソー、地面のインスペクターです。シーソー
地面

###追記2

キャプチャのgifです。
Green Gif

そして一から作った地面、シーソーのインスペクターです。
Ground Inspector

Green Seesaw

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

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

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

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

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

guest

回答2

0

ベストアンサー

currentPos = GetComponent<Transform> ().position;
でとれるのはただのvector3じゃないかな そんな使いかたしたことないからわからんけど
とるならTransformそのものかrigidbody

currentPos = GetComponent<Transform> ().position;
if (currentPos != firstPos) {
currentPos.Set(firstPos.x, firstPos.y, firstPos.z);
}


transform.potision=firstPos ;
の一行にかえればいいと思う

投稿2017/11/09 21:24

編集2017/11/09 21:31
Ans

総合スコア75

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

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

Ans

2017/11/09 21:39

あとHinge Joint2D の支点であるPoint がシーソーの子オブジェクトになってるのも怪しい気がします
Ans

2017/11/09 21:57 編集

やっぱり調べた感じ ヒンジは土台のほうを固定することが大事なようです シーソー側は固定する必要ありません 土台が固定されているはずが親(シーソー)の子オブジェクトにいるせいで動いているのでしょう つまりスクリプトは一切必要ないです
1129

2017/11/09 22:37

今日の5:30pmくらいに試してみます
1129

2017/11/10 08:37

Point の親子関係を解消してみました。 結果、Pointは全く動きませんが、やはりSeesawBarの方は以前と同じように動きました。
1129

2017/11/10 08:44

すいません。 Ans様が最初に提示した方法でかなりSeesawBarのずれを低減できました。 transform.potision=firstPos ; が正解のようです。
Ans

2017/11/11 02:12

自分が2dでも3dでも土台とシーソー部分を設置して物をぶつけて問題ないので微妙にもやもやですが フリーズポジションなしだと0.001とか動きますが フリーズポジションありだと完全に同じ位置にいるはずです そもそもフリーズしてるのに動くのがおかしいです 一度何もないシーンにフリーズ&重力なし土台とフリーズシーソーを作って ヒンジで接続 ものを落とす を試してみるべきです
1129

2017/11/11 08:09

同様のオブジェクトを空のシーンに作ってみましたが、やはりフリーズしてるのに動きました。特に両側に同時に物体を乗せたとき顕著にずれます。
Ans

2017/11/11 08:47

うーん それでは機能の意味がないので何か設定が間違っていると思います pointの固定ができているなら シーソーのインスペクター部分のスクショを張っていただければわかります
Ans

2017/11/11 09:07 編集

というかHinge Joint2D 以前の問題ですね boxcollider2d spriterenderer rigidbody2d のみをつけて freeze position x y をonにしただけのオブジェクトに boxcollider2d spriterenderer rigidbody2d だけつけて一切設定をいじらないオブジェクトをぶつけて  potisionが動くなら 公式に文句言うべきです
1129

2017/11/11 10:01 編集

boxcollider spriterenderer rigidbody2d のみをつけて freeze position x y をonにしただけのオブジェクト に rigidbodyとspriterenderer とboxcollider だけつけたオブジェクトを落とすとシーソーは全く動きませんでした。両側に乗せた場合も同様です。 しかし、それらの下にGroundオブジェクト(Rigidbidy2d(Static)+Collider+SpriteRenderer)を作るとシーソーの位置がずれました。 なので、Unity公式の窓口に問い合わせる事にします。 これまでありがとうございました。 非常に助かりました。
Ans

2017/11/13 11:26 編集

うーん 傾いたシーソーがgroundにぶつかるとずれるということですよね 自分の場合グラウンドオブジェクトがあってもシーソーは動きません グラウンドも落下物もシーソーもSizeとフリーズと重力を受けるか否か 以外は同じものであって衝突時の処理は変わらんはずなのですが 落下物を大きくしてフリーズさせたものを地面変わりにしても結果は同じですか? むしろ自分場合フリーズされたシーソーを動かしたくても動かせません...
1129

2017/11/13 11:47

>落下物を大きくしてフリーズさせたものを地面変わりにしても結果は同じですか? 残念ながら、同じでした。 Ansさんの環境ではシーソーの両側に重い物体(mass=200.0位)を乗せたときにどのように動きますか? 私の場合はシーソーが動いてすぐに戻ります。
Ans

2017/11/13 12:02 編集

傾いて物がどいたら多少傾きが回復する程度です もう最小のプロジェクトをどこかにアップロードするかシーソーのスクショを乗せるのがいいと思います そもそもフリーズポジションは外部からの物理演算の影響を受けないという機能なので重さとか関係ないです
1129

2017/11/13 12:23

曖昧ですいません。ずれるキャプチャを追記しました。
Ans

2017/11/13 12:30 編集

ばっちりずれてますね 地面とシーソーのインスペクタースクショをください 重力なしでフリーズポジションを外すとそれっぽい挙動になりますが
Ans

2017/11/13 12:49 編集

シーソーの collision detection をcontinuous から discrate にしてください prefab になっているあたり 不精して1から作らなかったでしょう 1から作るというのは初期設定で試すことに意味があるんですよ...
1129

2017/11/14 08:46

Prefabでは無く一から作ったキャプチャとインスペクターを追加しました。
guest

0

RigidBody2DのFreezeRotationにチェックを入れても回転してしまうでしょうか?

投稿2017/11/09 17:57

KirisimaCreate

総合スコア44

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

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

1129

2017/11/09 21:16

シーソーなので、シーソーの中心の座標のみを固定して回転はさせたいです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問