素人Unity練習帳
前回の続き
Enemyオブジェクトも球を飛ばせるようにする。
EnemyMove.csで、
初期設定に
public GameObject prefab; //プレファブ設定
一番下の}の前に
//キャラクター読み込み
GameObject LoadBullet(){
GameObject bullet = GameObject.Instantiate(prefab) as GameObject;
return bullet;
}
void attacking(){}の中に
GameObject bullet = LoadBullet();
を入れる。
Hierarchy>Enemyを選択して
Inspector>EnemyMoveのPrefabを、EnemyBulletとする
ゲームを起動して、
Inspector>EnemyMoveのEnemyStateをAttackingにすると
そうすると無尽蔵にEnemyBullet(Clone)というオブジェクトが増殖する
Project>Prefabs>EnemyBullet
にある
AddComponent>PhysicsのRigidbodyをつける
GameObject LoadBullet(){}に追記
pForward = transform.TransformDirection(Vector3.forward); //オブジェクトの正面の情報を得る
pForward.y = 1;//高さ設定
bullet.transform.position =& nbsp;transform.position + pForward; //Prefabの座標
bullet.GetComponent<Rigidbody>().velocity = pForward*bulletSpeed;
void attacking(){}のGameObject bullet = LoadBullet(); を
if (enemyTime <= 0) {}に変更。
ゲームモードで確認すると、単発で発射される。
手動で、Attachingにしていたものを
PlayerがSearchArea内に入ると、攻撃を始めるという行動を追加する
Hierarchy>Enemy>SearchAreaを選択し
inspector>AddComponent>NewScriptに
SearchArea.csという名前のファイルを作り、Project>Assets>Scriptsに入れる
作ったファイルを開きます。
void Update () {}
下に枠内に入った時、出た時を認識するスクリプトを追記
//入った時
void OnTriggerEnter(Collider other){
}
//出た時
void OnTriggerExit(Collider other){
}
これだけだと、あったもの全てに反応してしまうので
tagを付けて識別する
Hierarchy>Playerを選択しInspectorの、Tagの右側をPlayerに変更
ーーーSearchArea.csーーーーーーーーーーーーーーーーーーーーーーーー
using UnityEngine;
using System.Collections;
public class SearchArea : MonoBehaviour {
EnemyMove enemyState2; //コンポーネントの名前を入れ る
// Use this for initialization
void Start () {
enemyState2 = transform.parent.GetComponent<EnemyMove> ();
}
// Update is called once per frame
void Update () {
}
void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player") {
enemyState2.enemyState = EnemyMove.State.Attacking;
enemyState2.enemyTime = enemyState2.shootingBaseTime;
} else {
enemyState2.walkMuki = 2;
}
}
//OnTriggerStayでも大丈夫だけど一瞬すぎるからダメかも?
void OnTriggerExit(Collider other)
{
if (other.gameObject.tag == "Player") {
Debug.Log (other.gameObject.tag);
enemyState2.enemyState = EnemyMove.State.Waiting;
} else {
enemyState2.walkMuki = 2;
}
}
}
ーーーーーーーーーーーーーーーーーーーーーーーーー
if (other.gameObject.tag == "Player") {
当たったオブジェクトのTagがPlayerだったら
transform.parent.GetComponent<EnemyMove> ();
このオブジェクトの親のEnemyMove
EnemyMove enemyState2;
コンポーネントの名前を入れる
これで、searchArea内に入った時攻撃を始めるようになります
戻る 次へ
Reon Viewin