gpt4 book ai didi

c# - Unity3D RigidBody MovePosition 闪烁

转载 作者:行者123 更新时间:2023-11-30 17:35:13 25 4
gpt4 key购买 nike

我目前正在开发一款在 Unity 中使用点击移动的游戏。当我点击 map 上的一个点时,我将鼠标的点击设置为目的地,然后使用游戏对象上的刚体通过 RigidBody.MovePosition() 移动它。当我这样做时,当游戏对象到达目的地时,我会出现很多闪烁。任何帮助表示赞赏。谢谢。

    // COMPONENTS
Rigidbody rigidBody;

// MOVEMENT
Vector3 destination;
Vector3 direction;

// Use this for initialization
void Start()
{
rigidBody = GetComponent<Rigidbody>();
destination = transform.position;
}

// Update is called once per frame
void Update()
{
DetectInput();
}

void FixedUpdate()
{
MoveControlledPlayer();
}

void MoveControlledPlayer()
{

transform.LookAt(destination);
Vector3 direction = (destination - transform.position).normalized;
rigidBody.MovePosition(transform.position + direction * 5 * Time.deltaTime);
}

void DetectInput()
{
if (Input.GetMouseButton(0))
{
SetDestination();
}
}

void SetDestination()
{
if (!EventSystem.current.IsPointerOverGameObject())
{
Plane field = new Plane(Vector3.up, transform.position);
Ray ray;
float point = 0;

ray = Camera.main.ScreenPointToRay(Input.mousePosition);

if (field.Raycast(ray, out point))
destination = ray.GetPoint(point);

}
}

最佳答案

我用临时关节做这些 Action 。它们非常准确/可配置/可嵌入。

在 2D 中,我使用 DistanceJoint2D控制刚体点之间或刚体点与世界点之间的距离。在 3D 中你可以使用 SpringJointConfigurableJoint .

然后只需调整距离,基本上与您现在每帧移动的方式相同(在 FixedUpdate 上)。

关于c# - Unity3D RigidBody MovePosition 闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41383105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com