[過去ログ] 【ゲームエンジン】Unity初心者質問スレBuild3 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
668
(1): 名前は開発中のものです。 [sage] 2020/02/24(月) 18:39:11.38 ID:B7d3DSpn(1/4) AAS
質問失礼します。
unity2dでtransform.translateでオブジェクトを移動させているのですが、左右に移動させたときにz座標が変動してしまいます。
何か考えられる理由はありませんか…?
670
(3): 名前は開発中のものです。 [] 2020/02/24(月) 20:16:41.80 ID:B7d3DSpn(2/4) AAS
>>669
669(1): 名前は開発中のものです。 [] 2020/02/24(月) 19:00:32.30 ID:A6C4ojr1(2/6) AAS
>>668

public function Translate(translation: Vector3, relativeTo: Space = Space.Self): void;
public function Translate(x: float, y: float, z: float, relativeTo: Space = Space.Self): void;

Translateはマニュアルでこうなっている
ゆえにオーバーロードで2種類の動きをするということになっている
デフォルト引数になってるのは無視していいので ポイントになるのは

1・Vector3を引数とした場合
2・x y z それぞれのfloatを引数とした場合
の2パターンがある

左右に移動させたい場合は x軸だけを変えればいいので
Y軸かZ軸に余計な値が入っていればうまくいかない

※参考例

Vector3 tamesi = new Vector3(10.0f,0.0f,5.0f);
とした場合 x軸だけじゃなくて、z軸にも値が入っているから動いちゃう
Vector3 tamesi2 = new Vector3(10.0f,0.0f,0.0f);
というやつを引数にすればいい

使用するときに
transform.Translate(tamesi)とすればx軸とz軸に動くし
transform.Translate(tamesi2)とすればx軸にしか動かない

x,y,z 3つの値を使う場合も同様にYとZの値に注意する

つまり、yとzに余計な値が入っていれば
上に動いたり、奥に動いたりするわけなんですけど
この回答でいけますか?
668です
transform.Translate(0.0f, 0.1f, 0.0f);
これと同じ書き方でxとyの値のみ変更したものを4つ作り、指定のキー入力でそれぞれ呼び出し上下左右の4方向に移動するようにしています。
zは全て0.0fにしているのですが、xが変動すると同時にzも変動してしまいます。
676
(1): 名前は開発中のものです。 [sage] 2020/02/24(月) 21:25:25.99 ID:B7d3DSpn(3/4) AAS
>>672
672(1): 名前は開発中のものです。 [] 2020/02/24(月) 20:37:54.32 ID:A6C4ojr1(3/6) AAS
>>670
これで規定通りの動きができた

public class Cube_Move : MonoBehaviour
{
void Update()
{
//左に移動
if (Input.GetKey(KeyCode.LeftArrow))
{
this.transform.Translate(-0.1f, 0.0f, 0.0f);
}

//右に移動
if (Input.GetKey(KeyCode.RightArrow))
{
this.transform.Translate(0.1f, 0.0f, 0.0f);
}

//上に移動
if (Input.GetKey(KeyCode.UpArrow))
{
this.transform.Translate(0.0f, 0.1f, 0.0f);
}

//下に移動
if (Input.GetKey(KeyCode.DownArrow))
{
this.transform.Translate(0.0f, -0.1f, 0.0f);
}
}
}
>>673
673(2): 名前は開発中のものです。 [] 2020/02/24(月) 20:38:31.64 ID:A6C4ojr1(4/6) AAS
※上のソースコードだけど
ヒエラルキーにCubeっていう3Dの四角い箱を作って
それに上記のcsファイルをアタッチしている
これでx軸、y軸に キーボードの上下左右に動いてくれる

z軸に動いてないかどうかは実行した後に
z軸の値が変わってなければOKっていう認識

一応上記のcsファイルをアタッチしたら、想定の動きができたので
上記コードで試してもらえますか?
ちゃんと左右のキーボードで左右に移動
上下のキーボードで上下に移動してくれました

※こちらの環境では問題ありません
668です
スクリプト自体はそちらの物とほとんど同じでした。
今別のオブジェクトにスクリプトだけをつけて動かしたところzの値が変動しなかったのでrigidbodyかboxcolliderが原因かも知れません
もう少し自分で原因を調べてから質問し直したいと思います。
678: 名前は開発中のものです。 [sage] 2020/02/24(月) 21:44:51.32 ID:B7d3DSpn(4/4) AAS
>>677
677(1): 名前は開発中のものです。 [] 2020/02/24(月) 21:35:08.27 ID:A6C4ojr1(6/6) AAS
>>676
Rigidbodyを付けている場合、デフォルト設定で重力が働くようになってるからね
勝手に落下したりする

Rigidbodyで物理演算を無効にする場合は
DynamicではなくKinematicにすればいい
Kinematicにすれば重力の影響を受けないし、ほかのオブジェクトが
ぶつかってきた場合も影響されて動くことはない

rigidbodyにあるvelocityは移動速度(速度ベクトル)だから物理演算とは
関係なく動かすことができる
Translateも同様に物理演算とは関係なく動かすことができる

物理演算で動かす or (速度ベクトルや座標の位置を変更することで動かす)
物体を動かす場合 上記2点に気をつかえばいい
668です
インスペクタのrotation.yに誤って値が代入されていました
値を0に変えるとzの値が変動しなくなったのでこれが原因だったようです。
いろいろアドバイスいただきありがとうございました。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.031s