如何阻止玩家在移动平台上自动跳跃?

时间:2018-06-03 11:15:24

标签: c# unity3d

我做了一个移动的平台,从上到下垂直,然后从下到上,依此类推。平台移动正常,但将我的播放器放在上面会让我的播放器不稳定

当平台从上到下移动时,我的播放器有点反弹。当平台从底部移动到顶部时,它在途中保持稳定,但当它达到顶点时,我的播放器会自动跳跃。

当我提高平台速度时,情况变得更糟。我不知道它是否由于统一2d物理效应还是什么。我试图通过将弹跳设置为0并将摩擦设置为50来在我的播放器对象和平台上使用物理材质2D,但似乎没有任何效果。任何人都知道如何禁用移动平台的物理效果?以下是移动平台的代码:

public class BrickMoveVErtical : MonoBehaviour {
     public Vector3 positionOne;
     public Vector3 positiontwo;
     public Vector3 nextposition;
    /*Empty object is already made on unity editor and its parent of platform(Plank) and other  
       empty object "pointB". Point "B" is already mapped on editor and platform is set to go from 
         its original pos to point B */
     public Transform plankTranform;         
     public Transform positionBTransform;
     public float speed;
     // Use this for initialization
     void Start () {
         positionOne = plankTranform.localPosition;
         positiontwo = positionBTransform.localPosition;
         nextposition = positiontwo;
     }

     // Update is called once per frame
     void Update () {
         move();
             }
     private void move() {
    plankTranform.localPosition = Vector3.MoveTowards(plankTranform.localPosition,nextposition,Time.deltaTime*speed);
         if(Vector3.Distance(plankTranform.localPosition,nextposition)<0.1)
         { changeMovementPlank(); }
     }
     void changeMovementPlank() {
         nextposition = nextposition != positionOne ? positionOne : positiontwo;
     }                        

 }

2 个答案:

答案 0 :(得分:1)

我在游戏中遇到了类似快速平台的问题,根据平台的方向,角色会被遗漏或滑落。 我找到了解决问题的方法,只需将角色transform.parent更改为跳跃的平台,只要玩家存在平台对撞机,只需返回玩家原始transform.parent

请注意,这可能会导致需要优化的其他错误或问题,具体取决于您的游戏。

答案 1 :(得分:0)

您可以使用此代码设置/取消设置GameObject的父级:

define("SQL","SELECT * FROM users WHERE fname='eli'");
class usersModel {
function q(){

    global $result1;
    $result1 = $this->conn->query(SQL);
    $result2 = $result1->fetch_assoc();
    $fname = ($result2['fname']);
    return $fname;
}

你应该做的是:

  1. 创建一个空的GameObject,然后让你的平台成为孩子 空GameObject。将其标记为void OnTriggerEnter2D(Collider2D other) { if(other.gameObject.tag == "PlatformGroup") player.SetParent(other.gameObject.transform) } void OnTriggerExit2D(Collider2D other) { if(other.gameObject.tag == "PlatformGroup") player.SetParent(null); }

  2. 您添加脚本以将平台移动到此EmptyGame对象, 而不是在平台本身使用它。

  3. 然后将一个对撞机添加到空游戏对象(PlatformGroup),另一个对着玩家。将其中一个播放器设置为触发器。

  4. 将上面的代码添加到播放器控制器中。

  5. 现在,当玩家跳过平台时,如果它将成为平台的同一GameObject的孩子,他们将在游戏对象中没有任何变形的情况下一起移动。此外,当玩家离开平台,走路或跳出平台时,它将不再是孩子。