【问题标题】:Unity3D position Update when gameObject is changedUnity3D位置在gameObject改变时更新
【发布时间】:2021-02-07 15:38:12
【问题描述】:

我正在尝试制作一个车辆更换游戏,其中有 3 个游戏对象:汽车、坦克和悬停,如果我按下按钮从汽车更改为坦克/悬停,我希望它们处于汽车所在的位置.

z 轴向前

我在下面尝试了这段代码,但是当我向后退时,这将不起作用

UnityEngine;

public class Carswitcer : MonoBehaviour
{
public Transform car;
public Transform hover;
public Transform tank;

void Start()
{
    car.gameObject.SetActive(true);
    tank.gameObject.SetActive(false);
    hover.gameObject.SetActive(false);
}


public void Car()
    {
    
        if (car.position.z < hover.position.z)
            {
                car.position = hover.position;
            }
        if (car.position.z < tank.position.z)
            {
                car.position = tank.position;
            }

        car.gameObject.SetActive(true);
        tank.gameObject.SetActive(false);
        hover.gameObject.SetActive(false);
    }


public void Tank()
    {

        if (tank.position.z < hover.position.z)
            {
                tank.position = hover.position;
            }
        if (tank.position.z < car.position.z)
            {
                tank.position = car.position;
            }
        car.gameObject.SetActive(false);
        tank.gameObject.SetActive(true);
        hover.gameObject.SetActive(false);
    }



public void Hover()
    {

        if (hover.position.z < car.position.z)
            {
                hover.position = car.position;
            }
        if (hover.position.z < tank.position.z)
            {
                hover.position = tank.position;
            }

        car.gameObject.SetActive(false);
        tank.gameObject.SetActive(false);
        hover.gameObject.SetActive(true);

    }   
      

【问题讨论】:

    标签: c# unity3d position transform


    【解决方案1】:

    为什么要比较z?只需始终复制当前活动车辆的位置:

    public class Carswitcer : MonoBehaviour
    {
        public Transform car;
        public Transform hover;
        public Transform tank;
    
        // Store the current vehicle
        private Transform currentVehicle;
    
        void Start()
        {
            tank.gameObject.SetActive(false);
            hover.gameObject.SetActive(false);
    
            SetActiveVehicle(car);           
        }
    
        private void SetActiveVehicle(Transform newActiveVehicle)
        {
            // Is there a current vehicle?
            if(currentVehicle)
            {
                // If so copy its position and set it inactive
                newActiveVehicle.position = currentVehicle.position;
                currentVehicle.gameObject.SetActive(false);
            }
    
            // Store the new active reference and set it active
            currentVehicle = newActiveVehicle;
            currentVehicle.gameObject.SetActive(true);
        }
    
        public void Car()
        {
            SetActiveVehicle(car);
        }
    
    
        public void Tank()
        {
            SetActiveVehicle(tank);
        }
    
        public void Hover()
        {        
            SetActiveVehicle(hover);
        }   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多