我的 2D 游戏统一(口袋妖怪风格)有问题,我transform.position
用来移动游戏对象。
我有一个玩家和跟随他的敌人,一切都很好。但是当敌人发生碰撞时,他们开始互相推挤
当敌人和玩家发生碰撞时,我需要没有人被推。
- 我尝试在敌人中使用运动学,但玩家可以推动它们。
- 我试图给玩家增加大量的质量,但他可以推开敌人。
- 我试图用 检测代码中的碰撞
OnCollision
,但是当我取消敌人的移动时,它们不会返回移动。
- - 更新 - -
我需要碰撞,但没有在它们之间推动,这是一个说明问题的视频 https://www.youtube.com/watch?v=VkgnV1NOxlw
仅作记录,我在这里使用 A* 寻路脚本 ( http://arongranberg.com/astar/ ) 我的敌人移动脚本。
void FixedUpdate () {
if(path == null)
return;
if(currentWayPoint >= path.vectorPath.Count)
return;
Vector3 wayPoint = path.vectorPath [currentWayPoint];
wayPoint.z = transform.position.z;
transform.position = Vector3.MoveTowards (transform.position, wayPoint, Time.deltaTime * speed);
float distance = Vector3.Distance (transform.position, wayPoint);
if(distance == 0){
currentWayPoint++;
}
}
- - 更新 - -
最后我会得到预期的结果,当目标接近并停止它时,将rigidbody2D.isKinematic 属性更改为true
这是一个视频https://www.youtube.com/watch?v=0Zm0idUU75s
和敌人的移动代码
void FixedUpdate () {
if(path == null)
return;
if(currentWayPoint >= path.vectorPath.Count)
return;
float distanceTarget = Vector3.Distance (transform.position, target.position);
if (distanceTarget <= 1.5f) {
rigidbody2D.isKinematic = true;
return;
}else{
rigidbody2D.isKinematic = false;
}
Vector3 wayPoint = path.vectorPath [currentWayPoint];
wayPoint.z = transform.position.z;
transform.position = Vector3.MoveTowards (transform.position, wayPoint, Time.deltaTime * speed);
float distance = Vector3.Distance (transform.position, wayPoint);
if(distance == 0){
currentWayPoint++;
}
}