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

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

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

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

Q&A

解決済

1回答

1282閲覧

「ボールが1回転するごとに」という条件式を立てたい

NozomiTabata

総合スコア16

C#

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

0グッド

0クリップ

投稿2019/02/25 10:34

前提・実現したいこと

Unityで2Dのゲームを作成しています。Unity初心者です。
ボールが1回転するたびにボールの大きさを大きくする機能を実装しているところで、ボールが1回転するという条件を立てるところで躓いてしまいました。
言語はC#です。

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

現在書いているコードでは、一定の距離を進むと1フレームごとにボールが大きくなってしまい、実装したい挙動のようにはなりませんでした。

該当のソースコード

C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SnowBallController : MonoBehaviour
{
float PushForce = 500f;
Rigidbody2D player;

float Posz;//ボールの回転度数

// Start is called before the first frame update
void Start()
{
player = GetComponent<Rigidbody2D>();
Posz = transform.rotation.z;
}

// Update is called once per frame void Update() { if (transform.position.x > 21.399)// { if (player.velocity.x > 0) { player.AddForce(Vector2.left * 1f);//ボールが減速する } else { player.velocity = Vector2.zero;//ボールが停止する } } if (transform.position.x > 2.5) { if (player.velocity.x > 0) { if ( Posz % -180 >= 0f)//今回質問したい条件式、「ボールが一回転するごとに」という条件にしたい { transform.localScale *= 1.01f; } } } if (Input.GetMouseButtonDown(0)) { player.AddForce(Vector2.right * PushForce); } }

###試したこと
同様の条件式を立てた人がいないかインターネットで探しましたが見つかりませんでした。

補足情報(FW/ツールのバージョンなど)

Visual Studio for Mac Community バージョン7.7.3

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

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

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

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

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

guest

回答1

0

ベストアンサー

PoszをStartでしか代入していないので、初期値を元に比較してます。
transform.rotation.zは値参照なので、if文の前とかで再取得しないとずーっと値が変わらないことになります。

Debug.Log(transform.rotation.z);をif文の前に仕込むと現在どんな値を取っているか確認出来るので、それを参考にしつつ修正するといいと思います。

投稿2019/02/25 16:46

sakura_hana

総合スコア11427

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

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

NozomiTabata

2019/02/27 04:22

返信が遅れてしまい申し訳ありません。御回答ありがとうございます。 Start()が最初のみしかよばれず Poszの値が変わらないということが頭にありませんでした。ありがとうございます。 回答者様のおっしゃる通り、transform.rotation.zを取ったところ、この条件式を立てることが間違っていることに気づきました。 私はボールを押し、その走行距離でスコア換算を行うというゲームを予定しているため、ボールの速度の差が大きく、「一回転した」という条件の角度を狭く設定するとボールの速度が大きい際に2フレーム間でその条件が満たされず、逆に広く設定すると、速度がとても小さい時に不自然に大きくなってしまうという挙動になってしまいました。なので、別の方法にて自然な挙動するように実装したいと思います。本当に御回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問