[TUTORIAL] Mover, arremessar e girar objetos com o mouse
4 participantes
Página 1 de 1
[TUTORIAL] Mover, arremessar e girar objetos com o mouse
Olá galera, estou trazendo esta versão resumida do meu asset de mover objetos... este código permite mover objetos com o mouse, girar e arremessar ele também.
Asset oficial: https://assetstore.unity.com/packages/tools/physics/ms-drag-objects-82992
Esta versão resumida do código que estou a fornecer agora, faz quase todas as funcionalidades do código original, apenas com algumas funcionalidades retiradas, como a influência da massa nos objetos, inputs customizados, métodos de detecção de objetos customizados, etc, etc.
Tutorial:
Textura da mão fechada:
Textura da mão aberta:
Código utilizado:
Modificação necessária no script "MouseLook" caso você esteja utilizando o FPSController
Asset oficial: https://assetstore.unity.com/packages/tools/physics/ms-drag-objects-82992
Esta versão resumida do código que estou a fornecer agora, faz quase todas as funcionalidades do código original, apenas com algumas funcionalidades retiradas, como a influência da massa nos objetos, inputs customizados, métodos de detecção de objetos customizados, etc, etc.
Tutorial:
Textura da mão fechada:
Textura da mão aberta:
Código utilizado:
- Código:
using System.Collections;
using UnityEngine;
public class MoverObjetosVersaoFree : MonoBehaviour {
//Este código foi desenvolvido por Marcos Schultz. Ele é uma versão extremamente reduzida e compacta do código original, também desenvolvido por Marcos Schultz
//O asset completo conta com vários recursos complementares, como a influência da massa no movimento, movimnento por AddForce, position, velocity, modificação dos inputs,
//reconhecimento dos objetos por tag, nome ou PhysicsMaterial, dentre outras coisas.
//O asset oficial encontra-se neste link: https://assetstore.unity.com/packages/tools/physics/ms-drag-objects-82992
public string _tagObjects = "Respawn";
public float forcaDeArremeco = 800;
[Space(10)]
public Sprite texturaMaoFechada;
public Sprite texturaMaoAberta;
bool canMove;
bool isMoving;
float distance;
float rotXTemp;
float rotYTemp;
float tempDistance;
RaycastHit tempHit;
Rigidbody rbTemp;
Vector3 rayEndPoint;
Vector3 tempDirection;
Vector3 tempSpeed;
GameObject tempObject;
Camera mainCamera;
GameObject objClosedHand;
GameObject objOpenHand;
void Awake (){
distance = 4;
mainCamera = Camera.main;
//automatic set layer in player
GameObject refTemp = transform.root.gameObject;
refTemp.layer = 2;
foreach (Transform trans in refTemp.GetComponentsInChildren<Transform>(true)) {
trans.gameObject.layer = 2;
}
//
float tempDistance = 0.3f;
float tempfloatNear = mainCamera.nearClipPlane;
if (tempfloatNear >= tempDistance) {
tempDistance = tempfloatNear + 0.05f;
}
if (texturaMaoFechada) {
objClosedHand = new GameObject ("objHandTextureClosed");
objClosedHand.transform.parent = this.transform;
objClosedHand.AddComponent<SpriteRenderer> ().sprite = texturaMaoFechada;
objClosedHand.transform.localPosition = new Vector3 (0.0f, 0.0f, tempDistance);
objClosedHand.transform.localScale = new Vector3 (0.05f, 0.05f, 0.05f);
objClosedHand.transform.localRotation = Quaternion.identity;
objClosedHand.SetActive (false);
}
if (texturaMaoAberta) {
objOpenHand = new GameObject ("objHandTextureOpen");
objOpenHand.transform.parent = this.transform;
objOpenHand.AddComponent<SpriteRenderer> ().sprite = texturaMaoAberta;
objOpenHand.transform.localPosition = new Vector3 (0.0f, 0.0f, tempDistance);
objOpenHand.transform.localScale = new Vector3 (0.05f, 0.05f, 0.05f);
objOpenHand.transform.localRotation = Quaternion.identity;
objOpenHand.SetActive (false);
}
}
void Update (){
//raycast camera forward
rayEndPoint = transform.position + transform.forward*distance;
if (Physics.Raycast (transform.position, transform.forward, out tempHit, 7)) {
if (Vector3.Distance (transform.position, tempHit.point) <= 6 && tempHit.transform.CompareTag (_tagObjects)) {
canMove = true;
} else {
canMove = false;
}
//
if (Input.GetKeyDown(KeyCode.Mouse0) && canMove) {
if (tempHit.rigidbody) {
tempHit.rigidbody.useGravity = true;
distance = Vector3.Distance (transform.position, tempHit.point);
tempObject = tempHit.transform.gameObject;
isMoving = true;
}
}
} else {
canMove = false;
}
distance += Input.GetAxis ("Mouse ScrollWheel")*10.0f;
distance = Mathf.Clamp (distance, 2.5f, 6);
if (tempObject) {
rbTemp = tempObject.GetComponent<Rigidbody> ();
}
if (Input.GetKeyUp(KeyCode.Mouse0) && tempObject) {
rbTemp.useGravity = true;
tempObject = null;
rbTemp = null;
isMoving = false;
}
if (Input.GetKeyDown(KeyCode.Mouse1) && tempObject) {
tempDirection = rayEndPoint - transform.position;
tempDirection.Normalize ();
rbTemp.useGravity = true;
rbTemp.AddForce (tempDirection * forcaDeArremeco);
tempObject = null;
rbTemp = null;
isMoving = false;
}
if (tempObject) {
if (Vector3.Distance (transform.position, tempObject.transform.position) > 6) {
rbTemp.useGravity = true;
tempObject = null;
rbTemp = null;
isMoving = false;
}
}
if (tempObject && mainCamera) {
if (Input.GetKey (KeyCode.R)) {
rotXTemp = Input.GetAxis ("Mouse X") * 5.0f;
rotYTemp = Input.GetAxis ("Mouse Y") * 5.0f;
tempObject.transform.Rotate (mainCamera.transform.up, -rotXTemp, Space.World);
tempObject.transform.Rotate (mainCamera.transform.right, rotYTemp, Space.World);
}
}
//sprite elements
if (canMove && !isMoving && texturaMaoAberta) {
objClosedHand.SetActive (false);
objOpenHand.SetActive (true);
}
else if (isMoving && texturaMaoFechada) {
objClosedHand.SetActive (true);
objOpenHand.SetActive (false);
}
else {
objClosedHand.SetActive (false);
objOpenHand.SetActive (false);
}
}
void FixedUpdate (){
if (tempObject) {
rbTemp = tempObject.GetComponent<Rigidbody> ();
rbTemp.angularVelocity = new Vector3 (0, 0, 0);
tempSpeed = (rayEndPoint - rbTemp.transform.position);
tempSpeed.Normalize ();
tempDistance = Vector3.Distance (rayEndPoint, rbTemp.transform.position);
tempDistance = Mathf.Clamp (tempDistance, 0, 1);
rbTemp.velocity = Vector3.Lerp(rbTemp.velocity, tempSpeed*7.5f*tempDistance,Time.deltaTime*12);
}
}
}
Modificação necessária no script "MouseLook" caso você esteja utilizando o FPSController
Re: [TUTORIAL] Mover, arremessar e girar objetos com o mouse
A minha mão não apareceu, como faço
Ricardo0022- Iniciante
- PONTOS : 2144
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Mover, arremessar e girar objetos com o mouse
Ricardo0022 escreveu:A minha mão não apareceu, como faço
Tenta diminuir o 'near' da câmera
Re: [TUTORIAL] Mover, arremessar e girar objetos com o mouse
o meu ta aparecendo a imagem da mão mais nao esta pegando o iten o que eu faço?
henriquegames501- Iniciante
- PONTOS : 1996
REPUTAÇÃO : 3
Respeito as regras :
Re: [TUTORIAL] Mover, arremessar e girar objetos com o mouse
henriquegames501 escreveu:o meu ta aparecendo a imagem da mão mais nao esta pegando o iten o que eu faço?
colocou tag nos itens? ajustou o rigidbody?
Re: [TUTORIAL] Mover, arremessar e girar objetos com o mouse
sim mais mesmo assim nao aparece
henriquegames501- Iniciante
- PONTOS : 1996
REPUTAÇÃO : 3
Respeito as regras :
Re: [TUTORIAL] Mover, arremessar e girar objetos com o mouse
Tente colocar o seu player na layer (IgnoreRaycast)henriquegames501 escreveu:sim mais mesmo assim nao aparece
Re: [TUTORIAL] Mover, arremessar e girar objetos com o mouse
ok vou tentarMarcosSchultz escreveu:Tente colocar o seu player na layer (IgnoreRaycast)henriquegames501 escreveu:sim mais mesmo assim nao aparece
henriquegames501- Iniciante
- PONTOS : 1996
REPUTAÇÃO : 3
Respeito as regras :
Re: [TUTORIAL] Mover, arremessar e girar objetos com o mouse
Pode me ajudar?
uso esse controler de player:
https://assetstore.unity.com/packages/tools/input-management/first-person-all-in-one-135316
consigo mover os objetos e arremessar, mas não rotacionar apertando R
uso esse controler de player:
https://assetstore.unity.com/packages/tools/input-management/first-person-all-in-one-135316
consigo mover os objetos e arremessar, mas não rotacionar apertando R
Charlesoff- MembroAvançado
- PONTOS : 1533
REPUTAÇÃO : 40
Áreas de atuação : Game dev
Respeito as regras :
Tópicos semelhantes
» [TUTORIAL] Mover, Girar e lançar objetos com o mouse ( estilo Amnesia )
» [TUTORIAL] Mover, girar e lançar objetos com o MOUSE (Unity 2017, atualizado)
» [TUTORIAL] Girar objetos / mover de acordo com a rotação do Celular,tablet,etc
» [TUTORIAL] Mover objetos com o mouse, estilo Amnesia
» [TUTORIAL] Mover Objeto para lugar do click do Mouse
» [TUTORIAL] Mover, girar e lançar objetos com o MOUSE (Unity 2017, atualizado)
» [TUTORIAL] Girar objetos / mover de acordo com a rotação do Celular,tablet,etc
» [TUTORIAL] Mover objetos com o mouse, estilo Amnesia
» [TUTORIAL] Mover Objeto para lugar do click do Mouse
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos