[過去ログ] 【ゲームエンジン】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
>>669669(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
>>672672(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);
}
}
}
>>673673(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
>>677677(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