0

我是 Unity 和 Javascript 的新手,并试图重新创建益智游戏 Cryptica 作为学习体验以进入引擎。我试图在调用四个 OnGUI 按钮之一时同时移动两个对象:左、上、右和下。该脚本已附加到两个对象,但只移动一个。

如果我创建一个空的游戏对象并将两个对象添加到其中并将脚本放在空对象上然后两者都移动,但是我无法创建逻辑来根据不同的场景以不同的方式移动每个对象(即,如果一个对象位于棋盘的末端,它不应再朝该方向移动,但另一个物体可能仍会移动)。这是代码,让我知道图像是否会更有帮助。

var cubeMovement = 11;

function Update () {

}

function OnGUI () {
    //Move dynamic cubes
    if (GUI.Button (Rect (250,150,50,50), "Up")) {
        transform.Translate(cubeMovement,0,0);
    }

    if (GUI.Button (Rect (350,250,50,50), "Right")) {
        transform.Translate(0,0,-cubeMovement);

    }

    if (GUI.Button (Rect (250,350,50,50), "Down")) {
        transform.Translate(-cubeMovement,0,0);
    }

    if (GUI.Button (Rect (150,250,50,50), "Left")) {
        transform.Translate(0,0,cubeMovement);
    }
}
4

1 回答 1

0

在 2 个不同对象上使用此脚本的问题在于,两个对象都呈现相同的 4 个按钮。所以你实际上在屏幕上有 8 个按钮,只是最后绘制的按钮在顶部。

更新多个多维数据集的逻辑如下所示:

function CubeVisible(var go: GameObject){
    var screenPos : Vector3 = camera.WorldToScreenPoint (go.transform.position);
    if(screenPos.x < 0) return false;
    if(screenPos.x > Screen.width) return false;

    //Do the same for the y axis

    //Negative-z means the object is behind the camera.
    if(screenPos.z < 0) return false;
    return true;    //return true if the object wasn't outside any bounds.
}
function UpdateCubes(var dir: Vector3){
    var cubes: GameObject[] = GameObject.FindGameObjectsWithTag("cubes"); 

    for (cube in cubes) { 
        var pos = cube.transform.position;
        var new_pos = pos + dir;

        if(CubeVisible(new_pos)==true)
            cube.transform.Translate(dir);
    } 
}

function OnGUI () {
    //Move dynamic cubes
    if (GUI.Button (Rect (250,150,50,50), "Up")) {
        UpdateCubes(Vector3(cubeMovement,0,0));
    }

    if (GUI.Button (Rect (350,250,50,50), "Right")) {
        UpdateCubes(Vector3(0,0,-cubeMovement));
    }

    if (GUI.Button (Rect (250,350,50,50), "Down")) {
        UpdateCubes(Vector3(-cubeMovement,0,0));
    }

    if (GUI.Button (Rect (150,250,50,50), "Left")) {
        UpdateCubes(Vector3(0,0,cubeMovement));
    }
}

我的 javascript-fu 有点生疏,我是 C# 人,所以希望我没有犯愚蠢的错误。以上应该是您正在寻找的。测试您的对象是否仍在视野中的问题是您的对象位于世界坐标中,听起来您想知道您的对象是否在屏幕外。最简单的方法是首先将对象的位置转换为 2D 屏幕坐标,然后测试它是否在屏幕上。该路径也有问题,它假设您的对象以它自己的原点为中心。

哦,还有“标签”。选择任何游戏对象时,可以在“检查器”中找到标签。您可以创建自己的自定义标签。有关解释,请参阅 wiki。

于 2012-07-10T14:19:38.653 回答