Problema com Sistema de Sanidade
2 participantes
Página 1 de 1
Problema com Sistema de Sanidade
Muito boa noite galera, bom, eu estou aqui hoje com o principal objetivo de tirar essa fuckyn duvida/problema de dentro desse meu Script..
Eu encontrei um tutorial que ensinava a fazer um sistema de sanidade para o jogador, que no caso quando ele desse de frente com alguma coisa, a visão fica turva.. Esse tutorial é literalmente todo em "JavaScript" e eu como NUNCA tinha "convertido" um sistema em javascript para c++ resolvi apostar na ideia, eu sou um tanto quanto "novato" na área de C#, porém depois de tantos e tantos tutoriais, acabei me familiarizando com a linguagem, (Pelomenos na parte mais básica).. Bom, vamos ao que interessa, lembrando novamente que todo script foi "convertido" por mim, pois a linguagem era toda em (var, function etc..)..
Como disse o objetivo desse sistema é fazer meio que um sistema de "Medo" para o personagem, assim que ele chegasse perto de algo, a porcentagem de sanidade aumenta, fazendo com que a visão fique turva.. Eu fiz literalmente de TUDO para tentar passar por cima e concertar este erro, porém nada funcionava.. Deram alguns, porém dos mais simples e solucionaveis (pelomenos para mim)..
Decidi postar aqui pois são mais experientes e acredito que possam me ajudar a encontrar essa soluçao kkkk..
Sobre o Sistema
O Sistema consiste em 2 Scripts diferentes, um baseado na distancia, e o outro ao coletar..
Este é o script principal do sistema de insanidade:
Este outro é o que pode ser colocado em algo para que quando olhar, o efeito acontece..
Este outro é se o objeto estiver com a tag "Enemy"
Este Script Adiciona o Valor na Sanidade ao Coletar algo
Agora, os seguintes erros consistem em ser os mesmos nos 2 Scripts, eu só não entendo o porque, mas espero que possam me ajudar com isso ..
1- ERRO : NullReferenceException: Object reference not set to an instance of an object
Dizzy.Update () (at Assets/Scripts/Sanidade/Dizzy.cs:20)
2- ERRO: NullReferenceException: Object reference not set to an instance of an object
Fright.Update () (at Assets/Scripts/Sanidade/Fright.cs:26)
O problema é que se eu uso o script para coletar e adicionar sanidade, ele não coleta e muito menos adiciona.
O outro problema é que quando eu chego perto de algo, teria que adicionar sanidade, e não adiciona, só diminui.
Existem outros modos desse script porém esses são os principais problemas mesmo..
Aparentam ser coisas bem simples mesmo, mas como disse, eu sou meio que "novato" em Linguagem de programação, então arrisquei tentar converter esse Javascript pois parecia ser bem simples.. Agradeço a Atenção de Vocês !
Eu encontrei um tutorial que ensinava a fazer um sistema de sanidade para o jogador, que no caso quando ele desse de frente com alguma coisa, a visão fica turva.. Esse tutorial é literalmente todo em "JavaScript" e eu como NUNCA tinha "convertido" um sistema em javascript para c++ resolvi apostar na ideia, eu sou um tanto quanto "novato" na área de C#, porém depois de tantos e tantos tutoriais, acabei me familiarizando com a linguagem, (Pelomenos na parte mais básica).. Bom, vamos ao que interessa, lembrando novamente que todo script foi "convertido" por mim, pois a linguagem era toda em (var, function etc..)..
Como disse o objetivo desse sistema é fazer meio que um sistema de "Medo" para o personagem, assim que ele chegasse perto de algo, a porcentagem de sanidade aumenta, fazendo com que a visão fique turva.. Eu fiz literalmente de TUDO para tentar passar por cima e concertar este erro, porém nada funcionava.. Deram alguns, porém dos mais simples e solucionaveis (pelomenos para mim)..
Decidi postar aqui pois são mais experientes e acredito que possam me ajudar a encontrar essa soluçao kkkk..
Sobre o Sistema
O Sistema consiste em 2 Scripts diferentes, um baseado na distancia, e o outro ao coletar..
Este é o script principal do sistema de insanidade:
- Código:
using UnityEngine;
using System.Collections;
public class InsanityManager : MonoBehaviour {
public float currentSanity = 20.0f;
public float maxSanity = 100.0f;
public float minSanity = 0.0f;
// Use this for initialization
// Update is called once per frame
}
void Update () {
if (currentSanity <= 100) {
currentSanity -= Time.deltaTime;
}
if (currentSanity >= 100) {
currentSanity = maxSanity;
}
if (currentSanity <= 0) {
currentSanity = minSanity;
}
}
void OnGUI(){
GUI.Box (new Rect (5, 5, 55, 25), "Sanity");
GUI.Box(new Rect(65,5,55,25), currentSanity.ToString("0") + "/" + maxSanity);
}
}
Este outro é o que pode ser colocado em algo para que quando olhar, o efeito acontece..
- Código:
using UnityEngine;
using System.Collections;
using UnityStandardAssets.ImageEffects;
using UnityStandardAssets.Characters.FirstPerson;
public class Dizzy : MonoBehaviour {
public static MotionBlur mBlur;
public static InsanityManager sanityScript;
// Use this for initialization
void Start () {
mBlur = GameObject.Find ("MainCamera").GetComponent<MotionBlur> ();
sanityScript = GameObject.Find ("FirstPersonController").GetComponent<InsanityManager>();
mBlur.enabled = false;
}
void Update (){
if (sanityScript.currentSanity >= 20) {
mBlur.enabled = true;
mBlur.blurAmount = 0.2f;
}
if (sanityScript.currentSanity >= 40) {
mBlur.enabled = true;
mBlur.blurAmount = 0.4f;
}
if (sanityScript.currentSanity >= 60) {
mBlur.enabled = true;
mBlur.blurAmount = 0.6f;
}
if (sanityScript.currentSanity >= 80) {
mBlur.enabled = true;
mBlur.blurAmount = 0.85f;
}
if (sanityScript.currentSanity >= 90) {
mBlur.enabled = true;
mBlur.blurAmount = 0.99f;
}
}
}
Este outro é se o objeto estiver com a tag "Enemy"
- Código:
using UnityEngine;
using System.Collections;
using UnityStandardAssets.Characters.FirstPerson;
public class Fright : MonoBehaviour {
public static InsanityManager sanityScript;
[SerializeField] private Camera mainCam;
[SerializeField] private Transform rayPos;
public float scarePerc = 20.0f;
// Use this for initialization
void Start () {
sanityScript = GameObject.Find ("FirstPersonController").GetComponent<InsanityManager>();
}
void Update(){
RaycastHit hit;
Vector3 fwd = transform.TransformDirection (Vector3.forward);
if (Physics.Raycast (rayPos.transform.position, mainCam.transform.forward, out hit)){
if (hit.distance <= 10.0 && hit.collider.gameObject.tag == "Enemy") {
sanityScript.currentSanity += scarePerc * Time.deltaTime;
}
}
}
}
Este Script Adiciona o Valor na Sanidade ao Coletar algo
- Código:
using UnityEngine;
using System.Collections;
using UnityStandardAssets.Characters.FirstPerson;
public class Scare : MonoBehaviour {
public static InsanityManager sanityScript;
public float scarePerc = 20.0f;
// Use this for initialization
void Start () {
sanityScript = GameObject.Find ("FPSController").GetComponent<InsanityManager>();
}
// Update is called once per frame
void OnTriggerEnter (Collider coll) {
if(coll.tag == "Player"){
sanityScript.currentSanity += scarePerc;
Destroy (gameObject);
}
}
}
Agora, os seguintes erros consistem em ser os mesmos nos 2 Scripts, eu só não entendo o porque, mas espero que possam me ajudar com isso ..
1- ERRO : NullReferenceException: Object reference not set to an instance of an object
Dizzy.Update () (at Assets/Scripts/Sanidade/Dizzy.cs:20)
2- ERRO: NullReferenceException: Object reference not set to an instance of an object
Fright.Update () (at Assets/Scripts/Sanidade/Fright.cs:26)
O problema é que se eu uso o script para coletar e adicionar sanidade, ele não coleta e muito menos adiciona.
O outro problema é que quando eu chego perto de algo, teria que adicionar sanidade, e não adiciona, só diminui.
Existem outros modos desse script porém esses são os principais problemas mesmo..
Aparentam ser coisas bem simples mesmo, mas como disse, eu sou meio que "novato" em Linguagem de programação, então arrisquei tentar converter esse Javascript pois parecia ser bem simples.. Agradeço a Atenção de Vocês !
Re: Problema com Sistema de Sanidade
Sobre os Scripts Dizzy e Fright Tire o Static e linke nessas Variaveis o Objeto que Contenha o Script InsanityManager.
Magnatah- Instrutor
- PONTOS : 3548
REPUTAÇÃO : 209
Idade : 24
Áreas de atuação : Dєรєиvσlvєdσя Wєb(Fяσит-єиd), Blєиdєя, υиiтy, C#, ρнρ є Jαvαรcяiρт.
Respeito as regras :
Re: Problema com Sistema de Sanidade
O InsanityManager seria colocado dentro do FirstPerson, e o Script Dizzy também. Apenas o Fright e o Scare precisa estar dentro do objeto que vai dar o efeito.. Eu retirei o static do "public MotionBlur" e do "public InsanityManager" e de certa forma deu certo pois o nível de sanidade aumentou, mas apenas com os Scripts Fright e Scare pois um se emite através da tag "Enemy" e o outro ao coletar um objeto. Mas ao mesmo tempo não muito certo, pois quando diminui e chega a 0, o efeito permanece, ele não acaba.. deixando o Personagem com a visão turva pra sempre...Magnatah escreveu:Sobre os Scripts Dizzy e Fright Tire o Static e linke nessas Variaveis o Objeto que Contenha o Script InsanityManager.
E ainda tem um erro que permanece mesmo com a sanidade funcionando de forma crescente apenas, que seria esse:
" Object reference not set to an instance of an object
Fright.Start () (at Assets/Scripts/Sanidade/Fright.cs:15) "
Seria essa linha :
- Código:
sanityScript = GameObject.Find ("FirstPersonController").GetComponent<InsanityManager>();
Juntamente com esse erro:
" Object reference not set to an instance of an object
Scare.Start () (at Assets/Scripts/Sanidade/Scare.cs:17) "
Que seria também a mesma:
- Código:
sanityScript = GameObject.Find ("FirstPersonController").GetComponent<InsanityManager>();
Sinceramente não sei qual seria o problema, mas se caso possa me ajudar ficarei grato !
Re: Problema com Sistema de Sanidade
O InsanityManager seria colocado dentro do FirstPerson, e o Script Dizzy também. Apenas o Fright e o Scare precisa estar dentro do objeto que vai dar o efeito.. Eu retirei o static do "public MotionBlur" e do "public InsanityManager" e de certa forma deu certo pois o nível de sanidade aumentou, mas apenas com os Scripts Fright e Scare pois um se emite através da tag "Enemy" e o outro ao coletar um objeto. Mas ao mesmo tempo não muito certo, pois quando diminui e chega a 0, o efeito permanece, ele não acaba.. deixando o Personagem com a visão turva pra sempre...Magnatah escreveu:Sobre os Scripts Dizzy e Fright Tire o Static e linke nessas Variaveis o Objeto que Contenha o Script InsanityManager.
E ainda tem um erro que permanece mesmo com a sanidade funcionando de forma crescente apenas, que seria esse:
" Object reference not set to an instance of an object
Fright.Start () (at Assets/Scripts/Sanidade/Fright.cs:15) "
Seria essa linha :
- Código:
sanityScript = GameObject.Find ("FirstPersonController").GetComponent<InsanityManager>();
Juntamente com esse erro:
" Object reference not set to an instance of an object
Scare.Start () (at Assets/Scripts/Sanidade/Scare.cs:17) "
Que seria também a mesma:
- Código:
sanityScript = GameObject.Find ("FirstPersonController").GetComponent<InsanityManager>();
Sinceramente não sei qual seria o problema, mas se caso possa me ajudar ficarei grato !
Tópicos semelhantes
» Como faço um sistema de sanidade (estilo amnesia)
» Problema com sistema de tiro do Marcos;-;
» Como fazer Sistema Dia e Noite Segui o sistema de Hora
» Qual o melhor sistema sistema de anuncios para android?
» Como criar sistema de Habilidades (Skills) para o personagem 2D / e sistema de batalha 2D
» Problema com sistema de tiro do Marcos;-;
» Como fazer Sistema Dia e Noite Segui o sistema de Hora
» Qual o melhor sistema sistema de anuncios para android?
» Como criar sistema de Habilidades (Skills) para o personagem 2D / e sistema de batalha 2D
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos