Unity使用函数

时间:2016-01-17 14:03:19

标签: unity3d camera position transform

我是Unity的新手,我正在努力理解为什么这不起作用。我想要做的是将Vector3.Lerp从当前相机位置移动到对象位置。我想从两个脚本中的函数做。因此,我有两个脚本用于相机,另一个用于立方体。

这是相机的脚本

using UnityEngine;
using System.Collections;

public class CameraScript : MonoBehaviour {

    private Vector3 positionCamera;
    public Camera camera;

    void Start () {
        camera = GetComponent<Camera>();
        positionCamera = camera.transform.position;
    }

    void Update () {
        GoToTarget();
    }

    public void GoTo(Vector3 position)
    {
        positionCamera = Vector3.Lerp(positionCamera, position, Time.deltaTime);
    }

    public void GoToTarget()
    {
        Vector3 newpos = positionCamera;
        camera.transform.position = newpos;
    }
}

多维数据集的脚本

using UnityEngine;
using System.Collections;

public class CubeScript : MonoBehaviour {


    public CameraScript cameraScript;
    private GameObject cube;
    private Vector3 cubePosition;
    private Vector3 newPosition;

    void Start () {
        cameraScript = new CameraScript();

        cube = this.gameObject;

        cubePosition = cube.transform.position;
        newPosition = transform.position;

    }

    // Update is called once per frame
    public void Update () {
        UpdatePosition();
    }

    public void UpdatePosition()
    {
        if (Input.GetKey(KeyCode.Space))
        {
            cameraScript.GoTo(newPosition);
        }

    }
}

我从立方体脚本传递位置并将其发送到相机脚本中的GoTo函数。然后相机应使用Vector3.Lerp将相机移动到立方体的位置。然而,这并不起作用。

如何使用函数进行此操作? 我正在为相机正确使用translate.position吗?或者我应该先分配游戏对象吗?

由于

1 个答案:

答案 0 :(得分:1)

我在CubeScript中编辑了一下,我在按空格键时检查它是否正常。我为我所改变的内容写了评论......仔细阅读......

using UnityEngine;
using System.Collections;

public class CubeScript : MonoBehaviour {   

    [SerializeField]
    private CameraScript cameraScript = null;// Changes here

    private GameObject cube;
    private Vector3 cubePosition;
    private Vector3 newPosition;

    void Start () {
        if (this.cameraScript == null) {
            this.cameraScript = this.gameObject.GetComponent<CameraScript>(); // Changes here
        }

        cube = this.gameObject;

        cubePosition = cube.transform.position;
        newPosition = transform.position;
    }

    // Update is called once per frame
    public void Update () {
        UpdatePosition();
    }

    public void UpdatePosition()
    {
        if (Input.GetKey(KeyCode.Space))
        {
            cameraScript.GoTo(newPosition);
        }
    }
}

有多种方法可以将函数或变量等从一个脚本调用到另一个脚本,check here以及我在此question中的注释以获取更多信息。