Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使2D对象面向其移动方向(如漂移)_C#_Unity3d - Fatal编程技术网

C# 如何使2D对象面向其移动方向(如漂移)

C# 如何使2D对象面向其移动方向(如漂移),c#,unity3d,C#,Unity3d,如上图所示,我有两个游戏对象:汽车和圆圈。汽车跟随圆圈,圆圈随着光标移动。目前,我的车正从远处沿着圆圈行驶。当圆沿x轴移动时,我想旋转汽车,就像它在漂移一样 以下是我的汽车跟踪脚本: public class Follow : MonoBehaviour { public Transform leader; public float followSharpness = 0.1f; Vector3 _followOffset; void Start()

如上图所示,我有两个游戏对象:汽车和圆圈。汽车跟随圆圈,圆圈随着光标移动。目前,我的车正从远处沿着圆圈行驶。当圆沿x轴移动时,我想旋转汽车,就像它在漂移一样

以下是我的汽车跟踪脚本:

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);