c# - 变量值不保留在设置变量上
问题描述
我试图在一开始就获得怪物的健康状况,它工作得非常好,但是当我在检查器中看到时,我看到“0”健康状况。
一开始它工作正常,它显示正确的健康“200”,但一秒钟后它在控制台中的怪物检查器中显示健康为“0”。所以一开始,怪物脚本应该从另一个脚本中获取生命值(int)。
我希望你能找出问题所在,因为相信我,我擅长编码,但我试图在 2 天内找出问题所在。
这是代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MonsterData : MonoBehaviour
{
public int MonHealth;
public string[] items;
private string MonsterDataLink ="https://000webhostapp.com/SetMonster.php";
private string MonsterGetDataLink = "https://000webhostapp.com/GetMonsterData.php";
[SerializeField] private string MonsterName;
[SerializeField] private int Health,Exp, RunesMin, RunesMax, Item,Item1,Item2,Item3,Item4,Item5,Item6,Item7,Level,DEF,Attack;
[SerializeField] private int MonsterID;
private void Start()
{
//StartCoroutine(GetMonsterData(MonsterID));
//StartCoroutine(CreateMonster(MonsterName,Health, Exp, RunesMin,RunesMax, Item, Item1, Item2, Item3, Item4, Item5, Item6, Item7,Level,DEF,Attack));
}
IEnumerator CreateMonster(string MonsterName,int Health,int Exp,int RunesMin,int RunesMax,int Item,int Item1,int Item2,int Item3,int Item4,int Item5,int Item6,int Item7,int Level,int DEF, int Attack)
{
WWWForm MonsterRegister = new WWWForm();
MonsterRegister.AddField("NamePost", MonsterName);
MonsterRegister.AddField("HealthPost", Health);
MonsterRegister.AddField("ExpPost", Exp);
MonsterRegister.AddField("RunesMinPost", RunesMin);
MonsterRegister.AddField("RunesMaxPost", RunesMax);
MonsterRegister.AddField("ItemPost", Item);
MonsterRegister.AddField("Item1Post", Item1);
MonsterRegister.AddField("Item2Post", Item2);
MonsterRegister.AddField("Item3Post", Item3);
MonsterRegister.AddField("Item4Post", Item4);
MonsterRegister.AddField("Item5Post", Item5);
MonsterRegister.AddField("Item6Post", Item6);
MonsterRegister.AddField("Item7Post", Item7);
MonsterRegister.AddField("LevelPost", Level);
MonsterRegister.AddField("DEFPost", DEF);
MonsterRegister.AddField("AttackPost", Attack);
WWW wwwRegister = new WWW(MonsterDataLink, MonsterRegister);
yield return wwwRegister;
Debug.Log(wwwRegister.text);
}
public IEnumerator GetMonsterData(int MonsterID)
{
WWWForm MonsterGetData = new WWWForm();
MonsterGetData.AddField("MonsterIDPost", MonsterID);
WWW wwwMonsterData = new WWW(MonsterGetDataLink, MonsterGetData);
yield return wwwMonsterData;
string MonsterDataString = wwwMonsterData.text;
items = MonsterDataString.Split(';');
string Data = (GetDataValue(items[MonsterID - 1], "Health:"));
yield return Data;
Debug.Log(Data);
GetInfo(Data);
}
public string GetDataValue(string data, string index)
{
string value = data.Substring(data.IndexOf(index) +
index.Length);
value = value.Remove(value.IndexOf("|"));
return value;
}
private void GetInfo(string health)
{
int sethealth = int.Parse(health);
MonsterMove mons = new MonsterMove();
Debug.Log(sethealth);
mons.SetHealth(sethealth);
}
}
怪物代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MonsterMove : MonoBehaviour
{
#region //start
public int StartingHealth;
private int starts;
[SerializeField] private int MonsterID=1;
public Animator anim;
public bool IdleAnimBool = false;
public bool PatrolAnimBool = true;
[SerializeField]
private float TimeCounterStartPatrol,FixedPatrolTime;
private float RandomTimePatrol, TimeCounterBasePatrol;
[SerializeField]
private float TimeCounterStartIdle,FixedIdleTime;
private float RandomIdleTime, TimeCounterBaseIdle;
[SerializeField]
private bool ShouldBeIdle=false;
public float MonsterMoveSpeed;
public float Distance=2f;
[SerializeField]
private bool ShouldBePatroling = true;
private bool MovingRight = true;
public Transform groundDetection;
#endregion
private void Start()
{
MonsterData mons = new MonsterData();
StartCoroutine(mons.GetMonsterData(MonsterID));
MonsterMoveSpeed = Random.Range(1, 1.3f);
TimeCounterBasePatrol = TimeCounterStartPatrol;
TimeCounterBaseIdle = TimeCounterStartIdle;
RandomTimePatrol = Random.Range(0f, TimeCounterStartPatrol-FixedPatrolTime);
RandomIdleTime = Random.Range(0f, TimeCounterStartIdle-FixedIdleTime);
}
void FixedUpdate()
{
Debug.Log(StartingHealth);
if (ShouldBePatroling&&!ShouldBeIdle)
{
Move();
PatrolTime();
PatrolAnim();
anim.SetBool("run", true);
anim.SetBool("idle", false);
}
if (ShouldBeIdle==true&&!ShouldBePatroling) {
IdleAnim();
IdleTime();
anim.SetBool("run", false);
anim.SetBool("idle", true);
}
}
void Move()
{
transform.Translate(Vector2.right * MonsterMoveSpeed * Time.deltaTime);
int layer_mask1 = LayerMask.GetMask("Ground");
RaycastHit2D groundInfo = Physics2D.Raycast(groundDetection.position, Vector2.down, Distance, layer_mask1);
if (groundInfo.collider == false)
{
if (MovingRight == true)
{
transform.eulerAngles = new Vector3(0,
-180, 0);
MovingRight = false;
}
else
{
transform.eulerAngles = new Vector3(0,
0, 0);
MovingRight = true;
}
}
}
private void PatrolTime()
{
TimeCounterStartPatrol -= Time.fixedDeltaTime;
if (TimeCounterStartPatrol <= RandomTimePatrol)
{
ShouldBePatroling = !ShouldBePatroling;
ShouldBeIdle = !ShouldBeIdle;
TimeCounterStartPatrol =
TimeCounterBasePatrol;
}
}
private void IdleTime()
{
TimeCounterStartIdle -= Time.fixedDeltaTime;
if (TimeCounterStartIdle <= RandomIdleTime)
{
ShouldBePatroling = !ShouldBePatroling;
ShouldBeIdle = !ShouldBeIdle;
TimeCounterStartIdle = TimeCounterBaseIdle;
}
}
private void IdleAnim()
{
if (IdleAnimBool == true && PatrolAnimBool == false)
{
IdleAnimBool = false;
PatrolAnimBool = true;
}
}
private void PatrolAnim()
{
if (PatrolAnimBool == true && IdleAnimBool == false)
{
PatrolAnimBool = false;
IdleAnimBool = true;
}
}
private void ChangeAnim()
{
}
public void SetHealth(int health)
{
StartingHealth = health;
}
}
解决方案
推荐阅读
- reactjs - 如果在 beforeEach 中进行浅渲染,是否会影响开玩笑的测试性能
- javascript - 如何定位我的内存泄漏源?
- c# - 使用 Microsoft.CongnitiveServices.Speech 的 Visual Studio C# 项目在带有 Raspbian 的 Raspberry pi 4 上不起作用,有人可以帮我吗?
- queue - AnyLogic 表示排队等待时间
- excel - 将单元格与分隔符组合在一起 如何在 Excel 中实现这一点?
- mongodb - DigiCert 证书不适用于 MongoDB
- python - openpyxl - 无法遍历 excel 行
- c# - 如何使用 Elasticsearch Nest 在 C# 中动态映射 JObject 的属性
- arrays - SwiftUI - Text() 调用中的“表达式类型不明确,没有更多上下文”
- c# - 类声明中的未知结构是什么?