Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中从不同的类访问布尔值#_C#_Class_If Statement_Unity3d_Boolean - Fatal编程技术网

C# 在C中从不同的类访问布尔值#

C# 在C中从不同的类访问布尔值#,c#,class,if-statement,unity3d,boolean,C#,Class,If Statement,Unity3d,Boolean,我有一个冲突脚本,其中我将布尔值设置为true或false using UnityEngine; using System.Collections; public class IsTriggerLockCamera : MonoBehaviour { public bool CameraLock = false; public void OnTriggerStay2D(Collider2D other) { CameraLock = true;

我有一个冲突脚本,其中我将布尔值设置为true或false

using UnityEngine;
using System.Collections;

public class IsTriggerLockCamera : MonoBehaviour {
    public bool CameraLock = false;

    public void OnTriggerStay2D(Collider2D other) {
        CameraLock = true;
        Debug.Log ("Im inside"); 

    }

        public void OnTriggerExit2D(Collider2D other) {
        CameraLock = false;
        Debug.Log ("I exited");
    }


}
我想从我的相机脚本中访问这个布尔值,我尝试了这个

if (CameraLock == true) {
            Debug.Log ("Im locked");
        }
但是,我得到一个错误,说CameraLock在当前上下文中不存在。布尔值是公共的,所以我很困惑


编辑:我觉得我没有提供足够好的信息,所以我将首先发布整个相机脚本,然后澄清

