【问题标题】:Unity Collision Detection - Adding GUI Score on Collision?Unity 碰撞检测 - 在碰撞中添加 GUI 分数?
【发布时间】:2016-12-01 18:54:56
【问题描述】:

我正在 Unity 中制作弹球游戏,但遇到了问题。当弹球与圆柱体碰撞以增加分数时,它不起作用。我已经在 Unity 中标记了圆柱体,并将这个脚本附加到弹球上。它甚至没有出现在调试日志中。

感谢您的建议。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class Score : MonoBehaviour {
public int scorePoint = 10;
public int MaxScore;
public Text ScoreText;


// Use this for initialization
void Start () {
    ScoreText = GetComponent<Text>();
    ScoreText.text = "Score: " + scorePoint;
}

void OnTriggerEnter (Collider other)
{
    if (other.gameObject.tag == "Cylinder")
    {
        Debug.Log("Collision detected");
        scorePoint+=10;

    }
}
// Update is called once per frame
void Update()
{

}
}

【问题讨论】:

  • 您知道,当您的问题在 Unity Answers 上因正当理由和解决问题的线索而被拒绝时,看到您在 StackOverflow 上提出完全相同的问题,真是令人失望。无法进行一点研究来解决您的问题不会让您走得太远。
  • 另外,TiggerCollision 不是一回事...尝试使用OnCollisionEnter()
  • @Hellium 真的很迷人,我会提醒媒体的。

标签: c# unity3d collision detection


【解决方案1】:

确保每个对象上都有一个盒子碰撞器。 OnTriggerEnter 仅在两个盒子碰撞器相互碰撞时调用。这是为什么它不起作用但没有更多信息我不能保证的最可能的罪魁祸首。

【讨论】:

  • 所以我放大了碰撞器的大小,它成功触发并显示在调试日志中!然而,分数仍然停留在零。是否存在逻辑错误导致此问题?
  • 您正在增加内存中的分数,但您从未更新文本。在 if 语句中设置 ScoreText.text = scorepoint
  • 另外,如果它以 0 而不是 10 开头,可能是因为您在检查器中将其设置为 0。如果您不想在检查器中编辑数字,请将变量设为私有。
  • 所以我了解到当我将碰撞器设置为“触发”时会检测到碰撞。但是,当检查该框时,球就通过对象进行,控制台表示“nullreferenceException:对象引用未设置为对象分数的实例.OnTriggerenter(UnityEngine.collider其他)(在资产/记录中:24 )"
  • 有很多关于如何为触发事件正确设置 Box Colliders 的教程。建议多看几部。 unity3d.com/learn/tutorials/topics/physics/colliders-triggers
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 2011-09-05
  • 2019-04-30
相关资源
最近更新 更多