首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单位地形和轴点旋转问题

单位地形和轴点旋转问题
EN

Stack Overflow用户
提问于 2020-06-18 05:06:28
回答 1查看 643关注 0票数 1

我正在尝试为我正在开发的一款游戏制作一个半过程生成的unity地图。在游戏中,当玩家移动到每个方向(北,南,东,西,NWest,NEast,SWest,SEast)时,方块平台会在每个方向上产生。这些平台包含一个平坦的地形作为地面(所以我可以在上面绘制纹理等等)。为了给游戏一些多样性,我打算在这些平台产卵时随机选择一个旋转(90度,180度和270度)。问题是,默认情况下,地形的轴心点并不在它的中心,导致了一个非常尴尬的结果,在这种情况下,是破坏性的结果。我试图将其子代到一个中心带有轴心的空游戏对象,但我得到了相同的结果。有谁知道解决这个问题的方法吗?我知道这不是一个编码问题,但它仍然是一个技术问题。我到处寻找,常见的解决方案是将其子代为一个空的,但正如我所说的,它在这种情况下不起作用,除非我遗漏了什么。一如既往,提前感谢您的耐心和关注。瑞皮雷斯

注意:这是我的旋转脚本,如果有什么我可以通过修改它来实现的话:

代码语言:javascript
复制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AutoRotate : MonoBehaviour
{
    Quaternion rot1;
    private int a;

    private void Awake()
    {
        a = Random.Range(0, 4);
        rot1 = transform.rotation;
    }
    // Start is called before the first frame update
    void Start()
    {
        
        switch(a)
        {
            case 0: transform.rotation = rot1;
                Debug.Log("case 0");
                break;
            case 1: rot1 = Quaternion.AngleAxis(90, Vector3.up);
                transform.rotation = rot1;
                Debug.Log("case 1");
                break;
            case 2: rot1 = Quaternion.AngleAxis(180, Vector3.up);
                transform.rotation = rot1;
                Debug.Log("case 2");
                break;
            case 3:
                rot1 = Quaternion.AngleAxis(270, Vector3.up);
                transform.rotation = rot1;
                Debug.Log("case 3");
                break;
        }
    }

    
}

编辑:添加了几张图片,以便更好地描述问题。

EN

回答 1

Stack Overflow用户

发布于 2020-07-14 04:29:22

我最终得到了一个“创可贴”解决方案,为地形添加了一个localPosition值来纠正旋转行为:

代码语言:javascript
复制
Quaternion rot1;
private int a;

private void Awake()
{
    a = Random.Range(0, 4);
    rot1 = transform.rotation;
}
// Start is called before the first frame update
void Start()
{
    
    switch(a)
    {
        case 0: transform.rotation = rot1;
            Debug.Log("case 0");
            break;
        case 1: rot1 = Quaternion.AngleAxis(90, Vector3.up);
            transform.rotation = rot1;
            transform.GetChild(0).transform.localPosition = new Vector3(transform.GetChild(0).transform.localPosition.x + 100, transform.GetChild(0).transform.localPosition.y, transform.GetChild(0).transform.localPosition.z);
            Debug.Log("case 1");
            break;
        case 2: rot1 = Quaternion.AngleAxis(180, Vector3.up);
            transform.rotation = rot1;
            transform.GetChild(0).transform.localPosition = new Vector3(transform.GetChild(0).transform.localPosition.x + 100, transform.GetChild(0).transform.localPosition.y, transform.GetChild(0).transform.localPosition.z +100);
            Debug.Log("case 2");
            break;
        case 3:
            rot1 = Quaternion.AngleAxis(270, Vector3.up);
            transform.rotation = rot1;
            transform.GetChild(0).transform.localPosition = new Vector3(transform.GetChild(0).transform.localPosition.x, transform.GetChild(0).transform.localPosition.y, transform.GetChild(0).transform.localPosition.z+100);
            Debug.Log("case 3");
            break;
    }
}

注意:层次结构中的第一个子节点(索引为0的子节点)显然是地形gameObject。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62438377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档