Пример #1
0
    public void Damage(float damage)
    {
        if (server_stage_manager_ == null)
        {
            server_stage_manager_ = FindObjectOfType<ServerStageManager>();
        }
        if (server_stage_manager_ == null) return;
        if (server_stage_manager_.IsEndTutorial) return;

        hp -= damage;
    }
Пример #2
0
    //毎フレームに一度
    void Update()
    {
        if (!hp_manager_.isActive) return;
        if (!enemy_stater_.isNormal) return;

        if (server_stage_manager_ == null)
        {
            server_stage_manager_ = FindObjectOfType<ServerStageManager>();
        }
        if (server_stage_manager_ == null) return;
        if (server_stage_manager_.IsEndTutorial) return;

        Vector3 playerPos = player.position;                 //プレイヤーの位置
        Vector3 direction = playerPos - transform.position; //方向と距離を求める。
        float distance = direction.sqrMagnitude;            //directionから距離要素だけを取り出す。
        direction = direction.normalized;                   //単位化(距離要素を取り除く)
        direction.y = 0f;                                   //後に敵の回転制御に使うためY軸情報を消去。これにより敵が上下を向かなくなる。

        //経過時間を取得
        searchTime += Time.deltaTime;

        if (searchTime >= 1.0f) {
            //最も近かったオブジェクトを取得
            nearObj = serchTag(gameObject, "Player");
            player = nearObj.transform;

            //経過時間を初期化
            searchTime = 0;
        }

        //プレイヤーとの距離を設定
        switch (distance_state)
        {
            case DISTANCE_STATE.SHORT:
                limitDistance = shortlimitDistance;
                break;
            case DISTANCE_STATE.MIDDLE:
                limitDistance = middlelimitDistance;
                break;
            case DISTANCE_STATE.LONG:
                limitDistance = longlimitDistance;
                break;
        }

        //プレイヤーの距離が一定以上でなければ、敵キャラクターはプレイヤーへ近寄ろうとしない
        if (distance >= limitDistance)
        {

            //プレイヤーとの距離が制限値以上なので普通に近づく
            transform.position = transform.position + (direction * speed * Time.deltaTime);

        }
        else if (distance < limitDistance)
        {

            //プレイヤーとの距離が制限値未満(近づき過ぎ)なので、後退する。
            transform.position = transform.position - (direction * speed * Time.deltaTime);
        }

        //プレイヤーの方を向く
        transform.rotation = Quaternion.LookRotation(direction);

        if (timer >= 180)
        {
            int var;
            var = Random.Range(0, 3);
            Debug.Log(var);
            if (var == 0)
            {
                distance_state = DISTANCE_STATE.SHORT;
                Debug.Log("short");
            }
            if (var == 1)
            {
                distance_state = DISTANCE_STATE.MIDDLE;
                Debug.Log("middle");
            }
            if (var == 2)
            {
                distance_state = DISTANCE_STATE.LONG;
                Debug.Log("long");
            }
            timer = 0;
        }

        if (atktimer >= 20)
        {
            int var;
            var = Random.Range(0, 60);
            if (var < 10) { }
            else if (var < 30) { Attack(); }
            else { }
            atktimer = 0;
        }

        timer += 1;
        atktimer += 1;
    }
