レベルアップもできる様なったので、罠をサクッと作成。
この辺りは特に悩む事もなく実装できる様になったのが嬉しい😄
ダメージをあたえるダメージトラップと、一撃死のデストラップを作成する。
とりあえず、現段階では動作はアニメーション機能に任せることにした。
次は遠隔攻撃してくる敵。
実はこれも、そんなに悩まずに実装できた。
基本の動きは他のEnemyと同じなので、他のEnemyのスクリプトをちょこちょこっと改造するだけで良い。
違うのは、遠隔攻撃の矢を生成してやるのと、生成時のEnemyの向きに応じて、矢の向きを変える事、そして、矢の方向に動かしてやること。
まず、アーチャーのスクリプト(例によって関係ない部分は省略)
public void EnemyAttack() { moveDirection=MOVE_DIRECTION.STOP; //まずenemyの動きを止めてやる。 anim.SetTrigger("Attack"); //enemyの攻撃アニメを再生。 Attacking=false; return; } public void ShootAroow() { //矢を生成。 GameObject shoot_arrow=Instantiate(arrow,arrowpoint.transform.position,Quaternion.identity); //矢の向きをアーチャーの向きに変えてやる。 //Mashf.SignでアーチャーのlocalScale.xを+1/-1に変換して、 //矢のlocalScale.x にかけることでアーチャーと矢が同じ向きになる。 shoot_arrow.transform.localScale=new Vector3(1.5f*Mathf.Sign(transform.localScale.x),2,0); //更に、矢に作成しているSetArrowメソッドにも方向を引数で渡してやる。 shoot_arrow.GetComponent<ArrowWeapon>().SetArrow(Mathf.Sign(transform.localScale.x)); }
次は矢のスクリプト
using UnityEngine; public class ArrowWeapon : MonoBehaviour { int arrowspeed; float direction; float arrowtimer=0f; public void SetArrow(float dir) { arrowspeed=5; direction=dir; //引数で受け取った方向を、このメソッド内用の変数に格納 } private void FixedUpdate() { arrowtimer+=Time.deltaTime; if(arrowtimer<5f) { if(direction==1)//受け取った向きで矢を向きを変える。 { transform.Translate (Vector3.right*arrowspeed*Time.deltaTime); } else { transform.Translate (Vector3.left*arrowspeed*Time.deltaTime); } } else { Destroy(gameObject); } } private void OnCollisionEnter2D(Collision2D other) { if (other.gameObject.tag=="Player") { other.gameObject.GetComponent<PlayerManager>().Ondamage(20,this.transform.position); Destroy(gameObject); } } }
アーチャーのアニメーションの設定はこんな感じ。
今、みたらShootArrowじゃなくShoot Aroowになってる😂
まぁ、いいか🤣
結果はこんな感じ。
youtu.be
あとは、ステージボスを作ろうかな〜
使用アセット
Pixel Fantasy Caves
Hero Knight - Pixel Art
Slime Character
Pixel Potions (with Animation)
Animated 2D Coins
Bandits - Pixel Art
Hero nad Opponents Animation
2D Death Traps - Free
使用画像
七三ゆきのアトリエ:https://nanamiyuki.com/