質問するログイン新規登録

Q&A

1回答

1068閲覧

unity2Dでのアニメーションが浮いてしまう

syosinsya1202

総合スコア10

C#

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

0グッド

0クリップ

投稿2022/07/11 00:27

0

0

unity初心者です。
unityで2Dアクションゲームを作っているのですが、アニメーションを追加し、再生すると最初に設定した当たりや静止状態の立ち絵からキャラがずれて表示されてしまいます。どうしたら直せるのでしょうか。(スクリプトには座標指定などは入っていないはずです。ちなみにルートモーションにチェックを入れたところゲームを再生したらキャラが飛んで行ってしまうという状態になりました。)
unityのバージョンは2021.3.4f1です。
下にとりあえずアニメーションの再生スクリプトを書いておきます。
回答お願いします。
using UnityEngine;

public class PlayerController : MonoBehaviour
{
Rigidbody2D rbody; //Rigidbody2D型の変数
float axisH = 0.0f; //入力
public float speed = 3.0f;//移動速度

public float jump = 6.0f; //ジャンプ力 public LayerMask groundLayer; //着地できるレイヤー bool goJump = false; //ジャンプ開始フラグ bool onGround = false; //地面に立っているフラグ //アニメーション対応 Animator animator; //アニメーター public string stopAnime = "PlayerStop"; public string moveAnime = "PlayerMove"; public string jumpAnime = "PlayerJump"; public string goalAnime = "PlayerGoal"; public string deadAnime = "PlayerOver"; string nowAnime = ""; string oldAnime = ""; // Start is called before the first frame update void Start() { //Rigidbodyを取ってくる rbody = this.GetComponent<Rigidbody2D>(); //Animatorを取ってくる animator = GetComponent<Animator>(); nowAnime = stopAnime; oldAnime = stopAnime; } // Update is called once per frame void Update() { //水平方向の入力をチェックする axisH = Input.GetAxisRaw("Horizontal"); if(axisH > 0.0f) { //右移動 Debug.Log("右移動"); transform.localScale = new Vector2(1, 1); } else if(axisH < 0.0f) { //左移動 Debug.Log("左移動"); transform.localScale = new Vector2(-1, 1); //左右反転させる } //キャラクターをジャンプさせる if(Input.GetButtonDown("Jump")) { Jump(); //ジャンプ } } void FixedUpdate() { //地上判定 onGround = Physics2D.Linecast(transform.position, transform.position - (transform.up * 1.0f), groundLayer); if(onGround || axisH != 0) { //地面の上1or速度が0ではない //速度を更新する rbody.velocity = new Vector2(speed * axisH, rbody.velocity.y); } if(onGround && goJump) { //地面の上でジャンプキーが押された //ジャンプさせる Debug.Log("ジャンプ!"); Vector2 jumpPw = new Vector2(0, jump); //ジャンプさせるベクトルを作る rbody.AddForce(jumpPw, ForceMode2D.Impulse); //瞬間的な力を加える goJump = false; //ジャンプフラグを下ろす } if(onGround) { //地面の上 if(axisH == 0) { nowAnime = stopAnime; //停止中 } else { nowAnime = moveAnime; //移動 } } else { //空中 nowAnime = jumpAnime; } if(nowAnime != oldAnime) { oldAnime = nowAnime; animator.Play(nowAnime); //アニメーションの再生 } } //ジャンプ public void Jump() { goJump = true; //ジャンプフラグを立てる Debug.Log("ジャンプボタン押し"); } //接触開始 private void OnTriggerEnter2D(Collider2D collision) { if(collision.gameObject.tag == "Goal") { Goal(); //ゴール!! } else if(collision.gameObject.tag == "Dead") { GameOver(); //ゲームオーバー!! } } //ゴール public void Goal() { animator.Play(goalAnime); } //ゲームオーバー public void GameOver() { animator.Play(deadAnime); }

}

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

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

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

graha6

2022/07/13 10:59

animatorに使われている画像を今一度確かめてみて下さい。sprite editorなどで他と違う点を修正してみると直ると思います。
guest

回答1

0

アニメーションに使った立ち絵をプロジェクトウィンドウから探して、全ての画像のピポットを「下」に変更しましょう。

投稿2023/06/03 02:23

ifa

総合スコア2

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問