【问题标题】:How would I get updated position after passing object through event?通过事件传递对象后如何获得更新的位置?
【发布时间】:2017-11-18 01:08:39
【问题描述】:

我正在制作一个点击式游戏,我需要获取场景中移动游戏对象的更新位置。在单击对象后,我目前正在通过事件将鼠标选择的对象传递给另一个脚本。对象的位置是从单击对象时开始存储的,而不是当前位置,我想以某种方式将其传递到更新循环中以获取更新的位置。

我已经研究过使用成员变量从更新函数中获取更新,但这看起来很混乱。 有没有更好的解决方案或者我应该只使用成员变量?

谢谢!

这是我关心的代码

    void Start()
    {
        RegisterForMouseEvents();
    }

    private void RegisterForMouseEvents()
    {
        var cameraRaycaster = FindObjectOfType<CameraRaycaster>();
        cameraRaycaster.onMouseOverEnemy += OnMouseOverEnemy;
    }

    void OnMouseOverEnemy(EnemyAI enemy)
    {
     // enemy is object passed from delegate
     // that has the EnemyAI script attached.
     // how do I pass enemy into Update() then either 
     // back into this method or another method?
    }

【问题讨论】:

  • GameObject.Find("name").transform.position 会解决您的问题吗?
  • 感谢您的回复。这将使它起作用,但我试图弄清楚如何从委托传递的引用中使用。我想让它更加动态并且不依赖于特定的对象名称,因为我想稍后添加 NPC 和可能不具有相同名称的东西。
  • “我想弄清楚如何从委托传递的参考中使用”你能更详细地解释一下你的意思吗?
  • 发布一些示例代码可能会让你的问题更清楚
  • 您可以在他们注册时将AddList 并在Update 函数中遍历列表 (foreach( EnemyAI enemy in enemyList){...})

标签: c# unity3d


【解决方案1】:

使用局部变量。

private EnemyAI myEnemy;

void Start()
{
    RegisterForMouseEvents();
}

private void RegisterForMouseEvents()
{
    var cameraRaycaster = FindObjectOfType<CameraRaycaster>();
    cameraRaycaster.onMouseOverEnemy += OnMouseOverEnemy;
}

void OnMouseOverEnemy(EnemyAI enemy)
{
    myEnemy = enemy;
}

void Update(){
    //log position
    print(myEnemy.transform.position);
}

【讨论】:

  • 这是我最初的想法。我只是在想可能有更好的方法,我可能最终会做类似的事情。谢谢!
猜你喜欢
  • 2012-01-26
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
相关资源
最近更新 更多