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

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

ただいまの
回答率

90.45%

  • C#

    9274questions

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

  • Unity

    5683questions

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

  • Unity2D

    1311questions

座標を強く固定する

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 757

1129

score 108

前提・実現したいこと

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

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

発生している問題・エラーメッセージ

以下のキャプチャの通りです。シーソーにTrail Rendererを付けているので、
座標がずれているのが分かると思います。

前
後
後

試したこと

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

using UnityEngine;

public class ForceStay : MonoBehaviour {


    private Vector3 firstPos;
    private Vector3 currentPos;
    void Start () {
        Transform t = GetComponent<Transform> ();
        firstPos = new Vector3(t.position.x, t.position.y, t.position.z);
    }


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

補足情報

Unity 2017.2
シーソー部分はHinge Joint2Dを使っています。

追記

こんな感じでずれます。

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

追記2

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

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

Green Seesaw

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

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/10 06:39

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

    キャンセル

  • 2017/11/10 06:45 編集

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

    つまりスクリプトは一切必要ないです

    キャンセル

  • 2017/11/10 07:37

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

    キャンセル

  • 2017/11/10 17:37

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

    キャンセル

  • 2017/11/10 17:44

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

    キャンセル

  • 2017/11/11 11:12

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

    キャンセル

  • 2017/11/11 17:09

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

    キャンセル

  • 2017/11/11 17:47

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

    キャンセル

  • 2017/11/11 18:04 編集

    というかHinge Joint2D 以前の問題ですね
    boxcollider2d spriterenderer rigidbody2d のみをつけて
    freeze position x y をonにしただけのオブジェクトに

    boxcollider2d spriterenderer rigidbody2d だけつけて一切設定をいじらないオブジェクトをぶつけて 
    potisionが動くなら 公式に文句言うべきです

    キャンセル

  • 2017/11/11 18:17 編集

    boxcollider spriterenderer rigidbody2d のみをつけて
    freeze position x y をonにしただけのオブジェクト

    rigidbodyとspriterenderer とboxcollider だけつけたオブジェクトを落とすとシーソーは全く動きませんでした。両側に乗せた場合も同様です。
    しかし、それらの下にGroundオブジェクト(Rigidbidy2d(Static)+Collider+SpriteRenderer)を作るとシーソーの位置がずれました。
    なので、Unity公式の窓口に問い合わせる事にします。

    これまでありがとうございました。
    非常に助かりました。

    キャンセル

  • 2017/11/13 20:22 編集

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

    キャンセル

  • 2017/11/13 20:47

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

    キャンセル

  • 2017/11/13 20:54 編集

    傾いて物がどいたら多少傾きが回復する程度です

    もう最小のプロジェクトをどこかにアップロードするかシーソーのスクショを乗せるのがいいと思います

    そもそもフリーズポジションは外部からの物理演算の影響を受けないという機能なので重さとか関係ないです

    キャンセル

  • 2017/11/13 21:23

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

    キャンセル

  • 2017/11/13 21:28 編集

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

    キャンセル

  • 2017/11/13 21:46 編集

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

    キャンセル

  • 2017/11/14 17:46

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

    キャンセル

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/10 06:16

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

    キャンセル

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

  • ただいまの回答率 90.45%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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

  • C#

    9274questions

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

  • Unity

    5683questions

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

  • Unity2D

    1311questions