- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我有一个脚本 (Unity C#),它运行一个生成答案数组的 IEnumerator 函数,我想以列表格式显示它们。
所以我使用:
public Button QuestionButton;
void Start(){
StartCoroutine(PresentQuestion());
}
IEnumerator PresentQuestion(){
CurrentStage = Stage.QuestionStart;
CurrentQuestion = "How many times do we have to do this to make it work?";
Answers.Add ("1");
Answers.Add ("2");
Answers.Add ("3");
Answers.Add ("4");
float newY = 80.0f;
foreach(string answer in Answers){
newY-=65.0f;
string locanswer = answer;
Button btn = Instantiate(QuestionButton);
btn.transform.position = new Vector3(225, newY, 0);
btn.transform.SetParent(QuestionUI.transform, false);
btn.gameObject.SetActive(true);
btn.transform.FindChild("Text").GetComponent<Text>().text = locanswer;
btn.onClick.AddListener(() => AnswerClicked(locanswer));
}
QuestionText.text = CurrentQuestion;
}
void AnswerClicked(string value){
print (value);
}
QuestionButton 是我在检查器中链接的按钮游戏对象,它实例化很好,文本设置很好,但它是在我添加监听器时出现的。
当我去点击按钮时,我“每次”都得到循环中的最后一个字符串或 _answer。
我不确定为什么实例化的每个新 Button (btn) 对象都不会在 AnswerClicked 处获得自己的 Listener。谁能解释一下?
仅供引用:QuestionUI 是我的 Canvas 。
谢谢。
更新:
此代码有效,但我之前的问题仍然存在。我将尝试使用我的实际代码进行更新。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Testing : MonoBehaviour {
public string CurrentQuestion;
public ArrayList Answers = new ArrayList();
public Button QuestionButton;
public GameObject QuestionUI;
public Text QuestionText;
void Start(){
StartCoroutine(PresentQuestion());
}
IEnumerator PresentQuestion(){
CurrentQuestion = "How many times do we have to do this to make it work?";
Answers.Add ("1");
Answers.Add ("2");
Answers.Add ("3");
Answers.Add ("4");
float newY = 80.0f;
foreach(string answer in Answers){
newY-=65.0f;
string locanswer = answer;
Button btn = Instantiate(QuestionButton);
btn.transform.position = new Vector3(225, newY, 0);
btn.transform.SetParent(QuestionUI.transform, false);
btn.gameObject.SetActive(true);
btn.transform.FindChild("Text").GetComponent<Text>().text = locanswer;
btn.onClick.AddListener(() => AnswerClicked(locanswer));
}
QuestionText.text = CurrentQuestion;
return null;
}
void AnswerClicked(string value){
print (value);
}
}
最佳答案
我遇到了同样的问题,我发现在单独的方法中设置 onClick 监听器对我有用。
在这种情况下我会这样做:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Testing : MonoBehaviour {
public string CurrentQuestion;
public ArrayList Answers = new ArrayList();
public Button QuestionButton;
public GameObject QuestionUI;
public Text QuestionText;
void Start(){
StartCoroutine(PresentQuestion());
}
IEnumerator PresentQuestion(){
CurrentQuestion = "How many times do we have to do this to make it work?";
Answers.Add ("1");
Answers.Add ("2");
Answers.Add ("3");
Answers.Add ("4");
float newY = 80.0f;
foreach(string answer in Answers){
newY-=65.0f;
Button btn = Instantiate(QuestionButton);
btn.transform.position = new Vector3(225, newY, 0);
btn.transform.SetParent(QuestionUI.transform, false);
btn.gameObject.SetActive(true);
btn.transform.FindChild("Text").GetComponent<Text>().text = locanswer;
SetButtonOnClick(btn, answer);
}
QuestionText.text = CurrentQuestion;
return null;
}
void SetButtonOnClickAnswer(Button button, string value){
button.onClick.AddListener(() => AnswerClicked(value));
}
void AnswerClicked(string value){
print (value);
}
}
(免责声明:我没有对此进行测试,但我在我的项目中运行了一个非常相似的代码,这解决了问题。)
关于c# - Unity Button OnClick AddListener 问题 - 与 For Each Loop 中最后一项的回调相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28922083/
我是 JavaFX 的新手,我需要绑定(bind) Label 的可见属性,如果它表示的值达到 0,Label > 应该是不可见的。此外,当有界 integerProperty 值发生变化时,它也需要
过去,我还使用了一个调整大小监听器,将 requestAnimationFrame 与它捆绑在一起,作为轮询调整大小事件的某种优化版本: /** * Resize listener * @retu
尝试此操作时出现错误“.addListener 不是函数”: if(document.getElementById("id")){ document.getElementById("id").a
我正在尝试制作 chrome 扩展,但我无法运行我的代码。 这是 list { "name": "My First Extension", "version": "1.0", "d
我正在尝试在行和数据点之间构建一个事件处理程序。我当前收到错误: TypeError: line.getSelection is not a function. 我不太确定如何添加此功能或者我可能会出
我有一个 Chrome 扩展程序和一个简单的网页一起运行。我向扩展程序发送一条消息,此时扩展程序会执行一些异步操作。下面的代码不起作用,因为 sendMessage 上的回调在我的 promise 解
我正在尝试重现 Google map 的 addListener,但使用用于点击、按键等的 jQuery 监听器除外。 在 Moogle map 中,您可以编写 .event.addListener(
我尝试为 ListView 生成一个监听器,该监听器获取存储在所选项目中的字符串,获取它的整数,然后调用一个方法。然而我不断收到 Error:(37, 67) java: no suitable me
我在一个项目中使用谷歌地图,我想在 map 上显示一些可点击的标记,每个标记都显示一个包含不同数据的 Div,所以我通过从数据库中获取数据来开始我的代码并工作好吧,然后我像这样在 map 上显示它:
我的问题如下:GEvent.addListener(map, "click"function(){...}) 在回调函数中返回了什么?我根本没有在 GMaps 引用中找到任何信息,你能给我一些吗?我唯
我正在开发一个需要对不同的自定义事件和监听器使用react的程序。 我试图使用泛型来缩短它,事实是,我不明白我的错误在哪里。 这是我的代码: 听众和事件: public interface MyFir
我相信这个问题之前已经有人问过,但似乎我有点倒霉才找到它。我的问题是如何在过程中间启用按钮/ Actor 的 addListener?例如,在 Activity 屏幕之间的 Assets 加载屏幕上(
我有可变数量的文本字段,我正在动态初始化 Google map 自动完成功能。 问题是每次触发 place_changed 事件时,我都需要确切地知道它是在哪个输入框上触发的。如何将此数据传递到我的
我正在使用如下 JavaScript 函数:- function fileSelectHandler(e) { fileDragHover(e); // some more code
在下面的 HTML 代码中,我希望在 map 更改(例如缩放、拖动、单击)时收到警报。 该警报将来将更改为在拖动、缩放或单击时显示 Angular 坐标。然后,“获取 Angular 落”按钮将被省略
我希望能够从内容脚本(任何选项卡)与后台进行通信。 根据文档,我应该使用 chrome.extension chrome.runtime.onMessage与chrome.runtime.sendMe
我有一个单独的谷歌地图v3代码。只是为了当我点击它时在我的 google fusion kml 层中显示 infowindow 信息框。昨天我的代码工作正常。我没有做任何改变。但今天我的 addLis
这个问题已经有答案了: JavaScript closure inside loops – simple practical example (45 个回答) 已关闭 6 年前。 这是我的代码: fu
我知道在类组件中我们以这种方式使用 addListener: const Animated.Value= new Animated.Value(0); Animated.Value.addListen
我正在尝试测试我的 Ant 申请 react 测试库 ,但我不断收到此错误: TypeError: Cannot read property 'addListener' of undefined 我使
我是一名优秀的程序员,十分优秀!