我得到了一个平台,它围绕轴旋转,并保持球员与它一起旋转。
首先,我让平台绕y轴旋转。
[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轴上旋转时),他会变得很大,物理崩溃,他会在没有重力的情况下自动飞到空中。
有人能帮我解决这个问题吗?
所以当前的代码是
[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;
}发布于 2017-08-26 16:39:36
显然,当您从setParent到GameObject时会出现问题,这与triger的进入或旋转无关,造成这个问题的原因似乎是以下几个方面:
我对两者都做了几次实验:
character.transform.parent = this.transform;和
character.transform.SetParent(this.transform);这个问题依然存在。
我通过创建一个空的GameObject来解决这个问题,并将其放置在平台的中间(您可以对其进行编程或使用编辑器)。然后我创建了一个脚本来创建这个空GameObject的子平台和角色。还必须在这个空GameObject的update()中执行旋转。
您可以尝试编写这个脚本,添加一个Start()和Update()方法来测试这个解决方案:
void Start () {
GameObject character = GameObject.FindGameObjectWithTag("character");
GameObject platform = GameObject.FindGameObjectWithTag("platform");
character.transform.SetParent(this.transform,false);
platform.transform.SetParent(this.transform,false);
}以及更新()
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的形状。
https://stackoverflow.com/questions/45891966
复制相似问题