Sistema de morte na Unity usando o Photon
Página 1 de 1
Sistema de morte na Unity usando o Photon
- Código:
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Photon.Pun;
namespace pl
{
[System.Serializable]
public struct playerStr
{
[SerializeField] private GameObject playerObj;
[SerializeField] public List<Transform> pl;
[SerializeField] public List<destroyPlayers> destroyPlayer;
[SerializeField] private List<BoxCollider2D> BoxCollder2;
[SerializeField] private List<string> bombomsPack;
[SerializeField] public Canvas gameOver;
[SerializeField] public float alphaDestroy;
[SerializeField] private float scaleFactor, timeFactor, alpha, timeCor, timeRot, timeMouse, speed, timeSnak, distance, rotationDamping, angle, myAngel;
[SerializeField] private Transform cam, map;
public Transform playerTransform;
[SerializeField] private int pontosPlayer, crescecobra, curvaStatus, multplicador;
[SerializeField] private bool velocidade, curva, zoom, magnetismo, mult, controlMag;
public bool isDead;
[SerializeField] private Vector3 scale;
[SerializeField] private BoxCollider2D bx2d;
[SerializeField] public SpriteRenderer sensor, sprMap;
[SerializeField] private Animator ani;
[SerializeField] private string name;
public wormstructs.skins sk;
public wormstructs.cameraRecursos camRecursos;
public wormstructs.iconesPainel painel;
public void gameAwake(PhotonView pv)
{
name = Random.RandomRange(0, 1000).ToString() + Random.RandomRange(0, 1000).ToString();
gameOver = GameObject.FindGameObjectWithTag("canvasContratulations").GetComponent<Canvas>();
alphaDestroy = 1f;
playerObj.name = name;
multplicador = 1;
map.parent = null;
scale = playerTransform.localScale;
scaleFactor = 1f;
timeFactor = 1f;
timeCor = 1.2f;
camRecursos.zoonSize = 7f;
camRecursos.zoonPadrao = 7f;
for (int i = 0; i < pl.Count; i++) pl[i].name = name;
for (int i = 1; i < pl.Count; i++) pl[i].parent = null;
camRecursos.cam =GameObject.FindWithTag("MainCamera").GetComponent<Camera>();
map.GetComponent<BoxCollider2D>().enabled = true;
}
public void gameStart(PhotonView pv)
{
if (pv.IsMine)
{
sk.setStart();
painel.setStart();
GameObject.FindGameObjectWithTag("playerNome").GetComponent<Text>().text = manager.nickName + " PTS: " + pontosPlayer.ToString();
cam = GameObject.FindGameObjectWithTag("MainCamera").GetComponent<Transform>();
}
}
public void updateCobraViva(PhotonView pv)
{
map.position = playerTransform.position;
if (pv.IsMine)
{
Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
mousePos = new Vector3(mousePos.x, mousePos.y, 0f);
Vector2 direction = new Vector2(mousePos.x - playerTransform.position.x, mousePos.y - playerTransform.position.y);
float dist = Vector3.Distance(playerTransform.position, mousePos);
if (dist > 0.1f) playerTransform.up = Vector3.Lerp(playerTransform.up, direction, timeRot * Time.deltaTime);
playerTransform.Translate(Vector3.up * speed * Time.deltaTime);
playerTransform.localScale = scale * scaleFactor;
for (int i = 0; i < pl.Count; i++)
{
if (i != 0)
{
pl[i].position = Vector3.Lerp(pl[i].position, pl[i - 1].position, timeSnak * Time.deltaTime);
Vector2 direction1 = new Vector2(pl[i - 1].position.x - pl[i].position.x, pl[i - 1].position.y - pl[i].position.y);
pl[i].up = direction1;
pl[i].localScale = scale * scaleFactor;
pl[i].position -= pl[i].rotation * -pl[i].forward * distance;
}
}
}
}
private void lateCobraViva(PhotonView pv)
{
if (magnetismo) { magnetismo = painel.setMagnetismo(); }
else
{
if (controlMag)
{
bx2d.enabled = magnetismo;
ani.enabled = magnetismo;
sensor.enabled = magnetismo;
controlMag = false;
}
}
if (pv.IsMine)
{
cam.position = new Vector3(playerTransform.position.x, playerTransform.position.y, -10f);
//if (Input.GetKey(KeyCode.A) & sk.cobra.Count < 200) instantiateCalda();
if (velocidade)
{
velocidade = painel.setVelocidade();
speed = 6f;
}
else speed = 4f;
if (zoom) zoom = painel.setZoom();
if (curva)
{
if (curvaStatus == 1) timeRot = 8f;
else if (curvaStatus == 2) timeRot = 12f;
curva = painel.setCurva();
}
else
{
timeRot = 1f;
curvaStatus = 0;
}
camRecursos.zoonCam(zoom);
if (mult) mult = painel.setMultiplicador();
else multplicador = 1;
}
}
public void animacao(PhotonView pv)
{
if (pv.IsMine) {
alphaDestroy = Mathf.Lerp(alphaDestroy, -1f, 1f * Time.deltaTime);
Color c = new Color(255, 255, 255, alphaDestroy);
for (int i = 0; i < pl.Count; i++) sk.cobra[i].color = c;
alphaDestroy = Mathf.Clamp(alphaDestroy, 0f, 1f);
}
}
public void latUpdateCobraMorta(PhotonView pv)
{
animacao(pv);
}
public void gameUpdate(PhotonView pv)
{
if (!isDead) updateCobraViva(pv);
}
public void gameLateUpdate(PhotonView pv)
{
if (!isDead) lateCobraViva(pv);
else latUpdateCobraMorta(pv);
}
public void gameTriggerEnter(Collider2D collision, PhotonView pv)
{
string tag = collision.tag;
if (collision.tag == "calda" & collision.name != name)
{
int count = 1;
int idPack = 0;
for (int i = 0; i < BoxCollder2.Count - 1; i++) BoxCollder2[i].enabled = false;
for (int i = 0; i < pl.Count - 1; i++)
{
count += 1;
if (count == 4)
{
count = 1;
PhotonNetwork.Instantiate(bombomsPack[idPack], pl[i].position, pl[i].rotation, 0);
idPack += 1;
if (idPack == 3) idPack = 0;
}
}
isDead = true;
}
if (pv.IsMine)
{
gameTriggerRenovaItem(tag,pv);
if (collision.tag == "magnetismo")
{
colMagnetismo();
controlMag = true;
magnetismo = true;
bx2d.enabled = magnetismo;
ani.enabled = magnetismo;
sensor.enabled = magnetismo;
}
if (tag == "DOCE") colDoce();
if (tag == "zoon") zoom = true;
if (tag == "velocidade") colVelocidade();
if (tag == "curva")
{
colCurva();
if (curvaStatus < 2) curvaStatus += 1;
}
if (tag == "mult2x")
{
mult = true;
multplicador = 2;
mult2x();
painel.multiplicador.sprite = collision.gameObject.GetComponent<SpriteRenderer>().sprite;
}
if (tag == "mult5x")
{
mult = true;
multplicador = 5;
mult2x();
painel.multiplicador.sprite = collision.gameObject.GetComponent<SpriteRenderer>().sprite;
}
if (tag == "mult10x")
{
mult = true;
multplicador = 10;
mult2x();
painel.multiplicador.sprite = collision.gameObject.GetComponent<SpriteRenderer>().sprite;
}
}
}
public void gameTriggerRenovaItem(string tag, PhotonView pv)
{
if (pv.IsMine)
{
if (tag == "zoon" & zoom) painel.dataZoom.timeSet();
else if (tag == "velocidade" & velocidade) painel.dataVelocidade.timeSet();
else if (tag == "magnetismo" & magnetismo) painel.dataMagnetismo.timeSet();
else if (tag == "curva" & curva) painel.dataCurva.timeSet();
else if (tag == "mult2x" & mult) painel.dataMultiplicador.timeSet();
else if (tag == "mult5x" & mult) painel.dataMultiplicador.timeSet();
else if (tag == "mult10x" & mult) painel.dataMultiplicador.timeSet();
}
}
private void colDoce()
{
if (!isDead) camRecursos.cam.orthographicSize += 0.02f;
if (timeSnak > 5f) timeSnak -= 0.05f;
if (scaleFactor<2f) scaleFactor += 0.010f;
crescecobra += multplicador;
pontosPlayer += multplicador;
GameObject.FindGameObjectWithTag("playerNome").GetComponent<Text>().text = manager.nickName + " PTS: " + pontosPlayer.ToString();
GameObject.FindGameObjectWithTag("pontosFinal").GetComponent<Text>().text =pontosPlayer.ToString();
if (crescecobra > 2) instantiateCalda();
}
private void colVelocidade() { painel.actColVelocity(); velocidade = true; }
private void colMagnetismo() { painel.actColMagnetismo(); magnetismo = true; }
private void colCurva() { painel.actColCurva(); curva = true; }
private void mult2x() { painel.actColMultiplicador(); }
public void instantiateCalda()
{
if (pl.Count < 100)
{
crescecobra = 1;
GameObject ob = PhotonNetwork.Instantiate(sk.getCaldaNome(), pl[pl.Count - 1].position, pl[pl.Count - 1].rotation, 0);
ob.name = name;
pl.Add(ob.transform);
destroyPlayer.Add(ob.GetComponent<destroyPlayers>());
BoxCollder2.Add(ob.GetComponent<BoxCollider2D>());
ob.transform.localScale = scale * scaleFactor;
sk.cobra.Add(ob.GetComponent<SpriteRenderer>());
ob = null;
}
}
}
}
Estou criando praticamente uma cópia do https://wormworld.io/#/, porém não tenho muita experiência, nem como programador, nem com Photon (kkkk) então gostaria de um auxílio para resolver o sistema de morte do player. O que deveria acontecer é que, sempre que o player colidisse com a calda (são cobras) de outro player, ele morresse e, ao morrer, ele desapareceria e, no seu lugar, ficariam os doces que ele comeu no decorrer do jogo até ali. Acontece que isso, quando acontece corretamente, é apenas uma vez no jogo, mas, dificilmente ocorre. Alguém saberia dizer qual o erro do script? Caso vejam algum outro erro em outra parte, aceito ajuda também. Obrigado
Atho- Membro
- PONTOS : 1912
REPUTAÇÃO : 11
Idade : 31
Áreas de atuação : Programador de Jogos Digitais em C# na Unity
Respeito as regras :
Tópicos semelhantes
» [TUTORIAL] Usando Delegates em Unity - Sistema de caixa de diálogo!
» Unity 2018.2 -Ajuda com sistema de SpawnPoint e respawn com Photon Bolt
» sistema de Entrar/Sair de veículos em Network (Photon Unity Networking)
» Sistema de desaceleração usando MovePosition
» Aparecer as salas que eu crio usando o Photon
» Unity 2018.2 -Ajuda com sistema de SpawnPoint e respawn com Photon Bolt
» sistema de Entrar/Sair de veículos em Network (Photon Unity Networking)
» Sistema de desaceleração usando MovePosition
» Aparecer as salas que eu crio usando o Photon
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos