me ajuda por favor
2 participantes
Página 1 de 1
me ajuda por favor
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Dialogue : MonoBehaviour
{
public Sprite profile;
public string[] speechTxt;
public string actorName;
public LayerMask playerLayer;
public float radius;
private dialogueControl dc;
bool onRadious;
private void Start()
{
dc = FindObjectOfType<dialogueControl>();
}
private void FixedUpdate()
{
Interect();
}
private void Update()
{
if(Input.GetKeyDown(KeyCode.E) && onRadious )
{
dc.Speech(profile, speechTxt, actorName);
}
}
public void Interect()
{
Collider2D hit = Physics2D.OverlapCircle(transform.position, radius, playerLayer);
if(hit != null)
{
onRadious = true;
}
else
{
onRadious = false;
}
}
private void OnDrawGizmosSelected()
{
Gizmos.DrawWireSphere(transform.position, radius);
}
}
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class dialogueControl : MonoBehaviour
{
[Header("Components")]
public GameObject dialogueObj;
public Image profile;
public Text speechText;
public Text actorNameText;
[Header("Settings")]
public float typingSpeed;
private string[] sentences;
private int index;
public void Speech(Sprite p, string[] txt, string actorName)
{
dialogueObj.SetActive(true);
profile.sprite = p;
sentences = txt;
actorNameText.text = actorName;
StartCoroutine(TypeSentence());
}
IEnumerator TypeSentence()
{
foreach (char letter in sentences[index].ToCharArray())
{
speechText.text += letter;
yield return new WaitForSeconds(typingSpeed);
}
}
public void NextSentence()
{
if(speechText.text == sentences[index])
{
if(index < sentences.Length - 1)
{
index++;
speechText.text = "";
StartCoroutine(TypeSentence());
}
else
{
speechText.text = "";
index = 0;
dialogueObj.SetActive(false);
}
}
}
}
Olá estou com um problema e gostaria de saber se alguém pode me ajudar.
basicamente queria fazer com que o if(Input.GetKeyDown(KeyCode.E) && onRadious )
{
dc.Speech(profile, speechTxt, actorName);
}
de dialogue, só fosse ativado quando o dialogueObj de dialogueControl estivesse setado como false.
me ajuda faz muito tempo que estou nisso.
cleitinhoRasta- Iniciante
- PONTOS : 1230
REPUTAÇÃO : 0
Respeito as regras :
Re: me ajuda por favor
Olá estou com um problema e gostaria de saber se alguém pode me ajudar.
basicamente queria fazer com que o if(Input.GetKeyDown(KeyCode.E) && onRadious )
{
dc.Speech(profile, speechTxt, actorName);
}
de dialogue, só fosse ativado quando o dialogueObj de dialogueControl estivesse setado como false.
me ajuda faz muito tempo que estou nisso.
Descreva sua dúvida no título, alguém com a mesma duvida não encontraria com "me ajuda por favor"...
Resumidamente você tem que criar uma variavel publica e verificar o valor dela,
ou usar isso depois de receber o input: if(dc.GetComponent<GameObject>().activeSelf == false)
recomendo fazer assim, pq ocupa menos espaço na memoria, mas pra ficar mais didatico olhe o exemplo abaixo:
- Código:
[HideInInpesctor]public bool estado = 0; // HidInInspector é pra não aparecer no inspetor do unity...
public void Speech(Sprite p, string[] txt, string actorName)
{
dialogueObj.SetActive(true);
estado = true; // toda vez que dialoguObj for ativado, a bool irá ficar verdadeira
}
public void NextSentence()
{
if(speechText.text == sentences[index])
{
if(index < sentences.Length - 1)
{
}
else
{
dialogueObj.SetActive(false);
estado = false; estado = true; // toda vez que dialoguObj for ativado, a bool irá ficar falsa
}
}
}
- Código:
if(Input.GetKeyDown(KeyCode.E) && onRadious )
{
if(dc.estado == false)
dc.Speech(profile, speechTxt, actorName);
}
Note que se o dialogueObj desativar ele mesmo não irá funcionar(se não me engano quando vc desativa o objeto os scripts param de funcionar). ai você teria que colocar os objetos em uma estrutura de dados, por array é o mais fácil, e verificar se estão ativos ou não com activeSelf http://docs.unity3d.com/ScriptReference/GameObject-activeSelf.html
Re: me ajuda por favor
obrigado funcionou corretamente e quanto ao pedido me desculpe sou novo por aqui, nos scripts eu tive que fazer umas alterações para que fumcionasse como:
- Código:
public bool estado = 0; [size=14][/size][size=14][/size]public void Speech(Sprite p, string[] txt, string actorName)[size=14][/size] {[size=14][/size] dialogueObj.SetActive(true);[size=14][/size] estado = true; // toda vez que dialoguObj for ativado, a bool irá ficar verdadeira[size=14][/size] }[size=14][/size]public void NextSentence()[size=14][/size] {[size=14][/size] if(speechText.text == sentences[index])[size=14][/size] {[size=14][/size] if(index < sentences.Length - 1)[size=14][/size] {[size=14][/size] }[size=14][/size] else[size=14][/size] {[size=14][/size] dialogueObj.SetActive(false);[size=14][/size] estado = false; [size=14][/size] }[size=14][/size] }
cleitinhoRasta- Iniciante
- PONTOS : 1230
REPUTAÇÃO : 0
Respeito as regras :
Re: me ajuda por favor
cleitinhoRasta escreveu:obrigado funcionou corretamente e quanto ao pedido me desculpe sou novo por aqui, nos scripts eu tive que fazer umas alterações para que fumcionasse como:
- Código:
public bool estado = 0;[size=14][/size][size=14][/size]public void Speech(Sprite p, string[] txt, string actorName)[size=14][/size] {[size=14][/size] dialogueObj.SetActive(true);[size=14][/size] estado = true;[size=14][/size] }[size=14][/size]public void NextSentence()[size=14][/size] {[size=14][/size] if(speechText.text == sentences[index])[size=14][/size] {[size=14][/size] if(index < sentences.Length - 1)[size=14][/size] {[size=14][/size] }[size=14][/size] else[size=14][/size] {[size=14][/size] dialogueObj.SetActive(false);[size=14][/size] estado = false;
cleitinhoRasta- Iniciante
- PONTOS : 1230
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» ME AJUDA POR FAVOR
» Me ajuda aqui pro favor
» gente me Ajuda por favor
» Ajuda Por Favor Galera
» AJUDA POR FAVOR (ERRO DE CACHE)
» Me ajuda aqui pro favor
» gente me Ajuda por favor
» Ajuda Por Favor Galera
» AJUDA POR FAVOR (ERRO DE CACHE)
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos