【问题标题】:transform.LookAt is going off the gameobjecttransform.LookAt 正在关闭游戏对象
【发布时间】:2017-06-19 20:38:06
【问题描述】:

我正在施法,我正在通过LookAt 设置它的方向。问题是LookAt 将我的拼写动画设置为游戏对象。我从中获取位置的对象具有比例(3、3、3)、网格渲染器、球体对撞机和刚体。 (其他对撞机在子对象上)。这是我用于施法的代码:

public void castSpell(GameObject caster, Transform otherTransform, float duration)
{
    if(animationEnabled)
    {
        foreach(var a in animator)
        {
            foreach(var b in a.bools)
            {
                a.animator.SetBool(b.parameterName, b.parameterValue);
            }
            foreach(var i in a.ints)
            {
                a.animator.SetInteger(i.parameterName, i.parameterValue);
            }
            foreach(var f in a.floats)
            {
                a.animator.SetFloat(f.parameterName, f.parameterValue);
            }
        }
    }

    GameObject Temporary_Spell_Handler;
    Temporary_Spell_Handler = Instantiate(_Spell, Spell_Emitter.transform.position, Spell_Emitter.transform.rotation) as GameObject;

    ParticleSystemRenderer pr = Temporary_Spell_Handler.GetComponent<ParticleSystemRenderer>();
    float dist = Vector3.Distance(caster.transform.position, otherTransform.position);

    //Add Spell Script to the casted spell so it handes damage and everything about spells.
    Spell tempSpell = Temporary_Spell_Handler.GetComponent<Spell>();
    tempSpell.caster = caster;

    if(b_lenghtScale)
    {
        pr.lengthScale = -lenghtScale;
    }

    if(lookAtEnemy)
    {
        Temporary_Spell_Handler.transform.LookAt(otherTransform);
    }

    Destroy(Temporary_Spell_Handler, duration);
}

下面是图片的样子:

我发现了问题。我的ball 被缩放到 (3, 3, 3),所以它向上并且对象的枢轴保持向下。那么我该如何克服这个问题呢?

【问题讨论】:

  • 我不确定是什么问题。您能否添加您预期会发生的情况的屏幕截图?
  • 您会看到闪电击中地面,而不是击中球(谈论雷的中心)。所以我想以某种方式改变角度。
  • 这完全取决于那里的对象的设置和性质。如果闪电的图形与游戏对象的轴不对齐,则需要修复图形。如果预制平面未与轴对齐,则需要修复。如果预制轴没有指向您希望它指向的位置,那么这完全是一个不同的问题。我无法从您发布的图片中判断它是哪一个。
  • 你能告诉我我还应该为你打印什么屏幕以便我一次发布所有图像
  • 这更像是一个过程:当闪电出现时暂停场景并检查对象以查看父对象(克隆的预制件)是否指向正确的方向。如果它指向正确的方向,则检查每个孩子,直到找到哪个孩子的方向不正确。

标签: c# unity3d unity5


【解决方案1】:

我创建了空的gameobject 并将其作为我的ball 的父级。然后我将游戏对象的位置(现在是支点)设置到我不会的位置(围绕球的中心 y=5),然后在球上我做了相反的操作(y=-5)。

然后在我创建为枢轴的游戏对象中添加标签pivotChange,然后在我的castSpell 脚本中我在lookAtEnemy 部分进行了此更改:

    if(lookAtEnemy)
    {
        if(other.transform.parent != null && other.transform.parent.gameObject.tag == "pivotChange")
        {
            Temporary_Spell_Handler.transform.LookAt(other.transform.parent.gameObject.transform);
        }
        else
        {
            Temporary_Spell_Handler.transform.LookAt(other.transform);
        }
    }

而且一切正常。

【讨论】:

  • 很高兴你解决了。 :) 基本上问题是你的预制件的枢轴位置在一个地方(在那个黄色磁盘所在的地面上),为了让它正确瞄准,你需要一个子对象(或新的父对象)有它的支点在所需的位置。这是我对这个问题的第一次猜测,但我无法确定,但我确实传授了一点关于如何调试它的知识。 :)
  • 非常感谢 :)
猜你喜欢
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-23
  • 2016-12-23
  • 2023-04-04
相关资源
最近更新 更多