Пример #3
0
    //毎フレームに一度
    void Update()
    {
        if (enemy_stater_.isMeleed || !hp_manager_.isActive)
        {
            StopAllCoroutines();
            guard = false;
        }

        if (!hp_manager_.isActive) return;
        if (!enemy_stater_.isNormal) return;

        if (server_stage_manager_ == null)
        {
            server_stage_manager_ = FindObjectOfType<ServerStageManager>();
        }
        if (server_stage_manager_ == null) return;
        if (server_stage_manager_.IsEndTutorial) return;

        if (!enter_room_.isEnter) return;

        if (!guard)
        {
            StartCoroutine(Move());
            guard = true;
        }

        Vector3 playerPos = player.position;                 //プレイヤーの位置
        Vector3 direction = playerPos - transform.position; //方向と距離を求める。
        float distance = direction.sqrMagnitude;            //directionから距離要素だけを取り出す。
        direction = direction.normalized;                   //単位化(距離要素を取り除く)
        //direction.y = 0f;                                   //後に敵の回転制御に使うためY軸情報を消去。これにより敵が上下を向かなくなる。

        //経過時間を取得
        searchTime += Time.deltaTime;

        if (searchTime >= 1.0f) {
            //最も近かったオブジェクトを取得
            nearObj = serchTag(gameObject, "Player");
            player = nearObj.transform;

            //経過時間を初期化
            searchTime = 0;
        }

        //プレイヤーとの距離を設定

        switch (distance_state)
        {
            case DISTANCE_STATE.SHORT:
                limitDistance = shortlimitDistance;
                break;
            case DISTANCE_STATE.MIDDLE:
                limitDistance = middlelimitDistance;
                break;
            case DISTANCE_STATE.LONG:
                limitDistance = longlimitDistance;
                break;
        }

        //プレイヤーの方を向く
        transform.rotation = Quaternion.LookRotation(direction);

        if (timer >= 180)
        {
            int var;
            var = UnityEngine.Random.Range(0, 3);
            if (var == 0)
            {
                distance_state = DISTANCE_STATE.SHORT;
            }
            if (var == 1)
            {
                distance_state = DISTANCE_STATE.MIDDLE;
            }
            if (var == 2)
            {
                distance_state = DISTANCE_STATE.LONG;
            }
            timer = 0;
        }

        if (atktimer >= 20)
        {
            int var;
            var = UnityEngine.Random.Range(0, 60);
            if (var < 10) { }
            else if (var < 30)
            {
                Attack();
            }
            else { }
            atktimer = 0;
        }

        timer += 1;
        atktimer += 1;
    }
Пример #4
0
    void OnTriggerEnter(Collider collider)
    {
        if (!isServer) return;

        if (collider.gameObject.layer != layer_num_) return;

        if (server_stage_manager_ == null)
        {
            server_stage_manager_ = FindObjectOfType<ServerStageManager>();
        }
        if (server_stage_manager_ == null) return;

        if (server_stage_manager_.IsEndTutorial) return;

        hp -= collider.gameObject.GetComponent<BulletPower>().getPower;
        Destroy(collider.gameObject);
        var hit_effect = Instantiate(hit_effect_prefab);
        hit_effect.transform.SetParent(gameObject.transform);
        hit_effect.transform.position = collider.gameObject.transform.position;
        NetworkServer.Spawn(hit_effect);

        if (noise_effect_ != null)
        {
            if (saved_noise_effect_ == null)
            {
                var effect = Instantiate<GameObject>(noise_effect_);
                var effect_transform = effect.transform;
                effect_transform.SetParent(transform);
                effect_transform.localPosition = noise_effect_.transform.position;
                effect_transform.localScale = noise_effect_.transform.localScale;
                effect_transform.localRotation = noise_effect_.transform.rotation;
                effect.name = noise_effect_.name;

                Destroy(effect, 8.0f);

                saved_noise_effect_ = effect;
            }
        }

        if (hp < 0)
        {
            hp = 0;
            GetComponent<Rigidbody>().freezeRotation = false;
        }

        if (gameObject.tag != "Player") return;

        sound_manager_.PlaySE(12);
    }
Пример #5
0
 void Start()
 {
     var id = GetComponent<Identificationer>().id;
     hp = FindObjectOfType<AirFrameParameter>().GetMaxHP(id);
     MAX_HP = hp;
     sound_manager_ = FindObjectOfType<SoundManager>();
     server_stage_manager_ = FindObjectOfType<ServerStageManager>();
 }
Пример #6
0
 public override void OnStartServer()
 {
     base.OnStartServer();
     server_stage_manager_ = FindObjectOfType<ServerStageManager>();
 }