Я предлагаю сделать вещи немного лучше, во-первых, не делайте вещи жестко закодированными, чтобы они могли принимать больше объектов ... Второй придерживайтесь более простого решения.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LookAtObject : MonoBehaviour {
public float Speed = 0.001f;
private Transform _go;
// Update is called once per frame
void Update ()
{
if (_go == null) return;
Vector3 direction = _go.transform.position - transform.position;
Quaternion toRotation = Quaternion.FromToRotation(transform.forward, direction);
transform.rotation = Quaternion.Lerp(transform.rotation, toRotation, Speed * Time.time);
}
public void AdjustOrientation(Transform go)
{
_go = go;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class OnClick : MonoBehaviour
{
private LookAtObject _lookAt;
public void Start()
{
_lookAt = FindObjectOfType<LookAtObject>();
}
public void Update()
{
if (Input.GetMouseButtonDown(0))
{
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100))
{
//optionally if(hit.collider.tag != "MyTag") return;
_lookAt.AdjustOrientation(hit.transform);
}
}
}
}
Поместите эти классы на камеру, чтоСлучается, что это первый класс, который он берет в объекте, на который вы хотите посмотреть через AdjustOrientation.Обновление будет смотреть на этот объект после его заполнения.
Второй класс позволяет щелкнуть любой объект в сцене, который содержит твердое тело и является кинематическим.После того, как объект будет нажат, он установит AdjustOrientations, заставляя камеру смотреть на этот объект, вы можете легко добавить тег в ваш gameObject и указать, что если hit.collider.tag == "LookAt", то разрешить ему смотреть.