[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 : 3391
REPUTAÇÃO : 132
Idade : 21
Áreas de atuação : Programação, Modelagem e Animação.
Respeito as regras :
Weslley- Moderador
- PONTOS : 5726
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: [TUTORIAL] Sistema de Grappling Hook / Corda e Gancho
Obgd :DweslleyFx escreveu:legal
George Lucas Vieira- Avançado
- PONTOS : 3391
REPUTAÇÃO : 132
Idade : 21
Á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 : 3835
REPUTAÇÃO : 29
Idade : 22
Respeito as regras :
Re: [TUTORIAL] Sistema de Grappling Hook / Corda e Gancho
Fico muito legal.
rafaelllsd- ProgramadorMaster
- PONTOS : 5241
REPUTAÇÃO : 507
Idade : 24
Á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 : 1627
REPUTAÇÃO : 5
Áreas de atuação : unity c# e musica
Respeito as regras :
Tópicos semelhantes
» Ajuda com Grappling hook
» [TUTORIAL] Sistema de Arma 3D
» [TUTORIAL] Sistema de Interruptor
» [TUTORIAL] Sistema de FPS com Corpo
» [TUTORIAL] Sistema de Velocimetro
» [TUTORIAL] Sistema de Arma 3D
» [TUTORIAL] Sistema de Interruptor
» [TUTORIAL] Sistema de FPS com Corpo
» [TUTORIAL] Sistema de Velocimetro
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos