将 Active GameObject 设置为 true 在 Unity 5 中不起作用
SetActive GameObject to true not working in Unity 5
好吧,我使用 unity 5。我正在创建对话以与其他对象交互。当玩家靠近物体时,我按 return 键进行交互。
启动面板对话框已禁用 setActive(false)。
当玩家靠近其他物体并按下return键和面板setActive(true)时,方法更新,但此面板未启用,我不知道为什么。请帮助。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
[RequireComponent(typeof(Text))]
public class Dialogue : MonoBehaviour
{
private Text _textComponent;
public string[] DialogueStrings;
public float SecondsBetweenCharacters = 0.15f;
public float CharacterRateMultiplier = 0.5f;
public KeyCode DialogueInput = KeyCode.Return;
private bool _isStringBeingRevealed = false;
private bool _isDialoguePlaying = false;
private bool _isEndOfDialogue = false;
public GameObject ContinueIcon;
public GameObject StopIcon;
public GameObject Panel;
//Vector3 ThirdPersonController = GameObject.Find("ThirdPersonController").transform.position;
public GameObject thirdpersoncontroller;
// Use this for initialization
void Start ()
{
_textComponent = GetComponent<Text>();
_textComponent.text = "";
Panel.SetActive(false);
HideIcons();
}
// Update is called once per frame
void Update ()
{
if (thirdpersoncontroller.transform.position.z > 37.6 && thirdpersoncontroller.transform.position.z < 38.8) {
if (Input.GetKeyDown (KeyCode.Return)) {
Panel.SetActive(true);
if (!_isDialoguePlaying) {
_isDialoguePlaying = true;
StartCoroutine (StartDialogue ());
}
}
可能有四种原因(附解决方法)
您的条件不成立
thirdpersoncontroller.transform.position.z > 37.6 && thirdpersoncontroller.transform.position.z < 38.8
条件后记录,如果为真且问题仍然存在,
检查您的函数 (StartDialogue ()) 是否突然停用您的面板。 (如果也不是这样的话)
是否有任何其他脚本不会使面板停用?如果它也不是真的
那么,最后的问题是 Panel 是未激活的 GameObject 的子对象。您还可以查看 SetActive
的 Unity 文档
Note that a GameObject may be inactive because a parent is not active.
注意:此类问题是基于调试的(这就是为什么我以调试的方式回答你)我强烈建议你学习调试技巧,以便成为一名成功的程序员。
2 个解决方案:
您是否将此脚本放入 UI / GameObject 本身?对我来说有时它不起作用,因为它会自行禁用,脚本的 none 将起作用(即使您尝试将其设置为 active 回到 true)
第二个选项:
确保 UI 元素在 canvas 中,还有面板是 canvas 吗?使用 UI 你必须使用 .enabled = ,而不是 SetActive
希望对您有所帮助:)
好吧,我使用 unity 5。我正在创建对话以与其他对象交互。当玩家靠近物体时,我按 return 键进行交互。
启动面板对话框已禁用 setActive(false)。
当玩家靠近其他物体并按下return键和面板setActive(true)时,方法更新,但此面板未启用,我不知道为什么。请帮助。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
[RequireComponent(typeof(Text))]
public class Dialogue : MonoBehaviour
{
private Text _textComponent;
public string[] DialogueStrings;
public float SecondsBetweenCharacters = 0.15f;
public float CharacterRateMultiplier = 0.5f;
public KeyCode DialogueInput = KeyCode.Return;
private bool _isStringBeingRevealed = false;
private bool _isDialoguePlaying = false;
private bool _isEndOfDialogue = false;
public GameObject ContinueIcon;
public GameObject StopIcon;
public GameObject Panel;
//Vector3 ThirdPersonController = GameObject.Find("ThirdPersonController").transform.position;
public GameObject thirdpersoncontroller;
// Use this for initialization
void Start ()
{
_textComponent = GetComponent<Text>();
_textComponent.text = "";
Panel.SetActive(false);
HideIcons();
}
// Update is called once per frame
void Update ()
{
if (thirdpersoncontroller.transform.position.z > 37.6 && thirdpersoncontroller.transform.position.z < 38.8) {
if (Input.GetKeyDown (KeyCode.Return)) {
Panel.SetActive(true);
if (!_isDialoguePlaying) {
_isDialoguePlaying = true;
StartCoroutine (StartDialogue ());
}
}
可能有四种原因(附解决方法)
您的条件不成立
thirdpersoncontroller.transform.position.z > 37.6 && thirdpersoncontroller.transform.position.z < 38.8
条件后记录,如果为真且问题仍然存在,
检查您的函数 (StartDialogue ()) 是否突然停用您的面板。 (如果也不是这样的话)
是否有任何其他脚本不会使面板停用?如果它也不是真的
那么,最后的问题是 Panel 是未激活的 GameObject 的子对象。您还可以查看 SetActive
的 Unity 文档
Note that a GameObject may be inactive because a parent is not active.
注意:此类问题是基于调试的(这就是为什么我以调试的方式回答你)我强烈建议你学习调试技巧,以便成为一名成功的程序员。
2 个解决方案:
您是否将此脚本放入 UI / GameObject 本身?对我来说有时它不起作用,因为它会自行禁用,脚本的 none 将起作用(即使您尝试将其设置为 active 回到 true)
第二个选项: 确保 UI 元素在 canvas 中,还有面板是 canvas 吗?使用 UI 你必须使用 .enabled = ,而不是 SetActive
希望对您有所帮助:)