首页 > 解决方案 > 统一变换位置设置对象中的边界

问题描述

我正在尝试使精灵在面板内连续下降,然后在到达面板的底部边界时停止。问题是在我设置了它必须停止移动的对象的位置之后,它让我 position.y = 0 就好像它是屏幕的中间一样。当到达其父对象(面板)的底部时,如何将其设置为停止移动。谢谢你。这是我的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Transform_test : MonoBehaviour
{
[SerializeField]
SpriteRenderer[] Reels;
[SerializeField]
Transform[] ReelsTransform;
int speed;
bool drop;
[SerializeField]
GameObject Panel;





void Start()
{
    Debug.Log(transform);
    //transform.position = new Vector3 (10,0,0);
    speed = 1;
    drop = false;
}

// Update is called once per frame
void Update()
{
   // test();

   
    
    
        if (drop == false)
        {
          foreach (Transform Reels in ReelsTransform)//This Targets All Children Objects Of The Main Parent Object
        {
             Debug.Log("pos " + Reels.transform.position.y); 
        for (int i = 0;i<5;i++)
            {
            //Direction And Speed Of Movement
            new WaitForSeconds(Random.Range(1, 3));
            Reels.transform.Translate(Vector3.down * Time.smoothDeltaTime * speed, Space.World);
            
            if (Reels.transform.position.y <= 0 ) 
           {
              
            Reels.transform.position = new Vector3(Reels.transform.position.x, Reels.transform.position.y + 58, Reels.transform.position.z); 
           }
            }  
            
        }
        }

    
}

}

标签: c#unity3d

解决方案


好的,这就是我解决它的方法。我在我希望卷轴停止的地方创建了一个空精灵,然后我设置 if 以将该位置与卷轴中第一个精灵的位置相匹配。如果位置匹配。将 moveto 设置为 true 并停止移动

public class transform2 : MonoBehaviour
{
public float speed;
public SpriteRenderer sprite1;
public SpriteRenderer[] sprites;
public SpriteRenderer cell1;
public GameObject Panel;
bool moveto;


void move()
{
    if (moveto == false)
    {
        foreach (SpriteRenderer sprites in sprites)
        {
    sprites.transform.Translate(Vector3.down * Time.smoothDeltaTime * speed, Space.World);
    if (sprite1.transform.position.y <= cell1.transform.position.y)
    {
        moveto = true;
        sprite1.transform.position = cell1.transform.position;
    }
    Debug.Log("MOVE");
        }
    }



}
// Start is called before the first frame update
void Start()
{   
    speed = 20;
}
// Update is called once per frame
void Update()
{
    move();
}
}

推荐阅读