【发布时间】:2021-07-26 23:25:23
【问题描述】:
我目前正在以初学者的身份制作 2D 游戏,并且制作了一个旋转平台。但是当它旋转时,玩家的旋转(z 轴)也会发生变化,因为它是平台的子级。当我使用移动平台时,我需要这个。现在我想锁定播放器旋转的 z 轴。我已经尝试了 3 种不同的方法,但似乎没有一种方法有效。有人知道怎么做吗?
这是我尝试的三种方法:
// 1
PlayerTrans.transform.Rotate(
PlayerTrans.transform.rotation.x,
PlayerTrans.transform.rotation.y,
0);
// 2
PlayerTrans.transform.Rotate(
PlayerTrans.transform.rotation.x,
PlayerTrans.transform.rotation.y,
0,
Space.Self);
// 3
PlayerTrans.transform.localRotation = Quaternion.Euler(new Vector3(
PlayerTrans.transform.localEulerAngles.x,
PlayerTrans.transform.localEulerAngles.y,
0f));
这就是我的代码留在移动平台上的样子。我为此使用了光线投射:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Raycasting : MonoBehaviour
{
// Start is called before the first frame update
Transform PlayerTrans;
public float RayCastRange = 3;
void Start()
{
PlayerTrans = transform.parent;
}
// Update is called once per frame
void Update()
{
RaycastHit2D PlattformCheck = Physics2D.Raycast(transform.position, -Vector2.up, RayCastRange);
if (PlattformCheck.collider != null)
{
if (PlattformCheck.collider.gameObject.tag == "Platform")
{
PlayerTrans.transform.SetParent(PlattformCheck.collider.gameObject.transform);
}
else
{
PlayerTrans.transform.SetParent(null);
}
}
else
{
PlayerTrans.transform.SetParent(null);
}
}
}
【问题讨论】:
-
您可能只想通过光线投射检测玩家是否在平台上,然后访问对象的移动脚本。确保在运动脚本中有一个 Vector3 类型的速度变量。然后,您应该为播放器添加一个速度变量,并将速度设置为平台的速度。并将速度应用于两个对象。如果你愿意,我可以在脚本中发送代码。
-
不要让玩家成为平台的孩子!而是创建一个跟随平台移动的脚本,但不包含任何内容
-
@ken 是的,那太好了,非常感谢!
-
@derHugo 有那么复杂吗?
-
你的播放器是刚体还是普通变换?
标签: c# unity3d rotation z-axis