CS大战4

当敌人距离玩家10米时系统提示: 在玩家哪个方向,警告提示+警报+2s红色,退出敌人攻击范围,重新判定;

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

/*
*创建者:
*创建时间:
*描述:
*版本:
*/
public class Player : MonoBehaviour
{
     GameObject alarm,alarmLight;//警告图标文本(共享),警告灯光(个体)
    Text alarmDirection;//警告方位文本;(共享)
    bool isTargetCamera;//判断瞄准镜开关状态;
    Enemy enemyAlarm;//警告的游戏对象的脚本(共享)
    GameObject go;//警告过的游戏对象(共享)玩家切换枪支不重复触发
    GameObject gameOverPanel;//游戏结束面板(共享)
    Text tap;//游戏结束文本;(共享)
    float speed = 1;//(共享)
    //所有共享数据需要放在游戏管理器中
    void Start()
    {
         alarmLight = transform.GetChild(1).gameObject;//获取警告灯光;
    }
    void Update()
    {  
        Detection();//探测敌人方位方法;
    }
    void Detection()//探测
    {
        if (GameManager.GetInstance().numb == 3)//击倒3个敌人
        {
            GameObject[] gameObjects = GameObject.FindGameObjectsWithTag(StaticGameResources.enemyTag);//当玩家击败敌人数量到达3时,场上敌人已经全部击败,进行克隆生成下一波3个敌人,并将场面上新克隆出的3个敌人收集在对象数组;
            if (gameObjects.Length==3)
            {
                GameManager.GetInstance().enemys = gameObjects;//将获取到敌人存放进游戏管理器进行共享,防止切换玩家,玩家不识别场景中的敌人;
                for (int i = 0; i<3;i++)//对象数组存储所有敌人;
                {
                    GameManager.GetInstance().list.Add(GameManager.GetInstance().enemys[i]);//方便动态消失;
                    GameManager.GetInstance().numb--;//读取到场景中一个敌人,击败敌人数量减少,防止重复添加相同的对象(不使用Contains的原因是场景中克隆出来的对象是一样的,无法判断不同);
                }
            }
             
        }
        if (GameManager.GetInstance().list.Count>0)//防止场景中敌人数量为0,进行查找报空;
        {
            for (int i = 0; i < GameManager.GetInstance().list.Count; i++)
            {
                if (GameManager.GetInstance().list[i]!=null&&Vector3.Distance(transform.position, GameManager.GetInstance().list[i].transform.position) <= 10 )//当玩家和敌人距离<10时将该敌人赋值给游戏管理器中的一个游戏对象,并且获取该敌人的脚本同样赋值给游戏管理器中的一个脚本对象;
                {
                    GameManager.GetInstance().go= GameManager.GetInstance().list[i];
                    GameManager.GetInstance().enemyAlarm = GameManager.GetInstance().list[i].GetComponent<Enemy>();
                    if (GameManager.GetInstance().enemyAlarm.alarmFirst)//通过上一步获取到的脚本对象,对是否是第一次警告的布尔值(alarmFirst)判断,若为真则触发警报;
                    {
                        GameManager.GetInstance(). alarm.SetActive(true);//警报文本(公共UI)
                        alarmLight.SetActive(true);(玩家自身子对象)
                        float a = Vector3.Dot(transform.forward, GameManager.GetInstance().list[i].transform.position - transform.position);//前后方位;
                        Vector3 b = Vector3.Cross(transform.forward, GameManager.GetInstance().list[i].transform.position - transform.position);//左右方位
                        if (a >= 0 && b.y > 0)
                        {
                            GameManager.GetInstance().alarmDirection.text = "右前方";
                        }
                        else if (a >= 0 && b.y < 0)
                        {
                            GameManager.GetInstance().alarmDirection.text = "左前方";
                        }
                        else if (a < 0 && b.y > 0)
                        {
                            GameManager.GetInstance().alarmDirection.text = "右后方";
                        }
                        else
                        {
                            GameManager.GetInstance().alarmDirection.text = "左后方";
                        }                        
                        Invoke("Close", 2f);
                       
                    }                    
                }
                if (GameManager.GetInstance().go != null && Vector3.Distance(transform.position, GameManager.GetInstance(). go.transform.position) > 10)//若接触过的游戏对象距离>10,将警告重新赋值true,距离又<10时,继续警告;
                {
                    GameManager.GetInstance(). enemyAlarm = GameManager.GetInstance().go.GetComponent<Enemy>();
                    GameManager.GetInstance(). enemyAlarm.alarmFirst=true;
                }
            }
        }
            
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值