我和团结一致5.我正在创建一个与其他对象交互的对话。当玩家靠近物体时,按回车键进行交互。
启动的面板对话框已禁用setActive(false)。
在方法更新时,当玩家离其他对象很近并按回车键和面板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 ());
}
}
答案 0 :(得分:2)
有四种可能的原因(使用解决方案)
你的这种情况不正确
thirdpersoncontroller.transform.position.z&gt; 37.6&amp;&amp; thirdpersoncontroller.transform.position.z&lt; 38.8
在条件之后记录,如果是,则问题仍然存在,
检查您的功能(StartDialogue())是否突然停用了面板。 (如果情况并非如此),那么
是没有让面板停用的任何其他脚本?如果它也不是真的
然后,最后问题是 Panel是非活动GameObject的子项。您还可以查看SetActive
请注意,GameObject可能处于非活动状态,因为父级未处于活动状态。
注意:这些问题都基于调试(这就是为什么我以调试的方式回答你)我强烈建议你学习调试技巧,以便成为一名成功的程序员。
答案 1 :(得分:0)
2个解决方案:
您是否将此脚本放在UI / GameObject本身中?对我来说有时候它不起作用,因为它会自动禁用,所有脚本都不会起作用(即使你尝试将它设置为活动状态也是如此)
第二个选项: 确保UI元素在画布中,面板是否也是画布?使用UI必须使用.enabled =,而不是SetActive
希望这会有所帮助:)