using System;
using UnityEngine;

    public class CameraFollowLockY : MonoBehaviour
    {
        public Transform target;
        public float damping = 1;
        public float lookAheadFactor = 3;
        public float lookAheadReturnSpeed = 0.5f;
        public float lookAheadMoveThreshold = 0.1f;

        private float m_OffsetZ;
        private Vector3 m_LastTargetPosition;
        private Vector3 m_CurrentVelocity;
        private Vector3 m_LookAheadPos;

        private void Start()
        {
            m_LastTargetPosition = target.position;
            m_OffsetZ = (transform.position - target.position).z;
            transform.parent = null;
        }


        private void Update()
        {
            float xMoveDelta = (target.position - m_LastTargetPosition).x;

            bool updateLookAheadTarget = Mathf.Abs(xMoveDelta) > lookAheadMoveThreshold;

            if (updateLookAheadTarget)
            {
                m_LookAheadPos = lookAheadFactor*Vector3.right*Mathf.Sign(xMoveDelta);
            }
            else
            {
                m_LookAheadPos = Vector3.MoveTowards(m_LookAheadPos, Vector3.zero, Time.deltaTime*lookAheadReturnSpeed);
            }

            Vector3 aheadTargetPos = target.position + m_LookAheadPos + Vector3.forward*m_OffsetZ;
            Vector3 newPos = Vector3.SmoothDamp(transform.position, aheadTargetPos, ref m_CurrentVelocity, damping);

            transform.position = newPos;
            transform.position = new Vector3(transform.position.x, 0, transform.position.z);

            m_LastTargetPosition = target.position;


        if (CameraLock == true) {
            Debug.Log ("Im locked");
        }
}
IsTriggerLockCamera
是我在Unity中用于不可见碰撞器的脚本。我的相机一直聚焦在玩家身上,但我希望它在玩家接近地图边缘时停止移动,这样他就可以注意到地图即将结束。最初的计划是,当玩家输入信息时,对撞机将发送信息,而不是
Debug.Log(“Im锁定”)
是将相机锁定到位的代码。我不知道这个解决方案是否非常优雅,我想为没有事先正确地澄清一切而道歉,但我可能在2个月前开始编写代码(我只编写了Rails网站),大约一周前我进入了C#游戏开发,所以我仍然缺少正确描述我遇到的问题所需的术语。到目前为止,没有任何建议奏效。最近的工作建议是小野仙台的建议,但显然不允许使用“新”创建单一行为



Edit2:开始制作布尔静态不起作用,但后来我意识到我也必须对我的相机脚本进行一些更改,所以现在它可以工作了,但Philip说这是一个糟糕的建议-我个人不知道为什么,我认为这类似于使用!重要的是,在CSS中,您只能将其作为最后手段使用,因为它使代码没有那么灵活-因此我仍然愿意接受这些想法。

您可能需要尝试基于对象实例对
CameraLock
属性进行完整引用,如中所示

    var objRef = new IsTriggerLockCamera(); // Just an example of object reference - 
                                            // You may already have one
                                            // on your code.

    if (objRef.CameraLock) {
        Debug.Log ("Im locked");
    }

这是因为
CameraLock
被标记为
public
,而不是
static
——它只存在于实例化的对象上。

您可能需要基于对象实例尝试对
CameraLock
属性的完整引用,如中所示

    var objRef = new IsTriggerLockCamera(); // Just an example of object reference - 
                                            // You may already have one
                                            // on your code.

    if (objRef.CameraLock) {
        Debug.Log ("Im locked");
    }

这是因为
CameraLock
被标记为
public
,而不是
static
——它只存在于实例化的对象上。

您可能需要基于对象实例尝试对
CameraLock
属性的完整引用,如中所示

    var objRef = new IsTriggerLockCamera(); // Just an example of object reference - 
                                            // You may already have one
                                            // on your code.

    if (objRef.CameraLock) {
        Debug.Log ("Im locked");
    }

这是因为
CameraLock
被标记为
public
,而不是
static
——它只存在于实例化的对象上。

您可能需要基于对象实例尝试对
CameraLock
属性的完整引用,如中所示

    var objRef = new IsTriggerLockCamera(); // Just an example of object reference - 
                                            // You may already have one
                                            // on your code.

    if (objRef.CameraLock) {
        Debug.Log ("Im locked");
    }

这是因为
CameraLock
标记为
public
,而不是
static
——它只存在于实例化的对象上。

如果您的相机需要访问IsTriggerLockCamera,则依赖项注入是一种很好的方法,可以让您清楚地了解:

class Camera{
    private readonly IsTriggerLockCamera _locker;
    public Camera(IsTriggerLockCamera locker){
       if (locker== null)
       {
           throw new ArgumentNullException("locker");
       }
       _locker = locker;
    }
    public void whatevermethod(){
        if (_locker.CameraLock){
           ...
        } 
    }
}

如果您的相机需要访问IsTriggerLockCamera,则依赖项注入是一种很好的方式,可以清楚地说明:

class Camera{
    private readonly IsTriggerLockCamera _locker;
    public Camera(IsTriggerLockCamera locker){
       if (locker== null)
       {
           throw new ArgumentNullException("locker");
       }
       _locker = locker;
    }
    public void whatevermethod(){
        if (_locker.CameraLock){
           ...
        } 
    }
}

如果您的相机需要访问IsTriggerLockCamera,则依赖项注入是一种很好的方式,可以清楚地说明:

class Camera{
    private readonly IsTriggerLockCamera _locker;
    public Camera(IsTriggerLockCamera locker){
       if (locker== null)
       {
           throw new ArgumentNullException("locker");
       }
       _locker = locker;
    }
    public void whatevermethod(){
        if (_locker.CameraLock){
           ...
        } 
    }
}

如果您的相机需要访问IsTriggerLockCamera,则依赖项注入是一种很好的方式,可以清楚地说明:

class Camera{
    private readonly IsTriggerLockCamera _locker;
    public Camera(IsTriggerLockCamera locker){
       if (locker== null)
       {
           throw new ArgumentNullException("locker");
       }
       _locker = locker;
    }
    public void whatevermethod(){
        if (_locker.CameraLock){
           ...
        } 
    }
}

您需要设置要从其他脚本(静态脚本和公共脚本)访问的变量

using UnityEngine;
using System.Collections;

public class IsTriggerLockCamera : MonoBehaviour {
public static bool CameraLock = false;

public void OnTriggerStay2D(Collider2D other) {
    CameraLock = true;
    Debug.Log ("Im inside"); 

}

    public void OnTriggerExit2D(Collider2D other) {
    CameraLock = false;
    Debug.Log ("I exited");
}
}

然后您可以访问CameraLock:

if (CameraLock == true) {
        Debug.Log ("Im locked");
    }

您需要设置要从其他脚本(静态脚本和公共脚本)访问的变量

using UnityEngine;
using System.Collections;

public class IsTriggerLockCamera : MonoBehaviour {
public static bool CameraLock = false;

public void OnTriggerStay2D(Collider2D other) {
    CameraLock = true;
    Debug.Log ("Im inside"); 

}

    public void OnTriggerExit2D(Collider2D other) {
    CameraLock = false;
    Debug.Log ("I exited");
}
}

然后您可以访问CameraLock:

if (CameraLock == true) {
        Debug.Log ("Im locked");
    }

您需要设置要从其他脚本(静态脚本和公共脚本)访问的变量

using UnityEngine;
using System.Collections;

public class IsTriggerLockCamera : MonoBehaviour {
public static bool CameraLock = false;

public void OnTriggerStay2D(Collider2D other) {
    CameraLock = true;
    Debug.Log ("Im inside"); 

}

    public void OnTriggerExit2D(Collider2D other) {
    CameraLock = false;
    Debug.Log ("I exited");
}
}

然后您可以访问CameraLock:

if (CameraLock == true) {
        Debug.Log ("Im locked");
    }

您需要设置要从其他脚本(静态脚本和公共脚本)访问的变量

using UnityEngine;
using System.Collections;

public class IsTriggerLockCamera : MonoBehaviour {
public static bool CameraLock = false;

public void OnTriggerStay2D(Collider2D other) {
    CameraLock = true;
    Debug.Log ("Im inside"); 

}

    public void OnTriggerExit2D(Collider2D other) {
    CameraLock = false;
    Debug.Log ("I exited");
}
}

然后您可以访问CameraLock:

if (CameraLock == true) {
        Debug.Log ("Im locked");
    }

我想提出一些方法

  • 将CameraLock变量设置为受保护
  • 创建一个新类,并将IsTriggerLockCamera类作为基类
  • 使用CameraLock变量并对其进行操作

  • 谢谢,

    我想建议一些方法

  • 将CameraLock变量设置为受保护
  • 创建一个新类,并将IsTriggerLockCamera类作为基类
  • 使用CameraLock变量并对其进行操作

  • 谢谢,

    我想建议一些方法

  • 将CameraLock变量设置为受保护
  • 创建一个新类,并将IsTriggerLockCamera类作为基类
  • 使用CameraLock变量并对其进行操作

  • 谢谢,

    我想建议一些方法

  • 将CameraLock变量设置为受保护
  • 创建一个新类,并将IsTriggerLockCamera类作为基类
  • 使用CameraLock变量并对其进行操作

  • 谢谢,

    是的,它是公共的-但是您需要访问它,它是关于
    IsTriggerLockCamera
    的特定实例的,例如
    if(triggerLockCamera.CameraLock)
    其中
    triggerLockCamera
    将是
    IsTriggerLockCamera
    类型的变量。你有这样一个变量吗?您是否创建过该类的实例?搜索稍加修改的标题(变量而非“布尔值”)会得到大量结果-请确保检查它们,并澄清您尝试过的方法以及它们如何不适用于您的案例。显示摄影机脚本的代码。应通过摄影机的构造函数将IsTriggerLockCamera的实例注入其中。第一个脚本放在哪里?在游戏对象中?是的,它是公共的-但是你需要访问它,它是关于
    IsTriggerLockCamera
    的一个特定实例,例如
    if(triggerLockCamera.CameraLock)
    wh