Android無料 2D格闘アクション「サラリーマン忍者」予約開始!!
⑫unity2Dの シーン(Scene)の移動について
シーン(Scene)は、
例えばで2面までのゲームがあるとすると、
- タイトルシーン
- キャラ選択シーン
- 1面シーン
- 1面クリア後のシーン
- 2面始まる前のイベントシーン
- 2面シーン
- 2面クリア後のシーン
- エンディングシーン
- 1.タイトルシーンからの別移動で、オプションシーン
といった感じで9このシーンを作ることになります。
「unityへのシーンの登録」
具体的には、1こ目のシーンを開いて次の作業をします。
- File から Build Settings を開く
2.開いた画面で、Add Current をクリックすると、Scenes In Build に表示される。
これを9シーンあるので、後8回繰り返します。
(シーンを開く→ File から Build Settings を開く→Add Current をクリックする)
左下にPlatform がありますが、実際 Ios やAndroid で動かしたい(Buildしたい)時に必要であり、シーンの移動だけであれば、必要ありません。
また、Scenes In Build に表示されたシーンをDellキーでScenes In Buildから消したりしても、本体のデータが消えたり、
実際Buileするときに、Ios や Android などを選べるので、一度Iosを選んでしまったからといって、金輪際Iosだけになるとか はありません。
要は、
ばんばんAdd Current をクリックしても問題ありません。
「シーン(Scene)移動のScript」
次は、1面の敵のhpが0になったら、の1面クリア後のシーン(scene名:04.1meclear)に移動するというC#を例として書きます。
using UnityEngine;
using System.Collections;
public class Sceneidou1menclear : MonoBehaviour {
//体力
public float hp = 5000;
public float Maxhp = 5000;
//ダメージ設定
public float BukiDamage = 10;
//シーンの移動の設定
void Update () {
// ヒットポイントが0以下であれば、シーン移動する。
If (hp < 1 )
{
Application.LoadLevel ("04.1meclear");
}
}
//ダメージの設定 CollisionにBukiタグがあるときは、hpを減らす)
void OnCollisionStay2D(Collision2D collision)
{
if (collision.gameObject.tag == "Buki")
{
// ヒットポイントを減らす
hp = hp - BukiDamage ;
}
}
}
この、scriptの中段にあるApplication.LoadLevel ("○○"); がシーンの移動関数です。
○○に、Add Current してある シーンを入力してあげると、シーンが移動します。
例えば、タイトルのPushStartという、UGUIのボタンにScriptをふっつけて内容に、
public void StartPush()
{
Application.LoadLevel ("02kyarasentaku");
}
として、UGUIのボタンを設定すると、
タイトルで、PushStartボタンを押したら、キャラ選択シーン(02kyarasentaku);
に移動します。
↓
簡単ですね!以上です。
次回はボタンや、会話などを表示させる、UGUIについて、ど素人なりに説明します。
⑪unity2D でsprite を設置すると”ぼやける”問題について
よい土曜日をお過ごしでしょうか。札幌は曇りです。
自分的には、直射日光が死ぬほどきらいなので、今日はいい日です。
本題です。一生懸命つくったspriteにアニメーションをつけて、実際再生
した結果、 ぼやけてる! ピントが合っていない!
となったことありませんか?
これは、ショックですよね。一生懸命絵を描いたのに。
ゲームキャラがぼやけてる なんて絶対許せませんよね。
で、解決方法。
下の図をみてください。
Spriteの管理で、Generate Mip Maps にチェックが入っていますよね。
これはゲームエンジンの負担を減らすために、spriteの解像度を下げる
設定のようです。
画像のようにキャラがぼやけています。
Generate Mip Mapsのチェックを外したら、 “鮮明だ!”
長年の悩みが解決しました!!unity恐るべし。
ではまた。
⑨unity2D アクション サラリーマン忍者 2人目キャラの動画
2人目キャラ「忍者谷口」できました…めちゃくちゃ疲れた。
コメントで意見いただけると嬉しいです。
⑧時間の管理について(Time.deltaTime関数を超わかりやすく!)
Time.deltaTimeは直近のフレームからの経過時間を示す
となっていますが、ど素人で全くわからなかったので、解析しました。
超分かりやすく説明します。
要は、よーいスタート! という関数でした。
①敵のBukiのtagの攻撃をうけたら、ダウンする(トリガー指定)を作る。
これは衝突判定であるOnCollisionStay2Dを使用します。
使い方は簡単。1回目、2回目と敵のパンチがあたったら、timeが増えて行って、合計1秒以上攻撃を受けたら、ダウンするというトリガーを出す関数をつくりました。
まず、スクリプトの上ので
public float time = 0;
を指定します。
public に指定すると、timeが増えていく所が画面のInspector で目でみて確認可能!
void OnCollisionStay2D(Collision2D collision)
{ if (collision.gameObject.tag == "Buki" )
{ time = time + Time.deltaTime; if( time >= 1.0f )
{ Animator myAnimator = GetComponent<Animator>();
myAnimator.SetTrigger("Down");
//そして、ダウンしたら、timeをゼロに戻す
time = 0; }
}
}
これで、敵のパンチを受けたらtimeがたまっていき、1秒を超えたらダウンする。
そしてtimeが0に戻る というスクリプトができました。
これがパンチ受けた1発目で0.36秒タイムが増えているのがわかります
これが何発か敵の攻撃をうけて、timeが1秒を超え、ダウンして、timeが0に戻ったところです。
②ため攻撃を作る。
Update関数ただTime.deltaTime関数 を入れると、画面のInspector timeがずっと増え続けるだけです。
これは、スタートしてからの経過時間を使うのに使えます。
ため攻撃はボタンを押してる時だけtimeをふやしたいので、
Update関数にif分で条件をつけます。
//Fire1を押している間、timeが増え続ける
if( Input.GetButton("Fire1")
{
time = time + Time.deltaTime;
//3秒を超えたら、強烈殴打攻撃トリガーをだす
if( time >= 3.0f ) { Animator myAnimator = GetComponent<Animator>(); myAnimator.SetTrigger("kyoretsuouda");
//そして、timeをゼロに戻す time = 0; }
}
アニメーションで通常攻撃より3倍とか強力な攻撃を作り、
kyoretsuoudaのトリガーで推移するようにすれば、
”ため攻撃”の完成です!
時間管理 分かりやすかったでしょうか…ではまた!
⑥unity2Dの衝突判定について 無限ジャンプしないために
みなさまおはようございます。5時53分です。
月曜日はいやですね…本当に会社めんどくさい。あああ…
って言ってないで、やる気出すためにブログを更新しようかと
衝突判定ですが、簡単にメモします
地面との衝突判定
public class kihon : MonoBehaviour {
public bool ground = false; //と通常はfalseとしておいて
//2Dの物体がground Tag に接していると、
void OnCollisionStay2D(Collision2D collision)
{
if (collision.gameObject.tag == "ground" || collision.gameObject.tag == "Mono")
{
ground= true;
}
}
//2Dの物体がGround Tag から離れると
void OnCollisionExit2D(Collision2D collision)
{
{Animator myAnimator = GetComponent<Animator>();
myAnimator.SetBool("Grounded", false);}
if (collision.gameObject.tag == "ground" || collision.gameObject.tag == "Mono" )
{
jump = false;
}
}
と ground に OnCollisionStay2D (2Dの物体がふっついているとき)
”true” とする という内容です。はい。余裕でみなさん知っていますね。
ただ、ブログでこれを外すわけにもいかないので(笑)
で、これをどうつかうかというと、
//ジャンプ
public class kihon : MonoBehaviour {
public float jumpPower = 300f;
//guoundに接しているときにJumpぼたんを押すと
if(Input.GetButtonDown("Jump") && ground ) ←ここでつかいます!
void Update () {
{
// jumpPower 分 上に力をあたえる
rigidbody2D.AddForce(Vector2.up * jumpPower );
Animator myAnimator = GetComponent<Animator>();
myAnimator.SetTrigger("Jump");
}
}
}
と ground に接しているときじゃないとJump できないわけです。
無限ジャンプを回避しているわけですね。
ジャンプ成功!
衝突判定の注意は、3Dの物体と2Dの物体はぶつからないということです。
Collision2D とCollision は当たらない。不便だ…どうにかならないかな。
ではまた!