es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Haz que el Collider CC siga a la cámara (UNITY)

Así que hice un script que, en teoría, debería hacer que el Collider del Controlador de Personaje siga la cámara del jugador. Aquí está el script:

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

public class CCCameraFollower : MonoBehaviour
{
    public GameObject Camera;
    public CharacterController character;

    void Start()
    {
        character = GetComponent<charactercontroller>();
    }

    void LateUpdate()
    {
        character.center = Camera.transform.position;
    }
}

Esto funciona correctamente cuando lo pruebo, sin embargo, tan pronto como ingreso Climb() en mi script de escalador:

void Climb()
{
    InputDevices.GetDeviceAtXRNode(climbingHand.controllerNode)
        .TryGetFeatureValue(CommonUsages.deviceVelocity, out Vector3 velocity);

    character.Move(transform.rotation * -velocity * Time.fixedDeltaTime);
    cachedVelocity = -velocity;
    Debug.Log(cachedVelocity);
}

Cuando se ejecuta este Climb(), esto sucede:
Imagen que muestra el problema

No veo una razón para que esto suceda, tal vez sea muy obvio. No lo sé… De todos modos, mi pregunta es: “¿Cómo puedo hacer que el Collider del Controlador de Personaje siga la cámara del jugador?”.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Según el código proporcionado, parece que el problema es causado por la transform.rotation aplicada al vector velocity al mover el controlador de personaje en el método Climb().

    Para hacer que el colisionador del controlador de personaje siga la cámara del jugador sin interferir con la funcionalidad de escalada, el método LateUpdate() en el script CCCameraFollower se puede modificar para actualizar la posición del controlador de personaje según la posición de la cámara en relación con la transformación del personaje.

    Aquí tienes un ejemplo de cómo se puede implementar:

    public class CCCameraFollower : MonoBehaviour
    {
        public GameObject cameraObject;
        public CharacterController characterController;
    
        void Start()
        {
            characterController = GetComponent<charactercontroller>();
        }
    
        void LateUpdate()
        {
            if (!characterController.enabled) return;
    
            // Obtener la posición de la cámara en relación con el personaje
            Vector3 cameraPosition = characterController.transform.InverseTransformPoint(cameraObject.transform.position);
    
            // Establecer la posición central del colisionador del personaje basada en la posición de la cámara
            characterController.center = new Vector3(cameraPosition.x, characterController.height / 2f, cameraPosition.z);
        }
    }
    

    En el método LateUpdate(), se utiliza el método transform.InverseTransformPoint() para obtener la posición de la cámara en relación con la transformación del personaje. Luego, se utilizan los componentes x y z de la posición de la cámara para establecer el centro del colisionador del controlador de personaje, con el componente y establecido en la mitad de la altura del personaje.

    Este enfoque debería permitir que el colisionador del controlador de personaje siga la cámara sin afectar la funcionalidad de escalada.

Comments are closed.