[TUTORIAL] Mover objetos com o mouse, estilo Amnesia
+2
janjao0101
RC0D3
6 participantes
Página 1 de 1
[TUTORIAL] Mover objetos com o mouse, estilo Amnesia
.
.
.
.
.
.
.
ATENÇÃO, UMA VERSÃO MAIS RECENTE E SEM BUGS DESTE TUTORIAL ENCONTRA-SE NESTE LINK: https://www.schultzgames.com/t296-tutorial-mover-girar-e-lancar-objetos-com-o-mouse-estilo-amnesia#1448
Versão mais antiga do tutorial abaixo \/ \/ \/
ATENÇÃO, A PRIMEIRA PARTE DO TUTORIAL SERVE NA UNITY 3 OU UNITY 4... SE VOCÊ JÁ ESTIVER USANDO A UNITY 5, UTILIZE OS SCRIPTS DA SEGUNDA PARTE DO TUTORIAL, QUE SÃO ESPECIFICAMENTE DIRECIONADOS A UNITY 5, PARA EVITAR ERROS
Os objetos que são possiveis de se mover, devem ter a tag " OBJETO "
Crie um novo script em C# com o nome OBJETOS e adicione este script nele
Agora vá no script " MouseLook " do seu Player, e troque o codigo daquele script por este código:
Como usar:
No script da caixa você deve configurar apenas a distancia minima e máxima do objeto, e a velocidade de giro
No mouseLook, você deve configurar a variavel distanciaminimadoobjeto, de acordo com a distancia minima que você conseguirá alcançar o objeto
Jogue uma textura na variavel " mira ", tenho esta caso alguém queira:
E na variavel Ativar Mira você pode escolher se quer ativa-la ou não.
=======================================================================
Funcionamento no jogo:
chegando perto e segurando apertado, você pega o objeto
rolando o scrool do mouse, você aproxima e desaproxima o objeto, até os limites que você configurou
segurando " R " apertado enquanto está segurando o objeto, você trava a rotação da camera e pode rotacionar o objeto que está segurando.
SE VOCÊ ESTIVER UTILIZANDO A UNITY 5, USE OS SCRIPTS ABAIXO:
Os objetos que são possiveis de se mover, devem ter a tag " OBJETO "
Crie um novo script em C# com o nome OBJETOS e adicione este script nele
Agora vá no script " MouseLook " do seu Player, e troque o codigo daquele script por este código:
.
.
.
.
.
.
ATENÇÃO, UMA VERSÃO MAIS RECENTE E SEM BUGS DESTE TUTORIAL ENCONTRA-SE NESTE LINK: https://www.schultzgames.com/t296-tutorial-mover-girar-e-lancar-objetos-com-o-mouse-estilo-amnesia#1448
Versão mais antiga do tutorial abaixo \/ \/ \/
ATENÇÃO, A PRIMEIRA PARTE DO TUTORIAL SERVE NA UNITY 3 OU UNITY 4... SE VOCÊ JÁ ESTIVER USANDO A UNITY 5, UTILIZE OS SCRIPTS DA SEGUNDA PARTE DO TUTORIAL, QUE SÃO ESPECIFICAMENTE DIRECIONADOS A UNITY 5, PARA EVITAR ERROS
Os objetos que são possiveis de se mover, devem ter a tag " OBJETO "
Crie um novo script em C# com o nome OBJETOS e adicione este script nele
- Código:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(MeshCollider))]
public class OBJETOS : MonoBehaviour {
private Vector3 screenPoint;
private Vector3 offset;
private GameObject Jogador;
private float distanciaDoJogador;
private bool estaMovento;
public float distanciaMinima = 0;
public float distanciamentoMax = 4;
private float tempoDeDeslocamento = 0.3f;
private Vector3 velocity = Vector3.zero;
private float numeroo;
private Vector3 curPosition;
private Vector3 mousePosition;
public float velocidadeDeRotacao = 5;
void Start (){
estaMovento = false;
Jogador = GameObject.FindWithTag ("Player");
}
void Update (){
distanciaDoJogador = Vector3.Distance (Jogador.transform.position, transform.position);
if (distanciaDoJogador <= distanciaMinima) {
numeroo++;
tempoDeDeslocamento = 0.1f;
} else {
tempoDeDeslocamento = 0.3f;
}
//scrool do mouse
if (Input.GetAxis("Mouse ScrollWheel") < 0){
numeroo--;
}
if (Input.GetAxis("Mouse ScrollWheel") > 0){
numeroo++;
}
if (numeroo < 1) {
numeroo = 1;
}
if (numeroo > distanciamentoMax) {
numeroo = distanciamentoMax;
}
//checar se esta movendo
if (Input.GetMouseButtonDown (0) && MouseLook.consegueMover == true) {
estaMovento = true;
rigidbody.useGravity = false;
}
if (Input.GetMouseButtonUp (0)) {
estaMovento = false;
rigidbody.useGravity = true;
numeroo = 0;
}
}
void OnMouseDown(){
screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
}
void FixedUpdate (){
if (estaMovento == true) {
Vector3 curScreenPoint = new Vector3(Screen.width / 2, Screen.height / 2, screenPoint.z+1+ numeroo);
Vector3 curPosition = Camera.main.ScreenToWorldPoint (curScreenPoint) + offset;
rigidbody.position = Vector3.SmoothDamp(transform.position, curPosition, ref velocity, tempoDeDeslocamento);
}
//ROTACIONAR OBJETOS
if (Input.GetKey(KeyCode.R)) {
MouseLook.SemMovimento = true;
Quaternion rotacaoAtual = transform.rotation;
Quaternion rotacaoFinal = Quaternion.Euler(Input.mousePosition.x/3,Input.mousePosition.y,Input.mousePosition.z);
transform.rotation = Quaternion.Lerp(rotacaoAtual, rotacaoFinal, velocidadeDeRotacao*Time.deltaTime);
} else {
MouseLook.SemMovimento = false;
}
}
}
Agora vá no script " MouseLook " do seu Player, e troque o codigo daquele script por este código:
- Código:
using UnityEngine;
using System.Collections;
[AddComponentMenu("Camera-Control/Mouse Look")]
public class MouseLook : MonoBehaviour {
public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
public RotationAxes axes = RotationAxes.MouseXAndY;
public float sensitivityX = 15F;
public float sensitivityY = 15F;
public float minimumX = -360F;
public float maximumX = 360F;
public float minimumY = -60F;
public float maximumY = 60F;
float rotationY = 0F;
//=============VARIAVEIS ADICIONAIS=====================//
public static bool consegueMover,SemMovimento;
public float DistanciaMinimaDoObjeto = 4;
public Texture2D mira;
public bool ativarMira;
void OnGUI (){
if (ativarMira == true) {
GUI.DrawTexture (new Rect (Screen.width / 2 - mira.width / 2, Screen.height / 2 - mira.height / 2, mira.width, mira.height), mira);
}
}
void Update (){
//=====================RAYCAST=====================//
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
bool colisao = Physics.Raycast (ray, out hit);
if(colisao && Vector3.Distance(transform.position,hit.transform.position)<DistanciaMinimaDoObjeto){
if(hit.transform.gameObject.tag == "OBJETO"){
consegueMover = true;
}
} else {
consegueMover = false;
}
//===================== COMANDOS DO MOUSELOOK ================//
if (SemMovimento == false) {
Screen.lockCursor = false;
if (axes == RotationAxes.MouseXAndY) {
float rotationX = transform.localEulerAngles.y + Input.GetAxis ("Mouse X") * sensitivityX;
rotationY += Input.GetAxis ("Mouse Y") * sensitivityY;
rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
transform.localEulerAngles = new Vector3 (-rotationY, rotationX, 0);
} else if (axes == RotationAxes.MouseX) {
transform.Rotate (0, Input.GetAxis ("Mouse X") * sensitivityX, 0);
} else {
rotationY += Input.GetAxis ("Mouse Y") * sensitivityY;
rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
transform.localEulerAngles = new Vector3 (-rotationY, transform.localEulerAngles.y, 0);
}
}
if (SemMovimento == true) {
Screen.lockCursor = false;
} else {
Screen.lockCursor = true;
}
}
void Start (){
SemMovimento = false;
consegueMover = false;
Screen.showCursor = false;
Screen.lockCursor = true;
if (GetComponent<Rigidbody>())
GetComponent<Rigidbody>().freezeRotation = true;
}
}
Como usar:
No script da caixa você deve configurar apenas a distancia minima e máxima do objeto, e a velocidade de giro
No mouseLook, você deve configurar a variavel distanciaminimadoobjeto, de acordo com a distancia minima que você conseguirá alcançar o objeto
Jogue uma textura na variavel " mira ", tenho esta caso alguém queira:
E na variavel Ativar Mira você pode escolher se quer ativa-la ou não.
=======================================================================
Funcionamento no jogo:
chegando perto e segurando apertado, você pega o objeto
rolando o scrool do mouse, você aproxima e desaproxima o objeto, até os limites que você configurou
segurando " R " apertado enquanto está segurando o objeto, você trava a rotação da camera e pode rotacionar o objeto que está segurando.
SE VOCÊ ESTIVER UTILIZANDO A UNITY 5, USE OS SCRIPTS ABAIXO:
Os objetos que são possiveis de se mover, devem ter a tag " OBJETO "
Crie um novo script em C# com o nome OBJETOS e adicione este script nele
- Código:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(MeshCollider))]
public class OBJETOS : MonoBehaviour {
private Vector3 screenPoint;
private Vector3 offset;
private GameObject Jogador;
private float distanciaDoJogador;
private bool estaMovento;
public float distanciaMinima = 0;
public float distanciamentoMax = 4;
private float tempoDeDeslocamento = 0.3f;
private Vector3 velocity = Vector3.zero;
private float numeroo;
private Vector3 curPosition;
private Vector3 mousePosition;
public float velocidadeDeRotacao = 5;
void Start (){
estaMovento = false;
Jogador = GameObject.FindWithTag ("Player");
}
void Update (){
distanciaDoJogador = Vector3.Distance (Jogador.transform.position, transform.position);
if (distanciaDoJogador <= distanciaMinima) {
numeroo++;
tempoDeDeslocamento = 0.1f;
} else {
tempoDeDeslocamento = 0.3f;
}
//scrool do mouse
if (Input.GetAxis("Mouse ScrollWheel") < 0){
numeroo--;
}
if (Input.GetAxis("Mouse ScrollWheel") > 0){
numeroo++;
}
if (numeroo < 1) {
numeroo = 1;
}
if (numeroo > distanciamentoMax) {
numeroo = distanciamentoMax;
}
//checar se esta movendo
if (Input.GetMouseButtonDown (0) && MouseLook.consegueMover == true) {
estaMovento = true;
GetComponent<Rigidbody>().useGravity = false;
}
if (Input.GetMouseButtonUp (0)) {
estaMovento = false;
GetComponent<Rigidbody>().useGravity = true;
numeroo = 0;
}
}
void OnMouseDown(){
screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
}
void FixedUpdate (){
if (estaMovento == true) {
Vector3 curScreenPoint = new Vector3(Screen.width / 2, Screen.height / 2, screenPoint.z+1+ numeroo);
Vector3 curPosition = Camera.main.ScreenToWorldPoint (curScreenPoint) + offset;
GetComponent<Rigidbody>().position = Vector3.SmoothDamp(transform.position, curPosition, ref velocity, tempoDeDeslocamento);
}
//ROTACIONAR OBJETOS
if (Input.GetKey(KeyCode.R)) {
MouseLook.SemMovimento = true;
Quaternion rotacaoAtual = transform.rotation;
Quaternion rotacaoFinal = Quaternion.Euler(Input.mousePosition.x/3,Input.mousePosition.y,Input.mousePosition.z);
transform.rotation = Quaternion.Lerp(rotacaoAtual, rotacaoFinal, velocidadeDeRotacao*Time.deltaTime);
} else {
MouseLook.SemMovimento = false;
}
}
}
Agora vá no script " MouseLook " do seu Player, e troque o codigo daquele script por este código:
- Código:
using UnityEngine;
using System.Collections;
[AddComponentMenu("Camera-Control/Mouse Look")]
public class MouseLook : MonoBehaviour {
public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
public RotationAxes axes = RotationAxes.MouseXAndY;
public float sensitivityX = 15F;
public float sensitivityY = 15F;
public float minimumX = -360F;
public float maximumX = 360F;
public float minimumY = -60F;
public float maximumY = 60F;
float rotationY = 0F;
//=============VARIAVEIS ADICIONAIS=====================//
public static bool consegueMover,SemMovimento;
public float DistanciaMinimaDoObjeto = 4;
public Texture2D mira;
public bool ativarMira;
void OnGUI (){
if (ativarMira == true) {
GUI.DrawTexture (new Rect (Screen.width / 2 - mira.width / 2, Screen.height / 2 - mira.height / 2, mira.width, mira.height), mira);
}
}
void Update (){
//=====================RAYCAST=====================//
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
bool colisao = Physics.Raycast (ray, out hit);
if(colisao && Vector3.Distance(transform.position,hit.transform.position)<DistanciaMinimaDoObjeto){
if(hit.transform.gameObject.tag == "OBJETO"){
consegueMover = true;
}
} else {
consegueMover = false;
}
//===================== COMANDOS DO MOUSELOOK ================//
if (SemMovimento == false) {
Screen.lockCursor = false;
if (axes == RotationAxes.MouseXAndY) {
float rotationX = transform.localEulerAngles.y + Input.GetAxis ("Mouse X") * sensitivityX;
rotationY += Input.GetAxis ("Mouse Y") * sensitivityY;
rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
transform.localEulerAngles = new Vector3 (-rotationY, rotationX, 0);
} else if (axes == RotationAxes.MouseX) {
transform.Rotate (0, Input.GetAxis ("Mouse X") * sensitivityX, 0);
} else {
rotationY += Input.GetAxis ("Mouse Y") * sensitivityY;
rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
transform.localEulerAngles = new Vector3 (-rotationY, transform.localEulerAngles.y, 0);
}
}
if (SemMovimento == true) {
Screen.lockCursor = false;
} else {
Screen.lockCursor = true;
}
}
void Start (){
SemMovimento = false;
consegueMover = false;
Cursor.visible = false;
Screen.lockCursor = true;
if (GetComponent<Rigidbody>())
GetComponent<Rigidbody>().freezeRotation = true;
}
}
Última edição por MarcosSchultz em Ter Jun 07, 2016 9:29 pm, editado 6 vez(es)
RC0D3- Iniciante
- PONTOS : 3570
REPUTAÇÃO : 5
Idade : 23
Respeito as regras :
janjao0101- Iniciante
- PONTOS : 3596
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Mover objetos com o mouse, estilo Amnesia
"Funcionamento no jogo:
chegando perto e segurando apertado, você pega o objeto"
Cara, como assim segurando apertado?? qual a tecla eu uso?
chegando perto e segurando apertado, você pega o objeto"
Cara, como assim segurando apertado?? qual a tecla eu uso?
janjao0101- Iniciante
- PONTOS : 3596
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Mover objetos com o mouse, estilo Amnesia
segurando com o mouse apertado...
é a mesma coisa que Amnesia ou penumbra
é a mesma coisa que Amnesia ou penumbra
Re: [TUTORIAL] Mover objetos com o mouse, estilo Amnesia
Na unity 5 o script MouseLook e diferente, ele nao esta contido no player... como proceder?
Re: [TUTORIAL] Mover objetos com o mouse, estilo Amnesia
O script do mouseLook é o mesmo, basta acha-lo...
O que muda é que ele não é linkado no personagem e na camera
O que muda é que ele não é linkado no personagem e na camera
Re: [TUTORIAL] Mover objetos com o mouse, estilo Amnesia
Oi Marcos , Eu fiz tudo certinho so que quando eu aperto pra pegar um objeto ele pega todos , oque eu faço?
HWgamers- Iniciante
- PONTOS : 3514
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Mover objetos com o mouse, estilo Amnesia
Esse tutorial é quase o primeiro do meu canal... só reparei agora que fiz uma burrada nele...
não posso utilizar uma variavel estática, eu tenho que pegar uma variavel do componente do objeto que estou lidando... Más fique tranquilo, quando eu tiver um tempo vou corrigir este erro e postar os scripts aqui.
não posso utilizar uma variavel estática, eu tenho que pegar uma variavel do componente do objeto que estou lidando... Más fique tranquilo, quando eu tiver um tempo vou corrigir este erro e postar os scripts aqui.
Re: [TUTORIAL] Mover objetos com o mouse, estilo Amnesia
valeu com vc é dez.
aé vc sabi como colocar objetos no Iventario no tipo "RESIDENT EVIL 3"
aé vc sabi como colocar objetos no Iventario no tipo "RESIDENT EVIL 3"
fita123- Iniciante
- PONTOS : 3400
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Mover objetos com o mouse, estilo Amnesia
fita123 escreveu:valeu com vc é dez.
aé vc sabi como colocar objetos no Iventario no tipo "RESIDENT EVIL 3"
Cara, difícil dizer, por que o inventário tem que ser montado em cima do seu jogo...
A maioria dos sistemas pode ser criado antes e implementado no jogo, mas inventário é uma coisa que deve ser feita em cima de um sistema que você já tenha.
fita123- Iniciante
- PONTOS : 3400
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» [TUTORIAL] Mover, Girar e lançar objetos com o mouse ( estilo Amnesia )
» [TUTORIAL] Mover, arremessar e girar objetos com o mouse
» [TUTORIAL] Mover, girar e lançar objetos com o MOUSE (Unity 2017, atualizado)
» [TUTORIAL] Mover Objeto para lugar do click do Mouse
» [TUTORIAL] Mover e rotacionar objeto em relação a posição do MOUSE
» [TUTORIAL] Mover, arremessar e girar objetos com o mouse
» [TUTORIAL] Mover, girar e lançar objetos com o MOUSE (Unity 2017, atualizado)
» [TUTORIAL] Mover Objeto para lugar do click do Mouse
» [TUTORIAL] Mover e rotacionar objeto em relação a posição do MOUSE
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos