addforce() unity 3d与2d角色控制器

Addforce () unity3d with 2d character conroller

我正在开发 2D 游戏关卡,但使用 Unity3d 和 C# 编码在 3D 环境中制作它。我为我的角色制作了这个控制器,因为我希望它跟随鼠标的位置(就像小偷控制),但我的角色真的很疯狂,当我点击它时它只是移动......虽然不像看起来那么随机但真的摇摇欲坠我的鼠标位置...这是我的代码,如果您有任何好的教程或类似 Tiny Thief 游戏的东西,请告诉我。谢谢你。

using UnityEngine;
using System.Collections;


//  [RequireComponent(typeof (PlatformerCharacter2D))]
using System;


public class Robot_Moves : MonoBehaviour
{
    private Vector3 wantedPos;
    private Vector3 mousePos;
    private float relativePos;
    [HideInInspector]
    public bool
        facingRight = false;

    void Update ()
    {
        if (Time.time > 2) {
            if (Input.GetMouseButtonDown (0)) {
                mousePos = Input.mousePosition;
                mousePos.z = 100f;
                mousePos.y = 0f;
                wantedPos = Camera.main.ScreenToWorldPoint (mousePos);
                Debug.Log (wantedPos);

            }
            relativePos = wantedPos.x - transform.position.x;
            if (Mathf.Abs (relativePos) > 1) {
                transform.GetComponent<Rigidbody2D> ().AddForce (new Vector2 (relativePos, 0f) * 40f, ForceMode2D.Force);
            }
        }
    }
    void FixedUpdate ()
    {
        if (relativePos > 0 && facingRight)
            Flip ();
        else if (relativePos < 0 && !facingRight)
            Flip ();
    }

    void Flip ()
    {
        facingRight = !facingRight;
        Vector3 theScale = transform.localScale;
        theScale.x *= -1;
        transform.localScale = theScale;
    }
}

这似乎是我喜欢称之为 "slingshot problem" 的一个例子。你告诉你的角色向一个点移动,它越过那个点,试图回到那个点,再次越过它,并永远重复。

您的控件使用 "target position"。每一帧,都会对角色的刚体施加力,直到他到达目标位置。等他到了,就别加力了。

relativePos = wantedPos.x - transform.position.x;
if (Mathf.Abs (relativePos) > 1) {
    transform.GetComponent<Rigidbody2D> ().AddForce (new Vector2 (relativePos, 0f) * 40f, ForceMode2D.Force);
}

这里的这一部分是解决弹弓问题的好一步。而不是检查目标位置上的完全匹配,这是极不可能发生的,而是检查角色是否已经接近它,在 1 个单位内。

我觉得你这里的1太小了。这是一个很小的 ​​window ,很可能会一直被超越,导致你的角色在它的目的地周围摆动而不是在它附近停下来。如果你把这个数字变大(也许试验一下看看什么值合适),我认为它会正常工作。