C# 如何使2D对象面向其移动方向(如漂移)
如上图所示,我有两个游戏对象:汽车和圆圈。汽车跟随圆圈,圆圈随着光标移动。目前,我的车正从远处沿着圆圈行驶。当圆沿x轴移动时,我想旋转汽车,就像它在漂移一样 以下是我的汽车跟踪脚本:C# 如何使2D对象面向其移动方向(如漂移),c#,unity3d,C#,Unity3d,如上图所示,我有两个游戏对象:汽车和圆圈。汽车跟随圆圈,圆圈随着光标移动。目前,我的车正从远处沿着圆圈行驶。当圆沿x轴移动时,我想旋转汽车,就像它在漂移一样 以下是我的汽车跟踪脚本: public class Follow : MonoBehaviour { public Transform leader; public float followSharpness = 0.1f; Vector3 _followOffset; void Start()
public class Follow : MonoBehaviour
{
public Transform leader;
public float followSharpness = 0.1f;
Vector3 _followOffset;
void Start()
{
// Cache the initial offset at time of load/spawn:
_followOffset = transform.position - leader.position;
}
void LateUpdate()
{
// Apply that offset to get a target position.
Vector3 targetPosition = leader.position + _followOffset;
//GetComponent<Rigidbody2D>().rotation = 1.5f;
// Keep our y position unchanged.
//targetPosition.y = transform.position.y;
// Smooth follow.
transform.position += (targetPosition - transform.position) * followSharpness;
}
}
公共类遵循:单一行为
{
公众领袖;
公共浮动跟随度=0.1f;
矢量3随动偏移量;
void Start()
{
//加载/生成时缓存初始偏移量:
_followOffset=transform.position-leader.position;
}
void LateUpdate()
{
//应用该偏移以获得目标位置。
Vector3 targetPosition=leader.position+_followOffset;
//GetComponent()。旋转=1.5f;
//保持我们的y位置不变。
//targetPosition.y=transform.position.y;
//顺利跟进。
transform.position+=(targetPosition-transform.position)*跟随性;
}
}
您可以尝试使用:
免责声明:我现在无法测试此代码是否有效,您必须尝试一下,看看它是否能产生所需的结果。根据您的描述,您是想让汽车始终面对光标,因此它总是“看着”光标,以下是您可以做到的方法:
Vector3 diff = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
diff.Normalize();
float rot_z = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, rot_z - 90);
从开始,我认为漂移的全部意义在于汽车
不朝方向
,而是移动
?@MickyD是的,但是现在车不转了,这是主要的问题。车已经在看圆圈了,但是当圆圈沿着x移动时,车应该会旋转-axis@CemBerke切比:我不知道你的评论是什么意思LookAt
应根据需要旋转汽车。唯一需要注意的是,如果汽车和圆圈位于不同的层上,则可以展平目标位置<代码>Vector3展平引线位置=新的Vector3(leader.position.x,leader.position.y,0);transform.LookAt(扁平化领导位置)
@Morinehtar你认为转换是什么。看看做了什么?
Vector3 diff = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
diff.Normalize();
float rot_z = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, rot_z - 90);