XuYiTao1998 2022-03-29 15:08 采纳率: 0%
浏览 25

多个预制体在场景中共用一个脚本,但是有时会有的预制体脚本会自动关掉

不同的好多预制体共用一个脚本,生成的多了之后有的预制体身上挂载的此脚本会自动关闭
脚本就是下面这个,这个是什么问题,咋解决

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

public class WeponControl : MonoBehaviour
{
    //目标敌人
    private GameObject Enemy;
    //从自身到目标敌人的向量
    Vector3 Direction;
    [Header("爆炸特效")]
    public GameObject BoomEff;
    [Header("爆炸之后的火焰特效")]
    public GameObject FireEff;
    float time = 1;
    [Header("锁定或捕捉状态")]
    Text State;
    
    //发射武器后的小地图外边框
    
    // Start is called before the first frame update
    void Awake()
    {
        Enemy = CameraControl.Target;
        Direction = (Enemy.transform.position - this.transform.position).normalized;
        State = GameObject.Find("Text瞄准状态").GetComponent<Text>();
        
       
       

    }
    private void Start()
    {
        
    }
    // Update is called once per frame
    void Update()
    {
        
        


        if (Enemy == null)
        {
            Destroy(this.gameObject);
        }
        else
        {


            Direction = (new Vector3(Enemy.transform.position.x, Enemy.transform.position.y + 30, Enemy.transform.position.z) - this.transform.position).normalized;
            this.transform.LookAt(new Vector3(Enemy.transform.position.x, Enemy.transform.position.y + 30, Enemy.transform.position.z));
            this.transform.position += Direction * Time.deltaTime * 450;

            if (Vector3.Distance(Enemy.transform.position, this.transform.position) <= 70)
            {
                //已经击中目标
                
                Debug.Log("距离小于70米");
                Enemy.SetActive(false);
                Destroy(this.gameObject);
                GameObject CObj = Instantiate(BoomEff);
                CObj.transform.position = Enemy.transform.position;
                GameObject CObj1 = Instantiate(FireEff);
                CObj1.transform.position = Enemy.transform.position;
                Enemy.GetComponent<AudioSource>().Play();
                this.GetComponent<AudioSource>().Stop();
                Destroy(CObj, 1f);
                State.text = "未锁定";
                //炮弹销毁之后重新为没发射过的状态
                CameraControl.iFire = false;
                CameraControl.iDir = true;

            }


        }
        this.GetComponent<AudioSource>().volume = time;
        time -= Time.deltaTime * 0.5f;

    }

  • 写回答

2条回答 默认 最新

  • 於黾 2022-03-29 15:24
    关注

    脚本自动关闭,通常是由于脚本抛错误了
    你该加try就加try
    既然代码里用了反射,那你要考虑到反射有可能找不到对应的物体这种情况
    你默认肯定能找到,那万一找不到不就崩溃了
    -=-=-=
    另,你应该用面向对象的思路来编程,尽量解耦
    一个物体要操作另一个物体,你不要直接delete对方,而应该给对方的脚本发一个消息,对方自己来处理删除之类的操作
    你多个物体之间互动,都互相直接去修改对方,不乱套了吗

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月29日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。