Member 10610621 Ответов: 0

Создание экземпляров пользовательских сборных групп в 2D игре unity


Ребята, ниже приведен мой код для моего PlaycontrollerScript и PlatformMover script то ,что я пытаюсь достичь здесь ,это то ,что я хочу, когда мой игрок прыгает на платформу, что конкретная группа платформы спускается вниз, в основном как Doodle jump, но так как я делаю что-то не так здесь группы платформ появляются идеально, но они не двигаются, я довольно новичок в этом. может ли кто-нибудь дать мне представление о том, что я делаю неправильно, или направить меня к учебнику или чему-то еще, любая помощь будет оценена по достоинству
<pre>public class PlatformMover : MonoBehaviour {

  public GameObject[] easyGroups;
  public GameObject currentGroup;
  public GameObject nextGroup;
  public GameObject startingPlatform;
  public GameObject lastObjectJumped;
  public int rand;
  public int easyMin;
  public int easyMax;
  public Transform startingGroupTran;
  public Transform topSpawnTran;
  public Transform lowestTran;
  public float speedDown;
  public float toLerpDif;
  public Vector3 toLerp;

  // Use this for initialization
  void OnEnable ()
  {
      FirstGroupFunction();


  }

  void Update()
  {
      if (nextGroup.transform.position.y <= 0)
      {
          newGroup();
      }

      groupMoveFunction();

  }

  void FirstGroupFunction()
  {
      rand = Random.Range(easyMin, easyMax);
      currentGroup = Instantiate(easyGroups[rand], startingGroupTran.position, startingGroupTran.rotation) as GameObject;
      rand = Random.Range(easyMin, easyMax);
      nextGroup = Instantiate(easyGroups[rand], topSpawnTran.position, topSpawnTran.rotation) as GameObject;
      nextGroup.transform.SetParent(currentGroup.transform);
      startingPlatform.transform.SetParent(currentGroup.transform);
  }


  void groupMoveFunction()
  {

      currentGroup.transform.position = Vector3.Lerp(currentGroup.transform.position, toLerp, speedDown * Time.deltaTime);
  }
  // Update is called once per frame

  void newGroup()
  {
      nextGroup.transform.SetParent(null);
      Destroy(currentGroup);
      currentGroup = nextGroup;
      rand = Random.Range(easyMin, easyMax);
      nextGroup = Instantiate(easyGroups[rand], topSpawnTran.position, topSpawnTran.rotation) as GameObject;
      nextGroup.transform.SetParent(currentGroup.transform);
      toLerpDif = lastObjectJumped.transform.position.y - lowestTran.position.y;
      toLerp = new Vector3(0, currentGroup.transform.position.y - toLerpDif, 0);

  }

<pre>public class Pandacontroller : MonoBehaviour {

  public float maxSpeed = 10f;
  bool facingRight = true;

  Animator anim;

  bool grounded = false;
  public Transform groundCheck;
  float groundRadius = 0.2f;
  public float jumpForce = 700f;
  public LayerMask whatisGround;
  public PlatformMover controller;
  public string lastjump;
  public GameObject panda;
  public Rigidbody2D pandaRigid;
  public bool isJumping;
  public int jumptop;
  public Vector3 toLerp;


  // Use this for initialization
  void OnTriggerEnter2d(Collider2D other)
  {
      if (other.tag == "Platforms")
      {
          isJumping = true;
          pandaRigid.gravityScale = 0;
          pandaRigid.velocity = Vector3.zero;
      }

      if(other.tag == "Platforms")
      {
          lastjump = "Platforms";
          controller.lastObjectJumped = other.gameObject;
          controller.toLerpDif = controller.lastObjectJumped.transform.position.y - controller.lowestTran.position.y;
          controller.toLerp = new Vector3(0, controller.currentGroup.transform.position.y - controller.toLerpDif, 0);
      }
  }

  void Start ()
  {
      anim = GetComponent<Animator>();


  }




  void FixedUpdate ()
  {
      grounded = Physics2D.OverlapCircle(groundCheck.position, groundRadius, whatisGround);
      anim.SetBool("Ground", grounded);
      anim.SetFloat("vSpeed", GetComponent<Rigidbody2D>().velocity.y);




      float move = Input.GetAxisRaw("Horizontal");
      GetComponent<Rigidbody2D>().velocity = new Vector2(move * maxSpeed, GetComponent<Rigidbody2D>().velocity.y);

      anim.SetFloat("speed", Mathf.Abs(move));


      //flip
      if (move > 0 && !facingRight)
          flip();
      else if (move < 0 && facingRight)
          flip();



  }

  void Update()
  {
      if (grounded && Input.GetKeyDown(KeyCode.Space))
      {
          anim.SetBool("Ground", false);
          GetComponent<Rigidbody2D>().AddForce(new Vector2(0, jumpForce));
      }

  }

  void flip()
      {
      facingRight = !facingRight;

      Vector3 theScale = transform.localScale;
      theScale.x *= -1;
      transform.localScale = theScale;

  }


Что я уже пробовал:

Я попробовал нормальное создание экземпляра в определенной точке, это сработало, но было не то ,что я искал, я использовал случайные продолжения поколений платформы, движущейся вниз, которые работали, но это не то, что я тоже искал, но то, как они делают это в Doodle jump, кажется мне достаточно хорошим, поэтому я хочу попробовать это сделать.

0 Ответов