首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >建立统一的旋转平台

建立统一的旋转平台
EN

Stack Overflow用户
提问于 2017-08-26 04:35:40
回答 1查看 3.5K关注 0票数 0

我得到了一个平台,它围绕轴旋转,并保持球员与它一起旋转。

首先,我让平台绕y轴旋转。

代码语言:javascript
复制
[SerializeField]
bool counterclockwise; // rotation left or right?

[SerializeField]
private int speed;

private void Start()
{
    if (counterclockwise)
        speed = -speed;
}

private void Update()
{
    transform.Rotate(new Vector3(0, speed * Time.deltaTime, 0));
}

private void OnTriggerEnter(Collider col)
{
    col.transform.parent = transform; // keep the player as a child, to rotate him with the platform rotation
}

private void OnTriggerExit(Collider col)
{
    col.transform.parent = null; // remove the player as a child
}

这真是太棒了。因此,当试图在x轴或z轴上旋转平台时,会出现一些错误.

当玩家得到平台的一个孩子(在x轴或z轴上旋转时),他会变得很大,物理崩溃,他会在没有重力的情况下自动飞到空中。

有人能帮我解决这个问题吗?

所以当前的代码是

代码语言:javascript
复制
[SerializeField]
Vector3 rotationVector;

private void Update()
{
    transform.Rotate(rotationVector * Time.deltaTime);
}

private void OnTriggerEnter(Collider col)
{
    col.transform.parent = transform;
}

private void OnTriggerExit(Collider col)
{
    col.transform.parent = null;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-26 16:39:36

显然,当您从setParent到GameObject时会出现问题,这与triger的进入或旋转无关,造成这个问题的原因似乎是以下几个方面:

  • 对父对象进行非均匀缩放。
  • 和任意旋转您的子对象

我对两者都做了几次实验:

代码语言:javascript
复制
character.transform.parent = this.transform;

代码语言:javascript
复制
character.transform.SetParent(this.transform);

这个问题依然存在。

我通过创建一个空的GameObject来解决这个问题,并将其放置在平台的中间(您可以对其进行编程或使用编辑器)。然后我创建了一个脚本来创建这个空GameObject的子平台和角色。还必须在这个空GameObject的update()中执行旋转。

您可以尝试编写这个脚本,添加一个Start()和Update()方法来测试这个解决方案:

代码语言:javascript
复制
void Start () {

    GameObject character = GameObject.FindGameObjectWithTag("character");
    GameObject platform = GameObject.FindGameObjectWithTag("platform");

    character.transform.SetParent(this.transform,false);
    platform.transform.SetParent(this.transform,false);

}

以及更新()

代码语言:javascript
复制
  private void Update()
    {
        transform.Rotate(new Vector3(0, speed * Time.deltaTime, 0));

        //transform.Rotate(new Vector3(speed * Time.deltaTime, 0,  0));

        //transform.Rotate(new Vector3(0 , 0 , speed * Time.deltaTime));
    }

测试之后,您仍然需要实现OnTriggerEnter的部分和其他内容,但至少您将看到使用空的GameObject可以“将两者链接”。

我想如果对于一个旋转你没有看到任何问题是因为变形是隐藏的那个角度,但很可能,如果你转动GameObject,你会看到它,并将隐藏的旋转在另一个角度。它将取决于您的播放器和平台GameObjects的形状。

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

https://stackoverflow.com/questions/45891966

复制
相关文章

相似问题

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