C# 为什么更改汽车变换组件中的位置不会在Unity3d中移动我的汽车对象

C# 为什么更改汽车变换组件中的位置不会在Unity3d中移动我的汽车对象,c#,unity3d,C#,Unity3d,饶了我吧,我是初学者!。 在我的游戏中,眼睛和汽车之间的距离决定了汽车的速度。眼睛被鼠标移动。在x或y方向上每秒移动的最大单位数(MoveMaxUnitsPerSecond)。眼睛和汽车之间在x和y方向上的距离相对于x(Xmax)和y(Ymax)方向上的最大距离决定了这些方向上的速度。 控制台中没有错误消息,但车辆(pitstopCar5Pos)不移动。我猜是在最后两行。我做错了什么 // using System.Collections; using System.Collections

饶了我吧,我是初学者!。 在我的游戏中,眼睛和汽车之间的距离决定了汽车的速度。眼睛被鼠标移动。在x或y方向上每秒移动的最大单位数(MoveMaxUnitsPerSecond)。眼睛和汽车之间在x和y方向上的距离相对于x(Xmax)和y(Ymax)方向上的最大距离决定了这些方向上的速度。 控制台中没有错误消息,但车辆(pitstopCar5Pos)不移动。我猜是在最后两行。我做错了什么

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

public class LineCarEye : MonoBehaviour {
//Script for PitstopCar5 GameObject

    // Use this for initialization
    void Start () {


    }

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

        // MaxSpeed left or right
        const float MoveMaxUnitsPerSecond = 5;
        // Width playfield in world coordinates
        const float XMax = 20;
        // Height playfield in world coordinates
        const float YMax = 10;

        //Draw the line between eye and car
        LineRenderer lr = gameObject.GetComponent<LineRenderer>();
        Vector3 blueEyePos = GameObject.Find("BlueEye").transform.position;
        Vector3 pitstopCar5Pos = transform.position;

        lr.SetPosition(0, blueEyePos);
        lr.SetPosition(1, pitstopCar5Pos);

        //Move the car depending on the x-component, y-component of the line and MoveMaxUnitsPerSecond
        pitstopCar5Pos.x += ((blueEyePos.x - pitstopCar5Pos.x)*MoveMaxUnitsPerSecond*Time.deltaTime)/XMax;
        pitstopCar5Pos.y += ((blueEyePos.y - pitstopCar5Pos.y)*MoveMaxUnitsPerSecond*Time.deltaTime)/YMax;

    }
}

//
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类LineCarEye:单一行为{
//PitstopCar5游戏对象的脚本
//用于初始化
无效开始(){
}
//每帧调用一次更新
无效更新(){
//左或右最大速度
常量float MoveMaxUnitsPerSecond=5;
//世界坐标系下的宽度运动场
常量浮点XMax=20;
//世界坐标系下的高度操场
常量浮点YMax=10;
//在眼睛和汽车之间划一条线
LineRenderer lr=gameObject.GetComponent();
Vector3 blueEyePos=游戏对象.Find(“BlueEye”).transform.position;
Vector3 pitstopCar5Pos=变换位置;
lr.设置位置(0,蓝眼位置);
lr.设置位置(1个,斗杆5个);
//根据直线的x分量、y分量和MoveMaxUnitsPerSecond移动汽车
pitstopCar5Pos.x+=((blueEyePos.x-pitstopCar5Pos.x)*移动最大单位秒*时间增量)/XMax;
pitstopCar5Pos.y+=((blueEyePos.y-pitstopCar5Pos.y)*移动最大单位秒*时间增量)/YMax;
}
}

您正在创建一个新的
矢量3
并为其分配
变换位置

Vector3 pitstopCar5Pos = transform.position;
然后更改新的
Vector3

pitstopCar5Pos.x += ((blueEyePos.x - pitstopCar5Pos.x)*MoveMaxUnitsPerSecond*Time.deltaTime)/XMax;
pitstopCar5Pos.y += ((blueEyePos.y - pitstopCar5Pos.y)*MoveMaxUnitsPerSecond*Time.deltaTime)/YMax;
但是,这不会更改
transform.position的值

你需要做的是

transform.position = pitstopCar5Pos;

您正在更改
pitstopCar5Pos
变量类型的
x
y
值,希望它移动
游戏对象
,但它不移动,也不应该移动

这是因为
pitstopCar5Pos
Vector3
的一种,而
Vector3
struct
struct
是一种值类型,与作为引用类型的like
class
不同

一旦你做到了:

Vector3 pitstopCar5Pos = transform.position;
创建位置的副本并将其返回到新的
Vector3
实例。这个新的
Vector3
不再链接到
transform.position

要解决此问题,请在更改后将
矢量3
重新分配给
变换位置

pitstopCar5Pos.x += ((blueEyePos.x - pitstopCar5Pos.x)*MoveMaxUnitsPerSecond*Time.deltaTime)/XMax;
pitstopCar5Pos.y += ((blueEyePos.y - pitstopCar5Pos.y)*MoveMaxUnitsPerSecond*Time.deltaTime)/YMax;

transform.position = pitstopCar5Pos;

对于完整的解释,我理解它,并改变了代码和该死的东西是骑,我很高兴,再次Thx!!。我的回答有一个打字错误。修好了。struct=值类型。类=引用类型。不客气