[TUTORIAL] Sistema de Grappling Hook / Corda e Gancho
5 participantes
Página 1 de 1
[TUTORIAL] Sistema de Grappling Hook / Corda e Gancho
E aí pessoal, blz?
Há algum tempo fiz um vídeo tutorial sobre um sistema que, em minha opinião, é muito legal de se implementar em seu jogo. Venho hoje compartilhar com vocês o sistema que consegui fazer de Grappling Hook, ou corda e gancho, ou arma do batman, ou teia do homem-aranha... parei de viajar
Nesse vídeo eu foquei mais na parte da mecânica do sistema, não me importei com design, gráficos, animação, etc., somente com os scripts.
Enfim galera espero que gostem do vídeo, abraços e até a próxima :D
Há algum tempo fiz um vídeo tutorial sobre um sistema que, em minha opinião, é muito legal de se implementar em seu jogo. Venho hoje compartilhar com vocês o sistema que consegui fazer de Grappling Hook, ou corda e gancho, ou arma do batman, ou teia do homem-aranha... parei de viajar

Nesse vídeo eu foquei mais na parte da mecânica do sistema, não me importei com design, gráficos, animação, etc., somente com os scripts.
Enfim galera espero que gostem do vídeo, abraços e até a próxima :D
Script 1: Disparador
- Código:
using UnityEngine;
using System.Collections;
public class Disparador : MonoBehaviour {
public GameObject gancho;
private GameObject auxGancho;
public Camera m_camera;
public Transform dirDoClique;
private Transform auxDirDoClique;
private Vector3 localDoClique;
private Vector3 posMouse;
private Quaternion olharParaDir;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
posMouse = Input.mousePosition;
posMouse.z = Vector3.Distance(m_camera.transform.position, transform.position);
posMouse = m_camera.ScreenToWorldPoint(posMouse);
if(auxGancho == null){
if(Input.GetMouseButtonDown(0)){
auxDirDoClique = Instantiate(dirDoClique, posMouse, Quaternion.identity) as Transform;
localDoClique = (auxDirDoClique.transform.position - transform.position).normalized;
olharParaDir = Quaternion.LookRotation(localDoClique);
auxGancho = Instantiate(gancho, transform.position, olharParaDir) as GameObject;
Destroy(auxDirDoClique.gameObject);
}
}
}
}
Script 2: Gancho
- Código:
using UnityEngine;
using System.Collections;
public class Gancho : MonoBehaviour {
public float velLançar;
public float tamanhoCorda;
public float forçaCorda;
public float peso;
private GameObject player;
private Rigidbody corpoRigido;
private SpringJoint efeitoCorda;
private float distanciaDoPlayer;
private bool atirarCorda;
public static bool cordaColidiu;
// Use this for initialization
void Start () {
player = GameObject.FindGameObjectWithTag("Player");
corpoRigido = GetComponent<Rigidbody>();
efeitoCorda = player.GetComponent<SpringJoint>();
atirarCorda = true;
cordaColidiu = false;
}
// Update is called once per frame
void Update () {
distanciaDoPlayer = Vector3.Distance(transform.position, player.transform.position);
if(Input.GetMouseButtonDown(0)){
atirarCorda = false;
}
if(atirarCorda)
AtirarGancho();
else
RecolherGancho();
//LineRender
GetComponent<LineRenderer>().SetPosition(0, player.transform.position);
GetComponent<LineRenderer>().SetPosition(1, transform.position);
}
void OnTriggerEnter(Collider coll){
if(coll.tag != "Player"){
cordaColidiu = true;
}
}
public void AtirarGancho(){
if(distanciaDoPlayer <= tamanhoCorda){
if(!cordaColidiu){
transform.Translate(0, 0, velLançar*Time.deltaTime);
}
else{
efeitoCorda.connectedBody = corpoRigido;
efeitoCorda.spring = forçaCorda;
efeitoCorda.damper = peso;
}
}
if(distanciaDoPlayer > tamanhoCorda){
atirarCorda = false;
}
}
public void RecolherGancho(){
transform.position = Vector3.MoveTowards(transform.position, player.transform.position, 25*Time.deltaTime);
cordaColidiu = false;
if(distanciaDoPlayer <= 2){
Destroy(gameObject);
}
}
}
Script 3: Movimento
- Código:
using UnityEngine;
using System.Collections;
public class Movimento : MonoBehaviour {
public float velMover;
public float velMoverAr;
public float forçaBalançar;
private bool noChao;
private bool pendurado;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
RaycastHit raio;
noChao = Physics.Raycast(transform.position, -transform.up, out raio, 1.5f);
pendurado = Gancho.cordaColidiu;
float h = Input.GetAxis("Horizontal");
if(noChao){
if(h != 0){
transform.Translate(h*velMover*Time.deltaTime, 0, 0);
}
}
else if(!noChao && pendurado){
GetComponent<Rigidbody>().AddForce(transform.right*h*forçaBalançar);
}
else if(!noChao && !pendurado){
if(h != 0){
transform.Translate(h*velMoverAr*Time.deltaTime, 0, 0);
}
}
}
}
George Lucas Vieira- Avançado
-
PONTOS : 2966
REPUTAÇÃO : 132
Idade : 20
Áreas de atuação : Programação, Modelagem e Animação.
Respeito as regras :
Weslley- Moderador
-
PONTOS : 5287
REPUTAÇÃO : 739
Idade : 25
Áreas de atuação : https://weslleyxavier.com
Respeito as regras :
Re: [TUTORIAL] Sistema de Grappling Hook / Corda e Gancho
Obgd :DweslleyFx escreveu:legal
George Lucas Vieira- Avançado
-
PONTOS : 2966
REPUTAÇÃO : 132
Idade : 20
Áreas de atuação : Programação, Modelagem e Animação.
Respeito as regras :
Re: [TUTORIAL] Sistema de Grappling Hook / Corda e Gancho
MUITO obrigado estava precisando disso :D
Matheus sonico- Avançado
-
PONTOS : 3410
REPUTAÇÃO : 29
Idade : 21
Respeito as regras :
Re: [TUTORIAL] Sistema de Grappling Hook / Corda e Gancho
Fico muito legal.
rafaelllsd- ProgramadorMaster
-
PONTOS : 4816
REPUTAÇÃO : 507
Idade : 23
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: [TUTORIAL] Sistema de Grappling Hook / Corda e Gancho
George Lucas Vieira escreveu:E aí pessoal, blz?
Há algum tempo fiz um vídeo tutorial sobre um sistema que, em minha opinião, é muito legal de se implementar em seu jogo. Venho hoje compartilhar com vocês o sistema que consegui fazer de Grappling Hook, ou corda e gancho, ou arma do batman, ou teia do homem-aranha... parei de viajar
Nesse vídeo eu foquei mais na parte da mecânica do sistema, não me importei com design, gráficos, animação, etc., somente com os scripts.
Enfim galera espero que gostem do vídeo, abraços e até a próxima :DScript 1: Disparador
- Código:
using UnityEngine;
using System.Collections;
public class Disparador : MonoBehaviour {
public GameObject gancho;
private GameObject auxGancho;
public Camera m_camera;
public Transform dirDoClique;
private Transform auxDirDoClique;
private Vector3 localDoClique;
private Vector3 posMouse;
private Quaternion olharParaDir;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
posMouse = Input.mousePosition;
posMouse.z = Vector3.Distance(m_camera.transform.position, transform.position);
posMouse = m_camera.ScreenToWorldPoint(posMouse);
if(auxGancho == null){
if(Input.GetMouseButtonDown(0)){
auxDirDoClique = Instantiate(dirDoClique, posMouse, Quaternion.identity) as Transform;
localDoClique = (auxDirDoClique.transform.position - transform.position).normalized;
olharParaDir = Quaternion.LookRotation(localDoClique);
auxGancho = Instantiate(gancho, transform.position, olharParaDir) as GameObject;
Destroy(auxDirDoClique.gameObject);
}
}
}
}Script 2: Gancho
- Código:
using UnityEngine;
using System.Collections;
public class Gancho : MonoBehaviour {
public float velLançar;
public float tamanhoCorda;
public float forçaCorda;
public float peso;
private GameObject player;
private Rigidbody corpoRigido;
private SpringJoint efeitoCorda;
private float distanciaDoPlayer;
private bool atirarCorda;
public static bool cordaColidiu;
// Use this for initialization
void Start () {
player = GameObject.FindGameObjectWithTag("Player");
corpoRigido = GetComponent<Rigidbody>();
efeitoCorda = player.GetComponent<SpringJoint>();
atirarCorda = true;
cordaColidiu = false;
}
// Update is called once per frame
void Update () {
distanciaDoPlayer = Vector3.Distance(transform.position, player.transform.position);
if(Input.GetMouseButtonDown(0)){
atirarCorda = false;
}
if(atirarCorda)
AtirarGancho();
else
RecolherGancho();
//LineRender
GetComponent<LineRenderer>().SetPosition(0, player.transform.position);
GetComponent<LineRenderer>().SetPosition(1, transform.position);
}
void OnTriggerEnter(Collider coll){
if(coll.tag != "Player"){
cordaColidiu = true;
}
}
public void AtirarGancho(){
if(distanciaDoPlayer <= tamanhoCorda){
if(!cordaColidiu){
transform.Translate(0, 0, velLançar*Time.deltaTime);
}
else{
efeitoCorda.connectedBody = corpoRigido;
efeitoCorda.spring = forçaCorda;
efeitoCorda.damper = peso;
}
}
if(distanciaDoPlayer > tamanhoCorda){
atirarCorda = false;
}
}
public void RecolherGancho(){
transform.position = Vector3.MoveTowards(transform.position, player.transform.position, 25*Time.deltaTime);
cordaColidiu = false;
if(distanciaDoPlayer <= 2){
Destroy(gameObject);
}
}
}Script 3: Movimento
- Código:
using UnityEngine;
using System.Collections;
public class Movimento : MonoBehaviour {
public float velMover;
public float velMoverAr;
public float forçaBalançar;
private bool noChao;
private bool pendurado;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
RaycastHit raio;
noChao = Physics.Raycast(transform.position, -transform.up, out raio, 1.5f);
pendurado = Gancho.cordaColidiu;
float h = Input.GetAxis("Horizontal");
if(noChao){
if(h != 0){
transform.Translate(h*velMover*Time.deltaTime, 0, 0);
}
}
else if(!noChao && pendurado){
GetComponent<Rigidbody>().AddForce(transform.right*h*forçaBalançar);
}
else if(!noChao && !pendurado){
if(h != 0){
transform.Translate(h*velMoverAr*Time.deltaTime, 0, 0);
}
}
}
}
nao ta funcionando![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
cafezinho71- Avançado
- PONTOS : 1202
REPUTAÇÃO : 5
Áreas de atuação : unity c# e musica
Respeito as regras :

» [TUTORIAL] Sistema de Arma 3D
» [TUTORIAL] Sistema de Entregas + GPS!
» [TUTORIAL] Sistema de FPS com Corpo
» [TUTORIAL] Sistema de Velocimetro
» [TUTORIAL] Sistema de pulo 3D
» [TUTORIAL] Sistema de Entregas + GPS!
» [TUTORIAL] Sistema de FPS com Corpo
» [TUTORIAL] Sistema de Velocimetro
» [TUTORIAL] Sistema de pulo 3D
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos