You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity脚本间布尔值传递问题求助:代码未正常输出布尔值

问题解决方法

核心错误:局部变量覆盖了成员变量

你的sender脚本里,OnTriggerEnter方法内的bool ktp = true;是重新声明了一个局部变量,和类顶部的public bool ktp不是同一个。也就是说,你修改的只是临时的局部变量,类的成员变量ktp根本没被更新,接收脚本自然读不到正确的值。

修正步骤

  1. 修改sender脚本
    把OnTriggerEnter里的代码改成直接赋值给成员变量,去掉前面的bool关键字:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class sender : MonoBehaviour
    {
        public bool ktp;
    
        void OnTriggerEnter(Collider other)
        {
            if (other.CompareTag("Player"))
            {
                ktp = true; // 直接修改类的成员变量,不再声明局部变量
            }
        }
    
        void Start()
        {
        }
    
        void Update()
        {
        }
    }
    
  2. 确保接收脚本的引用正确
    在Unity编辑器中,找到挂载empfänger脚本的物体,在Inspector面板里把挂载了sender脚本的游戏对象拖拽到script变量的赋值框里,确保引用不为空。

  3. 检查触发器触发条件

    • 挂载sender的物体必须带有Collider组件,并且勾选Is Trigger选项;
    • 标有"Player"标签的物体必须带有Collider组件,同时要有Rigidbody组件(即使勾选Is Kinematic也可以,否则触发器事件不会触发)。

可选优化:避免重复打印

你的接收脚本当前在Update里每帧都会判断并打印,等ktp为true后会持续刷控制台。可以改成只打印一次:

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

public class empfänger : MonoBehaviour
{
    public sender script;
    private bool hasPrinted = false;

    void Update()
    {
        if (script.ktp == true && !hasPrinted)
        {
            Debug.Log(script.ktp);
            hasPrinted = true;
        }
    }
}

内容的提问来源于stack exchange,提问作者yourlocalgermanalcoholic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 04:15:18