我很难将一些游戏对象链接在一起以“跟随领导者”。
这就是我想要完成的:
有“头”对象的地方,它会拉动 body
对象。像蛇或蜈蚣。
然而,这是正在发生的事情:
它们都有点跟随头部,但它们似乎作为一个整体移动。
谁能看出我做错了什么?
这是我的其他类继承的 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/