Movimentação no Espaço como Jet Pack
2 participantes
Página 1 de 1
Movimentação no Espaço como Jet Pack
Bom dia!
Estou com uma necessidade específica e não estou conseguindo resolver no Unity 2017. Simular movimentação em baixa gravidade de um astronauta em uma nave em primeira pessoa. Estou usando o controle padrão do Unity para primeira pessoa, desmarquei gravidade mas não vai. Ao pular, ele volta ao chão. Se eu usar o Physics.gravity = new Vector3(0, -1.0F, 0) , meu astronauta consegue pular mais alto, mas ele acaba retornando ao "chão" da nave (Na verdade a idéia de pulo será abolida no projeto final) Minha idéia é ele ir até um lugar e ficar lá. Eu até achei um script que trabalha com gravidade baixa (http://wiki.unity3d.com/index.php?title=RigidbodyFPSWalker), inclusive com projeto, mas eu queria algo mais Superman: Apontar o mouse para um lugar, ir até lá e PARAR, como se tivesse com um Jet Pack. Esse script que encontrei simula o que deveria acontecer em gravidade baixa: Você começa um movimento e vai indo até bater em algo, por inércia. Mas gostaria de ao cessar o movimento de forward apertando w por exemplo, o astronauta parasse no ar, não seguisse por inércia. Além disso, nesse script, se você for para o alto não consegue parar de subir e voltar para o chão.
O script é esse:
Alguém pode me ajudar?
Estou com uma necessidade específica e não estou conseguindo resolver no Unity 2017. Simular movimentação em baixa gravidade de um astronauta em uma nave em primeira pessoa. Estou usando o controle padrão do Unity para primeira pessoa, desmarquei gravidade mas não vai. Ao pular, ele volta ao chão. Se eu usar o Physics.gravity = new Vector3(0, -1.0F, 0) , meu astronauta consegue pular mais alto, mas ele acaba retornando ao "chão" da nave (Na verdade a idéia de pulo será abolida no projeto final) Minha idéia é ele ir até um lugar e ficar lá. Eu até achei um script que trabalha com gravidade baixa (http://wiki.unity3d.com/index.php?title=RigidbodyFPSWalker), inclusive com projeto, mas eu queria algo mais Superman: Apontar o mouse para um lugar, ir até lá e PARAR, como se tivesse com um Jet Pack. Esse script que encontrei simula o que deveria acontecer em gravidade baixa: Você começa um movimento e vai indo até bater em algo, por inércia. Mas gostaria de ao cessar o movimento de forward apertando w por exemplo, o astronauta parasse no ar, não seguisse por inércia. Além disso, nesse script, se você for para o alto não consegue parar de subir e voltar para o chão.
O script é esse:
- Código:
[size=12][b]using[/b] UnityEngine;
[b]using[/b] System.Collections;
[RequireComponent (typeof (Rigidbody))]
[RequireComponent (typeof (CapsuleCollider))]
[b]public[/b] [b]class[/b] CharacterControls : MonoBehaviour {
[b]public[/b] [b]float[/b] speed = 10.0f;
[b]public[/b] [b]float[/b] gravity = 10.0f;
[b]public[/b] [b]float[/b] maxVelocityChange = 10.0f;
[b]public[/b] [b]bool[/b] canJump = [b]true[/b];
[b]public[/b] [b]float[/b] jumpHeight = 2.0f;
[b]private[/b] [b]bool[/b] grounded = [b]false[/b];
[b]void[/b] Awake () {
rigidbody.freezeRotation = [b]true[/b];
rigidbody.useGravity = [b]false[/b];
}
[b]void[/b] FixedUpdate () {
[b]if[/b] (grounded) {
[i]// Calculate how fast we should be moving[/i]
Vector3 targetVelocity = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
targetVelocity = transform.TransformDirection(targetVelocity);
targetVelocity *= speed;
[i]// Apply a force that attempts to reach our target velocity[/i]
Vector3 velocity = rigidbody.velocity;
Vector3 velocityChange = (targetVelocity - velocity);
velocityChange.x = Mathf.Clamp(velocityChange.x, -maxVelocityChange, maxVelocityChange);
velocityChange.z = Mathf.Clamp(velocityChange.z, -maxVelocityChange, maxVelocityChange);
velocityChange.y = 0;
rigidbody.AddForce(velocityChange, ForceMode.VelocityChange);
[i]// Jump[/i]
[b]if[/b] (canJump && Input.GetButton("Jump")) {
rigidbody.velocity = new Vector3(velocity.x, CalculateJumpVerticalSpeed(), velocity.z);
}
}
[i]// We apply gravity manually for more tuning control[/i]
rigidbody.AddForce(new Vector3 (0, -gravity * rigidbody.mass, 0));
grounded = [b]false[/b];
}
[b]void[/b] OnCollisionStay () {
grounded = [b]true[/b];
}
[b]float[/b] CalculateJumpVerticalSpeed () {
[i]// From the jump height and gravity we deduce the upwards speed [/i]
[i]// for the character to reach at the apex.[/i]
[b]return[/b] Mathf.Sqrt(2 * jumpHeight * gravity);
}
}[/size]
Alguém pode me ajudar?
Lagoeiro- Iniciante
- PONTOS : 3011
REPUTAÇÃO : 0
Respeito as regras :
Re: Movimentação no Espaço como Jet Pack
Você copiou este código de alguma página web??? ele está cheio de tags html
Re: Movimentação no Espaço como Jet Pack
É o código que está no link. Não consegui editar a resposta anterior|
- Código:
using UnityEngine;
using System.Collections;
[RequireComponent (typeof (Rigidbody))]
[RequireComponent (typeof (CapsuleCollider))]
public class CharacterControls : MonoBehaviour {
public float speed = 10.0f;
public float gravity = 10.0f;
public float maxVelocityChange = 10.0f;
public bool canJump = true;
public float jumpHeight = 2.0f;
private bool grounded = false;
void Awake () {
rigidbody.freezeRotation = true;
rigidbody.useGravity = false;
}
void FixedUpdate () {
if (grounded) {
// Calculate how fast we should be moving
Vector3 targetVelocity = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
targetVelocity = transform.TransformDirection(targetVelocity);
targetVelocity *= speed;
// Apply a force that attempts to reach our target velocity
Vector3 velocity = rigidbody.velocity;
Vector3 velocityChange = (targetVelocity - velocity);
velocityChange.x = Mathf.Clamp(velocityChange.x, -maxVelocityChange, maxVelocityChange);
velocityChange.z = Mathf.Clamp(velocityChange.z, -maxVelocityChange, maxVelocityChange);
velocityChange.y = 0;
rigidbody.AddForce(velocityChange, ForceMode.VelocityChange);
// Jump
if (canJump && Input.GetButton("Jump")) {
rigidbody.velocity = new Vector3(velocity.x, CalculateJumpVerticalSpeed(), velocity.z);
}
}
// We apply gravity manually for more tuning control
rigidbody.AddForce(new Vector3 (0, -gravity * rigidbody.mass, 0));
grounded = false;
}
void OnCollisionStay () {
grounded = true;
}
float CalculateJumpVerticalSpeed () {
// From the jump height and gravity we deduce the upwards speed
// for the character to reach at the apex.
return Mathf.Sqrt(2 * jumpHeight * gravity);
}
}
Lagoeiro- Iniciante
- PONTOS : 3011
REPUTAÇÃO : 0
Respeito as regras :
Re: Movimentação no Espaço como Jet Pack
ah, isso não vai dar certo, você vai ter que fazer o próprio FPSController...
Isto por que os controllers utilizam o CharacterController que usa a função .move para se movimentarem, então, aditivos de vector 3 e AddForce vão trazer efeitos errados no seu Player.
Isto por que os controllers utilizam o CharacterController que usa a função .move para se movimentarem, então, aditivos de vector 3 e AddForce vão trazer efeitos errados no seu Player.
Tópicos semelhantes
» Como adicionar espaço em uma array com script?
» Como transformar um vídeo em espaço editável na Unity?
» Como fazer movimentação igual do Super Mario 64?
» Como evitar que personagem se levante onde não há espaço suficiente?
» Como faço uma movimentação na lanterna
» Como transformar um vídeo em espaço editável na Unity?
» Como fazer movimentação igual do Super Mario 64?
» Como evitar que personagem se levante onde não há espaço suficiente?
» Como faço uma movimentação na lanterna
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos