【问题标题】:Unity C#/Blender Model not rotating correctlyUnity C#/Blender 模型没有正确旋转
【发布时间】:2017-10-27 14:13:46
【问题描述】:

所以我在搅拌机中创建了一个 turrent 模型并导入到统一中,一切看起来都很好我得到了一个小旋转脚本,用于我的中心场景并且旋转效果很好

现在进入代码尝试旋转枪管以朝向敌人看起来不太好

这里有一个简短的游戏视频来演示这个问题

Demonstration

炮塔的枪管面对的位置与敌人完全不同

private void Update(){
        FlameForgedTime.UpdateTime ();

        if (isInGame) {
            RegenerateHitpoint ();
            //Look for enemy
            if (FlameForgedTime.Time - lastAttack > StatsHelper.Instance.GetStatValue (Stat.Speed)) {
                Collider[] col = Physics.OverlapSphere(transform.position,StatsHelper.Instance.GetStatValue (Stat.Range),LayerMask.GetMask("Enemy"));
                if (col.Length != 0) {
                    //find closest enemy
                    int closestIndex = 0;
                    float dist = Vector3.SqrMagnitude (col [closestIndex].transform.position - transform.position);
                    for (int i = 1; i < col.Length; i++) {
                        float newDistance = Vector3.SqrMagnitude (col [i].transform.position - transform.position);
                        if (newDistance < dist) {
                            dist = newDistance;
                            closestIndex = i;
                        }
                    }
                    //shoot enemy
//Rotate turrent to look at enemy                   GameObject.FindGameObjectWithTag("Player").transform.LookAt(col[closestIndex].transform);
                    ShootEnemy(col[closestIndex].transform);
                    lastAttack = Time.time;
                }
            }
        }
    }

所以在我的 turrent(父游戏对象)上,我有标签“Player”,因为 turrent 已加载到预加载器场景中,并且公共 GameObject 字段无法访问

由于某种原因,Y 是炮塔旋转的轴

无论如何,我找到离塔最近的敌人,然后做一个 LookAt 试图让炮塔看着敌人,然后向敌人射击,但是正如你在视频中看到的那样,这不能正常工作

【问题讨论】:

  • 这里有一个简短的游戏视频来演示这个问题”视频在哪里?
  • 有一个链接显示“演示”就是视频
  • 当我点击链接时它不起作用。它现在正在工作。

标签: c# unity3d rotation blender


【解决方案1】:

模型上的“前向”轴(即枪管指向的方向)与 Unity 所说的前向轴不一致。

Unity 中的“Forward”沿着正 Z 方向,因此您的模型不会与其变换的局部前向对齐(这是使用 LookAt() 时指向事物的方向)。看起来您的模型是沿正 X 轴向前对齐。

有三种方法可以解决这个问题:

  1. 在 Blender 中旋转并重新导出(最佳选择)
  2. 创建一个空的父游戏对象“成为”枪对象(也就是说,所有引用都指向这个新对象,任何脚本从它们现在的位置移动到这里,等等),但是你把当前对象放在里面并旋转现在的孩子变换 90 度。这有时也称为“重新定心”。对于不属于您的资产,这有时是唯一的选择。
  3. 在执行LookAt() 后按脚本旋转 90 度(不推荐)

【讨论】:

  • 在搅拌机中旋转你的意思是我只需要旋转 90 度吗?还是我需要从头开始重建它?
  • @FlamingGenius 只需在 Blender 中将其旋转 90 度并保存。
猜你喜欢
  • 1970-01-01
  • 2016-05-10
  • 2015-08-20
  • 2011-03-17
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-13
相关资源
最近更新 更多