Como mover persongaem (terceira pessoa) ignorando para onde a câmera aponta
2 participantes
Página 1 de 1
Como mover persongaem (terceira pessoa) ignorando para onde a câmera aponta
Bom dia pessoal.
A pergunta é sobre a game engine Unity.
A pergunta é relacionada ao componente Cinemachine.
Estou tentando fazer uma esfera se mover por um semi-circulo com uma câmera fixada num trilho, tudo funciona bem, porem, ao chegar a um certo ponto a esfera para de se mover, é como se ela tivesse inatingido o limite que a câmera permite. Com as teclas direcionais sempre trava, com o analógico de um joystick até é possível fazer o percusso com certa dificuldade, alguém saberia me dizer como fazer para não ter essa limitação de movimento aparentemente provocada pela câmera?
A pergunta é sobre a game engine Unity.
A pergunta é relacionada ao componente Cinemachine.
Estou tentando fazer uma esfera se mover por um semi-circulo com uma câmera fixada num trilho, tudo funciona bem, porem, ao chegar a um certo ponto a esfera para de se mover, é como se ela tivesse inatingido o limite que a câmera permite. Com as teclas direcionais sempre trava, com o analógico de um joystick até é possível fazer o percusso com certa dificuldade, alguém saberia me dizer como fazer para não ter essa limitação de movimento aparentemente provocada pela câmera?
Re: Como mover persongaem (terceira pessoa) ignorando para onde a câmera aponta
precisamos de mais informações sobre como você construiu a cena, quais scripts usou, etc, etc.
Re: Como mover persongaem (terceira pessoa) ignorando para onde a câmera aponta
- Código:
using System;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;
namespace UnityStandardAssets.Vehicles.Ball
{
public class BallUserControl : MonoBehaviour
{
private Ball ball; // Reference to the ball controller.
private Vector3 move;
// the world-relative desired move direction, calculated from the camForward and user input.
private Transform cam; // A reference to the main camera in the scenes transform
private Vector3 camForward; // The current forward direction of the camera
private bool jump; // whether the jump button is currently pressed
private void Awake()
{
// Set up the reference.
ball = GetComponent<Ball>();
// get the transform of the main camera
if (Camera.main != null)
{
cam = Camera.main.transform;
}
else
{
Debug.LogWarning(
"Warning: no main camera found. Ball needs a Camera tagged "MainCamera", for camera-relative controls.");
// we use world-relative controls in this case, which may not be what the user wants, but hey, we warned them!
}
}
private void Update()
{
// Get the axis and jump input.
float h = CrossPlatformInputManager.GetAxis("Horizontal");
float v = CrossPlatformInputManager.GetAxis("Vertical");
jump = CrossPlatformInputManager.GetButton("Jump");
// calculate move direction
if (cam != null)
{
// calculate camera relative direction to move:
camForward = Vector3.Scale(cam.forward, new Vector3(1, 0, 1)).normalized;
move = (v*camForward + h*cam.right).normalized;
}
else
{
// we use world-relative directions in the case of no main camera
move = (v*Vector3.forward + h*Vector3.right).normalized;
}
}
private void FixedUpdate()
{
// Call the Move function of the ball controller
ball.Move(move, jump);
jump = false;
}
}
}
- Código:
using System;
using UnityEngine;
namespace UnityStandardAssets.Vehicles.Ball
{
public class Ball : MonoBehaviour
{
[SerializeField] private float m_MovePower = 5; // The force added to the ball to move it.
[SerializeField] private bool m_UseTorque = true; // Whether or not to use torque to move the ball.
[SerializeField] private float m_MaxAngularVelocity = 25; // The maximum velocity the ball can rotate at.
[SerializeField] private float m_JumpPower = 2; // The force added to the ball when it jumps.
private const float k_GroundRayLength = 1f; // The length of the ray to check if the ball is grounded.
private Rigidbody m_Rigidbody;
private void Start()
{
m_Rigidbody = GetComponent<Rigidbody>();
// Set the maximum angular velocity.
GetComponent<Rigidbody>().maxAngularVelocity = m_MaxAngularVelocity;
}
public void Move(Vector3 moveDirection, bool jump)
{
// If using torque to rotate the ball...
if (m_UseTorque)
{
// ... add torque around the axis defined by the move direction.
m_Rigidbody.AddTorque(new Vector3(moveDirection.z, 0, -moveDirection.x)*m_MovePower);
}
else
{
// Otherwise add force in the move direction.
m_Rigidbody.AddForce(moveDirection*m_MovePower);
}
// If on the ground and jump is pressed...
if (Physics.Raycast(transform.position, -Vector3.up, k_GroundRayLength) && jump)
{
// ... add force in upwards.
m_Rigidbody.AddForce(Vector3.up*m_JumpPower, ForceMode.Impulse);
}
}
}
}
A câmera possui o componente Cinemachine, eu acho que isso ocorre porque a movimentação do objeto funciona de acordo com a posição para onde a câmera aponta, se houvesse uma forma de mover o objeto independentemente da direção apontada pela câmera, acho que resolveria o problema. Tentei dar uma olhada nas opções do Cinemachine, mas não achei nada que fizesse diferença em relação a isso.
Re: Como mover persongaem (terceira pessoa) ignorando para onde a câmera aponta
Fiz vários testes, em outra cena o problema não ocorre, portanto, o problema deve estar na cena em questão. Eu suspeito que pode ter a ver com o modelo 3D do nível.

» Camera Em Terceira Pessoa Com Zoom
» No script da "Câmera estilo Gta" como faço para o mouse mover a câmera ?
» Como fazer um sistema de mira para jogo em terceira pessoa?
» Como usar um Boneco como Terceira Pessoa
» Olhar para onde o mouse aponta
» No script da "Câmera estilo Gta" como faço para o mouse mover a câmera ?
» Como fazer um sistema de mira para jogo em terceira pessoa?
» Como usar um Boneco como Terceira Pessoa
» Olhar para onde o mouse aponta
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos