切换相机遵循统一3d中的对象

时间:2017-04-29 12:05:47

标签: c# unity3d camera

我正在尝试将一个相机切换到另一个相机以跟随球体。在我的剧本中发生的事情是,首先主摄像机将球聚焦,一旦抓住并抛出,主摄像机就会关闭或禁用,第二台摄像机可以在运动时跟随球。但是第二台摄像机没有跟随球的方向。下面是我实现的脚本。

注意: - 我在运行时将第二个相机脚本附加到第二个相机。

PickupObject.cs

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

public class pickupobject : MonoBehaviour
{
    GameObject mainCamera;
    //public GameObject empty;
    bool carrying;
    public GameObject carriedObject;
    // Camera cam;
    public float distances;
    public float smooth;
    float speed = 1000f;
    private Vector3 offset;
    public Camera camera;

    private MovingBall script;

    // Use this for initialization
    void Start()
    {
        //cam = GameObject.Find("MainCamera").GetComponent<Camera>();
        mainCamera = GameObject.FindWithTag("MainCamera");
        camera = GameObject.FindWithTag("secondCamera").GetComponent<Camera>();

    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.T) && carrying)
        {
            carrying = !carrying;
            ThrowBall();
        }
        if (carrying)
        {
            carry(carriedObject);
            // CheckDrop();
        }
        else
        {
            pickup();
        }


    }

    private void pickup()
    {
        if (Input.GetKeyDown(KeyCode.E))
        {

            int x = Screen.width / 2;
            int y = Screen.height / 2;
            Ray ray = mainCamera.GetComponent<Camera>().ScreenPointToRay(new Vector3(x, y));
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                pickupable p = hit.collider.GetComponent<pickupable>();

                if (p != null)
                {
                    carrying = true;
                    carriedObject = p.gameObject;


                    camera.enabled = true;

                    camera.gameObject.AddComponent<CameraController>();
                    carriedObject.AddComponent<MovingBall>();

                }
            }
        }
    }

    void carry(GameObject o)
    {
        o.GetComponent<Rigidbody>().isKinematic = true;
        o.transform.position = mainCamera.transform.position + mainCamera.transform.forward * distances;

    }


    //void CheckDrop()
    //{
    //    if (Input.GetKeyDown(KeyCode.U))
    //    {
    //        Drop();
    //    }
    //}

    //void Drop()
    //{
    //    ThrowBall();

    //}
    void ThrowBall()
    {
        mainCamera.SetActive(false);

        carriedObject.GetComponent<Rigidbody>().isKinematic = false;

        carriedObject.GetComponent<Rigidbody>().AddForce(0f, 0f, speed);


    }

}

CameraController.cs

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

public class CameraController : MonoBehaviour {

    // Use this for initialization

    public GameObject icosphere;
    private Vector3 offset;
    pickupobject ball = new pickupobject();


    void Start () {
        ball.camera = GameObject.FindWithTag("secondCamera").GetComponent<Camera>();
        //offset = transform.position - icosphere.transform.position;
        //icosphere = GameObject.FindWithTag("yellowball");
        // icosphere = ball.carriedObject.GetComponent<GameObject>();
        offset = ball.camera.transform.position - GameObject.FindWithTag("purpleball").transform.position;

    }

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

        ball.camera.transform.position = GameObject.FindWithTag("purpleball").transform.position + offset;
       // transform.position = ball.carriedObject.GetComponent<GameObject>().transform.position + offset;

    }


}

0 个答案:

没有答案