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