我正在尝试用Unity编写游戏代码。我的计划是编写一个脚本,在脚本与玩家碰撞对象时使bool变量为true,然后,另一个脚本将每次都检查bool是否为true。如果是这样,我将打印“ Leper Jump”。由于bool变量在另一个脚本中,因此我需要实例化它,并且代码看起来完全正确,但是控制台在第17行说“ NullReferenceException:对象引用未设置为对象的实例”。 抱歉,如果这听起来有些愚蠢,但我已经尝试解决了几个小时,但仍未找到解决方法,请您帮我吗?
以下是我将布尔值转换为true的播放器碰撞的代码:
Set-ADUser -Identity suser -Add @{msExchDelegateListLink='CN=Customer Care,OU=Onlinetenent.onmicrosoft.com,OU=Microsoft Exchange Hosted Organizations,DC=NMPR19A04,DC=PROD,DC=OUTLOOK,DC=COM'}
Set-ADUser : The name reference is invalid
At line:3 char:77
+ ... rt.com'} | Set-ADUser -Add @{msExchDelegateListLink='CN=Customer Car ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (CN=user test...=proddom,DC=net:ADUser) [Set-ADUser], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:8373,Microsoft.ActiveDirectory.Management.Commands.SetADUser
这是我尝试检查布尔值是否正确的脚本(错误在这里):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LeperTrigger : MonoBehaviour
{
public GameObject Leper;
public GameObject trigger;
public bool IsOnLeper = false;
void Update()
{
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag == "Player")
{
Debug.Log("IsOnLeper comes true");
IsOnLeper = true;
}
}
}
错误是:NullReferenceException:对象引用未设置为对象的实例(第17行)
使用using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LeperAI : MonoBehaviour
{
public LeperTrigger lepertriggerinstance;
void Start()
{
lepertriggerinstance = GameObject.FindWithTag("enemy").GetComponent<LeperTrigger>();
}
void Update()
{
if(lepertriggerinstance.GetComponent<LeperTrigger>().IsOnLeper == true)
{
Debug.Log("Leper jump");
}
}
}
不会更改错误。
答案 0 :(得分:0)
变量lepertriggerinstance
已经是LeperTrigger
的实例,因此在尝试获取bool的值时,请勿使用
if(lepertriggerinstance.GetComponent<LeperTrigger>().IsOnLeper == true)
使用if(lepertriggerinstance.IsOnLeper == true)
第二种选择是,如果场景中只有LeperTrigger的一个实例,或者该值可以用于所有实例,则只需将bool IsOnLeper设为静态即可。这样,您就可以使用if(LeperTrigger.IsOnLeper)
答案 1 :(得分:0)
您不应该在LeperTrigger
中已经获得的LeperTrigger
对象上寻找另一个Start()
组件。我更改了下面的第17行。
如果仍然遇到相同的错误,请确保进行检查:
enemy
的物体enemy
的对象具有附加的LeperTrigger
脚本。最后,如果在场景开始后 实例化enemy
对象,请记住Start()
的{{1}}方法不会再次运行,因此将LeperAI
对象保留为空。
lepertriggerinstance
答案 2 :(得分:0)
好像您是在LeperTrigger
寻找LeperAI
之后创建LeperTrigger
的。我会设置与您当前的工作方式相反的方式。
我会用 LeperAI 标记打开的GameObject LeperAI
,然后在LeperTrigger
中找到LeperAI
并设置其lepertriggerinstance
的值本身:
void Start()
{
GameObject.FindWithTag("LeperAI").GetComponent<LeperAI>().lepertriggerinstance = this;
}
然后在LeperAI
中,如下更改if语句:
public LeperTrigger lepertriggerinstance;
void Start()
{
lepertriggerinstance = null;
}
void Update()
{
if( lepertriggerinstance != null && lepertriggerinstance.IsOnLeper )
{
Debug.Log("Leper jump");
}
}
...,以便LeperAI
检查是否创建了LeperTrigger
实例,如果已经创建,则检查其值IsOnLeper
。
答案 3 :(得分:0)
看,这更简单,我不知道你是否找到了解决方案,假设你的 LeperTrigger 脚本是你的 Leper 游戏对象的一个组件,我认为这可能是你需要的:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LeperAI : MonoBehaviour
{
void Update()
{
if (GameObject.Find("Leper").GetComponent<LeperTrigger>().IsOnLeper == true)
{
Debug.Log("LeperJump");
}
}
}