Unity縦スクロール障害物競争で、加速アイテムを作りたい
Unity、C#ともに初心者なので、至らぬ点あるかと思いますがご容赦ください。
Unityの3Dモードで、縦スクロールの、障害物競争のようなゲームを作っています。
具体的に書くと、「自機キャラがいて、他に3人ほどCPUがいて、ゴールを目指す。
途中、①障害物(当たり判定使用)、②加速アイテム(一定時間速くなる)、そして③アビリティアイテムがある。
アビリティアイテム→取るととそのキャラごとの必殺技が使えて、他キャラへの妨害などができる。
CPUも障害物を避けたり加速アイテムやアビリティアイテムを狙ってきたりする。」といったところです。
この度は加速アイテムについて質問致します。
まず、「unity 加速装置」と検索して出る講座ページの「加速パネル(踏んづけて加速)」ではダメだったので、
「加速アイテム(ゲットして加速)」にしました。
↓playerスクリプトまるごと
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class player : MonoBehaviour 6{ 7 public float speed;//インスペクタで速度をいじくる宣言 8 9 private Animator anim = null; 10 private Rigidbody2D rb = null;//アニメとRBの変数宣言 11 12 private string ochaTag = "Ocha";//★お茶タグを宣言 13 14 void Start() 15 { 16 anim = GetComponent<Animator>(); 17 rb = GetComponent<Rigidbody2D>();//インスタンスを取得命令 18 } 19 20 // Update is called once per frame 21 private bool isKasoku = false;//★加速boolを宣言、通常は加速してないよ(お茶を取ってないよ) 22 void FixedUpdate() 23 { 24 float verticalKey = Input.GetAxis("Vertical");//上下キー宣言 25 float horizontalKey = Input.GetAxis("Horizontal");//左右キー宣言 26 float ySpeed = 0.0f;//y軸移動速度の初期値 27 float xSpeed = 0.0f;//x軸移動速度の初期値 28 if(verticalKey<0)//下キーが押されたら(上に行く必要がないゲームなので下キーのみ指定しています) 29 { 30 anim.SetBool("run", true);//アニメon 31 ySpeed = -speed;//走る 32 } 33 else 34 { 35 anim.SetBool("run", false);//アニメoff 36 ySpeed = 0.0f;//走らない 37 } 38 39 if(horizontalKey>0)//右キーが押されたら 40 { 41 xSpeed = speed;//右に行く 42 } 43 else if(horizontalKey<0)//左キーが押されたら 44 { 45 xSpeed = -speed;//左に行く 46 } 47 rb.velocity = new Vector2(xSpeed, ySpeed);//上記の記述をこの式に代入して動いているそうですがよくわかってません。 48 49 if(isKasoku==true)//★加速フラグがtrueの場合の挙動 50 { 51 rb.velocity = new Vector2(xSpeed,ySpeed*4);//★y軸移動速度が4倍になる(今後通常時の走行速度の違う他キャラも増やすので、この方が汎用性があります) 52 } 53 else if(isKasoku==false)//★加速フラグがfalse、つまり通常時 54 { 55 rb.velocity = new Vector2(xSpeed, ySpeed);//★通常時と同じ速度を記述 56 } 57} 58 private void OnCollisionEnter2D(Collision2D collision)//★(お茶との)衝突判定 59 { 60 if(collision.collider.tag==ochaTag)//★お茶タグとぶつかったら 61 { 62 isKasoku = true;//★加速フラグがtrueになるよ 63 Destroy(collision.gameObject);//お茶が消えるよ 64 } 65 } 66} 67//アイテムによる加速までできた。
今困っているのは、加速したあと元の速さに戻せないことです。
例:5秒間、走る速さが4倍になる。その後は元の速さで走る(キャラクターごとに元の走る速さは違います)
というふうにしたいです。
試したこと
・コルーチンが正解かと思い、上記スクリプトにねじ込もうとしました。
###エラー、メッセージ
以下、上記スクリプトにコルーチンをねじ込んだ部分を抜粋
C#
1 void Start() 2 { 3 anim = GetComponent<Animator>(); 4 rb = GetComponent<Rigidbody2D>();//インスタンスを取得命令 5 StartCoroutine("Kasoku"); 6 } 7 IEnumerable Kasoku() 8 { 9 rb.velocity = new Vector2(xSpeed, ySpeed * 4); 10 11 yield return new WaitForSeconds(5) 12 13 //ここに「元の速度に戻る」と書くべきだと思うのですが、書き方がわかりません。 14 }
①この質問ページでは見えませんが、VisuialStdioにおいてxSpeedとySpeedに赤線が引かれ、
「現在のコンテキストに(xSpeed/ySpeed)という名前は存在しません」と出ます。
playerスクリプト内で定義(?)していると思うのですがだめなのでしょうか。
②スクリプト内にも書きましたが、元の速度に戻るという命令の書き方がわかりません。
丸投げ状態で申し訳ないのですがご教授頂きたく存じます。
★playerスクリプトですが、上記のものはvelocityで動かしていますが、アドバイスを頂きAddForceで動くものも作りました。
今回はvelocityのものを載せましたが、AddForceの方が加速と減速の問題が解決しやすいならそちらにしますのでお教え頂きたいです。
補足情報(FW/ツールのバージョンなど)
■作業環境
Mac Sierra10.12.6(8GB)
Unity2018 4.14f1
■ここまで出来ていること
・キャラクターのアニメーション実装、及び下キー入力によるアニメ遷移
(待機時:歩いている→下キー入力:走る(手足の動きが早くなる))
・キャラクターの下と左右の移動。上に行く必要はないので、上キーを入力しても動きません。
・カメラのプレイヤー追従(y軸)
・障害物の設置(キャラと障害物に当たり判定をつけた)
・CPUキャラの自走(y軸下に向けて進むだけですが)
・一応、加速アイテムを取って加速しっぱなしの映像を貼っておきます。
(とあるマンガの非営利二次創作で、拙い絵でお恥ずかしいのですがスルーお願いします)
https://streamable.com/p6esx
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/15 09:55
2020/01/16 01:24
2020/01/16 08:15
2020/01/16 08:23
2020/01/16 08:26