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