c# - GameObject 的跟随领导者/蜈蚣问题

标签 c# gameobject unity3d

我很难将一些游戏对象链接在一起以“跟随领导者”。

这就是我想要完成的:

enter image description here

有“头”对象的地方,它会拉动 body 对象。像蛇或蜈蚣。

然而,这是正在发生的事情:

enter image description here

它们都有点跟随头部,但它们似乎作为一个整体移动。

谁能看出我做错了什么?

这是我的其他类继承的 Centipede 对象。 我开始琢磨让 CentipedeObject 移动所有独立游戏对象的想法。但这没有用。

CentipedeObject.cs

public abstract class CentipedeObject : MonoBehaviour {

    [SerializeField]
    private float moveSpeed = 1.5f;

    public float MoveSpeed {
        get {
            return moveSpeed;
        }
    }
}

这是移动的 CentipedeHead

public class CentipedeHead : CentipedeObject {

    private Rigidbody2D _body;
    private Vector2 moveDirection = Vector2.zero;
    private void Awake() {
        _body = GetComponent<Rigidbody2D>();
        _body.gravityScale = 0;
        _body.constraints = RigidbodyConstraints2D.FreezeRotation;

    }
    private void Start() {
        InvokeRepeating("ChangeDirection", 0, Random.Range(1.25f, 3.0f));
    }

    private void FixedUpdate() {
        _body.velocity = moveDirection.normalized * MoveSpeed;
    }

    private void ChangeDirection() {

        moveDirection = Vector2.zero;

        switch (Random.Range(0, 4)) {
            case 0:
                moveDirection += Vector2.up;
                break;
            case 1:
                moveDirection += Vector2.right;
                break;
            case 2:
                moveDirection += Vector2.down;
                break;
            case 3:
                moveDirection += Vector2.left;
                break;

        }
    }
}

CentipedeBody 部分应该紧跟在头部之后另一个 body 部分。

public class CentipedeBody : CentipedeObject {

    public GameObject objectToFollow;

    private Vector3 followSize;

    void Start() {
        //Get the size of the object we are following
        followSize = objectToFollow.GetComponent<SpriteRenderer>().bounds.size;

        //Set initial distance
        transform.position = objectToFollow.transform.position + followSize;
    }

    private void FixedUpdate() {
        Vector3 followFromPosition = objectToFollow.transform.position + followSize;
        transform.position = Vector3.MoveTowards(transform.position, followFromPosition, MoveSpeed * Time.deltaTime);
    }
}

最佳答案

我认为更新像素的逻辑是错误的。当头部向左移动一个像素时。您正在使所有其他 body 部位向左移动 1 个像素。您需要做的是(从您的图表中)2 正好位于 1 所在的位置。 3 取代了 2 的位置,依此类推。

关于c# - GameObject 的跟随领导者/蜈蚣问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46791141/

相关文章:

c# - Windows Phone 8.1 按钮点击参数

unity-game-engine - Unity,游戏对象的相对尺寸

c# - 我的播放器掉到地上

android - 统一: Edit Gradle file of Android modules in Unity Assets

c# - 使用 FormsAuthentication.Authenticate 登录

c# - 需要帮助理解程序集引用

c# - 为什么 Unity 在某些函数(例如 GetChild())中使用变换而不是游戏对象?

c# - 在字符串 C# 中查找子字符串的计数

C# 将焦点放在按钮上/使其处于事件状态

c# - 场景统一变化时,两个游戏对象之间保持链接