Unity 3D(C#)-如何连接两个以上用作触发器的盒碰撞器
当前错误:NullReferenceException:对象引用未设置为对象BackboardTrigger.OnTriggerEnter(UnityEngine.Collider altCollider)的实例(位于Assets/Scripts/BackboardTrigger.cs:10) 我相信我的问题不同于,什么是空引用异常,如何修复它?,因为它需要一个狭隘的答案。另一篇文章提供了NullReferenceException是什么的广泛范围,而我需要知道如何连接两个以上的触发器 我是C#的新手,我正在尝试重新制作一个简单的篮球游戏。到目前为止,我正试图在球首先击中篮板并依次进入篮筐时触发一个得分。本教程目前讲授如何在球开始进入篮筐并到达篮筐底部附近时触发得分 我的PrimaryTrigger脚本:Unity 3D(C#)-如何连接两个以上用作触发器的盒碰撞器,c#,unity3d,C#,Unity3d,当前错误:NullReferenceException:对象引用未设置为对象BackboardTrigger.OnTriggerEnter(UnityEngine.Collider altCollider)的实例(位于Assets/Scripts/BackboardTrigger.cs:10) 我相信我的问题不同于,什么是空引用异常,如何修复它?,因为它需要一个狭隘的答案。另一篇文章提供了NullReferenceException是什么的广泛范围,而我需要知道如何连接两个以上的触发器 我是C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PrimaryTrigger : MonoBehaviour {
void OnTriggerEnter(Collider collider)
{
SecondaryTrigger trigger = GetComponentInChildren<SecondaryTrigger>();
trigger.ExpectCollider(collider);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SecondaryTrigger : MonoBehaviour {
Collider expectedCollider;
Collider possibleCollider;
public void ExpectCollider(Collider collider)
{
expectedCollider = collider;
}
public void PossibleCollider(Collider altCollider)
{
possibleCollider = altCollider;
}
void OnTriggerEnter(Collider otherCollider)
{
if(otherCollider == expectedCollider && otherCollider == possibleCollider)
{
ScoreKeeper scoreKeeper = FindObjectOfType<ScoreKeeper>();
scoreKeeper.IncrementScore(1);
}
else if(otherCollider == expectedCollider)
{
ScoreKeeper scoreKeeper = FindObjectOfType<ScoreKeeper>();
scoreKeeper.IncrementScore(2);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BackboardTrigger : MonoBehaviour {
void OnTriggerEnter(Collider altCollider)
{
SecondaryTrigger newTrigger = GetComponent<SecondaryTrigger>();
newTrigger.PossibleCollider(altCollider);
}
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类主要触发因素:单一行为{
void ontriggenter(碰撞器-碰撞器)
{
SecondaryTrigger=getComponentChildren();
触发器。对撞机(对撞机);
}
}
第二个触发器脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PrimaryTrigger : MonoBehaviour {
void OnTriggerEnter(Collider collider)
{
SecondaryTrigger trigger = GetComponentInChildren<SecondaryTrigger>();
trigger.ExpectCollider(collider);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SecondaryTrigger : MonoBehaviour {
Collider expectedCollider;
Collider possibleCollider;
public void ExpectCollider(Collider collider)
{
expectedCollider = collider;
}
public void PossibleCollider(Collider altCollider)
{
possibleCollider = altCollider;
}
void OnTriggerEnter(Collider otherCollider)
{
if(otherCollider == expectedCollider && otherCollider == possibleCollider)
{
ScoreKeeper scoreKeeper = FindObjectOfType<ScoreKeeper>();
scoreKeeper.IncrementScore(1);
}
else if(otherCollider == expectedCollider)
{
ScoreKeeper scoreKeeper = FindObjectOfType<ScoreKeeper>();
scoreKeeper.IncrementScore(2);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BackboardTrigger : MonoBehaviour {
void OnTriggerEnter(Collider altCollider)
{
SecondaryTrigger newTrigger = GetComponent<SecondaryTrigger>();
newTrigger.PossibleCollider(altCollider);
}
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类第二触发器:单一行为{
对撞机预期对撞机;
对撞机可能对撞机;
公共碰撞器(碰撞器碰撞器)
{
expectedCollider=碰撞器;
}
公共无效可能碰撞器(碰撞器altCollider)
{
可能对撞机=备用对撞机;
}
无效OnTiggerEnter(碰撞器或其他碰撞器)
{
if(otherCollider==expectedCollider&&otherCollider==possibleCollider)
{
ScoreKeeper ScoreKeeper=FindObjectOfType();
记分员。递增分数(1);
}
else if(otherCollider==expectedCollider)
{
ScoreKeeper ScoreKeeper=FindObjectOfType();
记分员。递增分数(2);
}
}
}
BackboardTrigger脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PrimaryTrigger : MonoBehaviour {
void OnTriggerEnter(Collider collider)
{
SecondaryTrigger trigger = GetComponentInChildren<SecondaryTrigger>();
trigger.ExpectCollider(collider);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SecondaryTrigger : MonoBehaviour {
Collider expectedCollider;
Collider possibleCollider;
public void ExpectCollider(Collider collider)
{
expectedCollider = collider;
}
public void PossibleCollider(Collider altCollider)
{
possibleCollider = altCollider;
}
void OnTriggerEnter(Collider otherCollider)
{
if(otherCollider == expectedCollider && otherCollider == possibleCollider)
{
ScoreKeeper scoreKeeper = FindObjectOfType<ScoreKeeper>();
scoreKeeper.IncrementScore(1);
}
else if(otherCollider == expectedCollider)
{
ScoreKeeper scoreKeeper = FindObjectOfType<ScoreKeeper>();
scoreKeeper.IncrementScore(2);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BackboardTrigger : MonoBehaviour {
void OnTriggerEnter(Collider altCollider)
{
SecondaryTrigger newTrigger = GetComponent<SecondaryTrigger>();
newTrigger.PossibleCollider(altCollider);
}
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共级别篮板起爆手:单一行为{
无效对撞机(对撞机和对撞机)
{
SecondaryTrigger newTrigger=GetComponent();
可能的对撞机(altCollider);
}
}
任何形式的帮助都将不胜感激。我在Unity中的第一个游戏。欢迎来到StackOverflow,可能会重复,请花些时间阅读。恐怕您的问题很快就要结束了,因为以前也有人问过类似的问题。错误来自
BackboardTrigger
脚本。您需要将SecondaryTrigger
附加到BackboardTrigger
脚本附加到的同一游戏对象。如果SecondaryTrigger
已经连接到另一个游戏对象,您只需找到该游戏对象,然后从中获取组件SecondaryTrigger newTrigger=GameObject.Find(“其他对象”).GetComponent()代码>@程序员谢谢你的帮助。为什么我不需要搜索带有主触发器的游戏对象呢。第一和第二阶段相互配合良好。顺便说一下,它们都是同一个游戏对象的层次结构中列出的框碰撞器。对不起,我不明白你在说什么。试试我的第一句话。我还认为,您应该遵循以下步骤之一,以充分了解组件如何在统一中工作。