Articles of callback

在非monobehaviours中使用UnityEvent

我正在开发一个简单的对话系统,其中玩家可select的选项可能包含callback任何function(即,你select了正确的答案 – 水平等等) 这些callback需要指向static / non-monobehaviour类中包含的方法,并且为了工作stream的目的,整个事件需要被序列化到编辑器中。 我认为UnityEvents是我正在寻找的,但是:添加任何types的公共/序列化事件是这样的: [System.Serializable] public class Option { [TextArea(2, 10)][SerializeField]string _option; [SerializeField]int _pointer; [SerializeField]UnityEvent _action; public string option { get { return _option; } } public int pointer { get { return _pointer; } } public UnityEvent action { get { return _action; } } } 期望:能够拖放对象,并从这些对象中select方法。 结果:在编辑器窗口中添加对象/脚本时,我只能select“无function”或“MonoScript.name”。

AudioKinetic Wwise和Unity 5 C# – >如何从当前的音乐播放中findfBeatDuration?

我遇到了一个问题,因为我打算让我的当前音乐文件通过Wwise播放到我的Unity项目的fBeatDuration-信息。 我想要这个,所以我可以理解什么BPM歌曲播放。 我知道,如果我可以从AkMusicSyncCallbackInfo获得fBeatDuration,那么我很乐意(通过简单地计算60 / fBeatDuration来获得BPM),但我似乎无法了解如何获取这些信息。 任何帮助将非常感激。 我正在使用Unity 2017.2.0f3和Wwise 2017.1.3。

用callback函数处理input

我不确定我是否完全理解callback函数 – 它们是另一个函数调用的函数? 这似乎是一个强大的工具,特别是W / R / T处理input。 我用callback(或者至less是我对它们的理解)写了这个快速和肮脏的例子,但是我感觉好像我做的太多了。 第一,我会收集操作系统的input。 第二,我将这个input传递给某种上下文来处理input。 第三,我将使用当前活动的上下文来根据input消除这些callback函数。 像这样的东西, //Gathers keyboard input struct InputData { std::map<SDLKey, bool> held_keys; std::map<SDLKey, bool> pressed_keys; std::map<SDLKey, bool> released_keys; }; //Takes a shared_ptr in the constructor so it always knows what the current InputData is class Context { public: //Constructors/Destructors … //Maps a function to a […]

使用KeyListeners处理多个按键

我使用Java来制作游戏Applet,使用KeyListener控制桨(对于像Breakout / Pong这样的游戏)。 我的基本实现是这样的: public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_LEFT: direction = "LEFT"; break; case KeyEvent.VK_RIGHT: //repeat for the rest } } public void keyReleased(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() == KeyEvent.VK_RIGHT) direciton = "";//paddle doesn't move } 我的问题是,当用户试图改变桨的方向两次太快(比方说,你按左 ,然后再次左右超快),桨一秒钟冻结,并继续沿着它的方向移动。 我明白,问题是我的代码中的逻辑,但我想不出更好的实现。 我错过了什么?

我如何处理许多不同types的游戏对象之间的碰撞响应?

我正在寻找一种方法来避免在游戏中发生碰撞时无数的游戏对象types之间的可怕切换或if / else场景。 例如: 你有一个游戏对象的列表,从一个普通的类,如GameObjectinheritance。 您检查列表是否有任何碰撞,并调用每个碰撞对象响应碰撞的方法,但是这种情况会发生: public void handleCollision(GameObject other) { switch(other.getType()) { case Alien: //Perform some logic break; case Ogre: //Perform some logic break; case Wall: //Perform some logic break; case Door: //Perform some logic break; //and so on } } 这对于数百种不同的游戏对象types来说将变得笨重。 我试图做的是这样的: Map<CollisionKey, Method> collisionCallbackMap = new HashMap<CollisionKey, Method>(); collisionCallbackMap.put(new CollisionKey(gameObjectType, gameObjectType), //add […]

我如何取消b2ContactListener中的联系人?

要知道什么时候发生联系,我们可以从b2ContactListener派生出来,并实现我们自己的解决scheme。 我想知道是否有,我们可以取消联系,也就是说,当我们打开联系,我们打电话一个function或做一些破坏联系,才有机会得到解决? 我的游戏逻辑依赖于设置任何数量的碰撞组(基本上是整数)。 碰撞组可以具有相互作用的设置,例如碰撞组41和13可以被设置为永远不会碰撞,而组41和56碰撞。 一些被设置为不发生冲突的组仍然是要生成一个OnContactcallback(但显然永远不会到达结束联系)。

OnMouseUp()的行为是打算如何?

版本: Unity3D 4.6.2f1 我有一个网格瓷砖(立方体GameObject与附加的Tile脚本)。 它们位于它们的索引位置[x][y] = (x, y, z=0) World Coordinates 。 下面,我尝试获取释放鼠标左键的瓦片的坐标。 进入代码之前: OnMouseDown() – 当用户在GUIElement或Collider上按下鼠标button时,调用OnMouseDown。 OnMouseUp() – 当用户释放鼠标button时,OnMouseUp被调用。 基于这些定义, 我认为(错误?) OnMouseUp()将被上面的对象调用,鼠标左键被释放。 在Tile脚本上,我有以下内容: public class Tile : MonoBehaviour { // variables private Vector2 _gridPosition = Vector2.zero; public Vector2 GridPosition { get { return _gridPosition; } set { _gridPosition = value; } } // functions […]

如何创建一个消息框,按下button时触发一个callback?

我需要创建一个“OK”button的消息框。 当用户触摸button时,应该执行callback。 我是新手,无法在文档中find任何文章。

如何在所有对象停止移动时运行callback?

我正在使用Bullet,并且想要在dynamic世界中的所有对象达到0速度(或者至less是非常接近的值)时采取一些行动。 我试图遍历所有的时间,当一个计数器等于getNumCollisionObjects()然后做这个动作。 但这是一个复杂的程序,我开始认为这是不必要的。 有没有更好的方法,也许通过比较两个框架或Bullet内置?

在GLUT中,我如何将一个动作绑定到“任意键”上?

那么,这听起来很可笑,但逻辑逃避了我。 我已经在OpenGL中绘制了我的立方体,并且如果按下键盘上的任何键 ,我想将它翻译成右侧。 我知道如何做这个特定的键,但不是在一个function的所有键? 我必须为每个密钥都编码吗? 我想使用glutSpecialFunc和glutKeyboardFunc ? 有没有更简单的方法呢?