C# 为什么添加文本会导致播放器移动错误?
我的代码工作得很好,直到我添加了健康和幸存者保存文本 现在是line controller.Move(移动速度);由于控制器为null,因此给出错误NullRefeenceexption 奇怪的是,如果我进入LivingEntity,并用 Health.text或survivorsaved.text它再次工作 有人知道为什么吗 代码:C# 为什么添加文本会导致播放器移动错误?,c#,debugging,unity3d,C#,Debugging,Unity3d,我的代码工作得很好,直到我添加了健康和幸存者保存文本 现在是line controller.Move(移动速度);由于控制器为null,因此给出错误NullRefeenceexption 奇怪的是,如果我进入LivingEntity,并用 Health.text或survivorsaved.text它再次工作 有人知道为什么吗 代码: public class Player : LivingEntity { public float moveSpeed = 5; Camera
public class Player : LivingEntity {
public float moveSpeed = 5;
Camera viewCamera;
PlayerController controller;
GunController gunController;
protected override void Start()
{
base.Start();
controller = GetComponent<PlayerController>();
gunController = GetComponent<GunController>();
viewCamera = Camera.main;
}
void Update()
{
// Movement input
Vector3 moveInput = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
Vector3 moveVelocity = moveInput.normalized * moveSpeed;
controller.Move(moveVelocity);
// Look input
Ray ray = viewCamera.ScreenPointToRay(Input.mousePosition);
Plane groundPlane = new Plane(Vector3.up, Vector3.zero);
float rayDistance;
if (groundPlane.Raycast(ray, out rayDistance))
{
Vector3 point = ray.GetPoint(rayDistance);
//Debug.DrawLine(ray.origin,point,Color.red);
controller.LookAt(point);
}
// Weapon input
if (Input.GetMouseButton(0))
{
gunController.Shoot();
}
}
}
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class LivingEntity : MonoBehaviour, IDamageable
{
public float startingHealth;
protected float health;
protected bool dead;
private float playerhealth=100;
private int Survivorssaved=0;
public Text Health;
public Text SurvivorsSaved;
public event System.Action OnDeath;
protected virtual void Start()
{
health = startingHealth;
Health.text = "Health: " + playerhealth;
SurvivorsSaved.text = "Survivors Saved:" + Survivorssaved;
}
public void TakeHit(float damage, RaycastHit hit)
{
TakeDamage(damage);
}
public void TakeDamage(float damage)
{
health -= damage;
if (GameObject.Equals(gameObject, GameObject.FindGameObjectWithTag("Player")))
{
playerhealth = health;
Health.text = "Health: " + playerhealth;
SurvivorsSaved.text = "Survivors Saved: " + Survivorssaved;
}
if (health <= 0 && !dead)
{
if(GameObject.Equals(gameObject, GameObject.FindGameObjectWithTag("Player")))
{
}
if (GameObject.Equals(gameObject, GameObject.FindGameObjectWithTag("Zombie")))
{
ScoreManager.Instance.AddScore(100);
}
if (GameObject.Equals(gameObject, GameObject.FindGameObjectWithTag("Survivor")))
{
ScoreManager.Instance.RemoveScore(500);
}
Die();
}
}
public void HealDamage(float damage)
{
health += damage;
playerhealth = health;
Survivorssaved += 1;
Health.text = "Health: " + playerhealth;
SurvivorsSaved.text = "Survivors Saved: " + Survivorssaved;
}
protected void Die()
{
dead = true;
if (OnDeath != null)
{
OnDeath();
}
GameObject.Destroy(gameObject);
}
}
公共类玩家:LivingEntity{
公共浮动速度=5;
摄像机;
播放控制器;
枪控器枪控器;
受保护的覆盖无效开始()
{
base.Start();
控制器=GetComponent();
gunController=GetComponent();
viewCamera=Camera.main;
}
无效更新()
{
//运动输入
Vector3 moveInput=新的Vector3(Input.GetAxisRaw(“水平”),0,Input.GetAxisRaw(“垂直”);
Vector3 moveVelocity=moveInput.normalized*moveSpeed;
控制器。移动(移动速度);
//查找输入
Ray Ray=viewCamera.ScreenPointRoay(输入.鼠标位置);
平面接地平面=新平面(矢量3.up,矢量3.zero);
浮动射线距离;
if(地平面光线投射(光线,向外光线距离))
{
Vector3点=光线.GetPoint(光线距离);
//绘制线(光线、原点、点、颜色、红色);
控制器。注视(点);
}
//武器投入
if(输入。GetMouseButton(0))
{
枪械控制员;
}
}
}
使用UnityEngine;
使用UnityEngine.UI;
使用系统集合;
公共阶层生存能力:单一行为,可保护
{
公共卫生;
保护健康;
保护布尔死亡;
私人浮动玩家健康=100;
私有int Survivorssaved=0;
公共卫生;
保存公共文本存活者;
公共事件系统。行动指南;
受保护的虚拟void Start()
{
健康=开始健康;
Health.text=“健康:”+玩家健康;
SurvivorsSaved.text=“幸存者已保存:”+幸存者已保存;
}
公共虚空攻击(漂浮伤害,射线攻击)
{
损坏;
}
公共财产损失(浮动损失)
{
健康-=损害;
if(GameObject.Equals(GameObject,GameObject.FindGameObjectWithTag(“Player”))
{
玩家健康=健康;
Health.text=“健康:”+玩家健康;
SurvivorsSaved.text=“幸存者已保存:”+幸存者已保存;
}
如果(健康我找到了答案,但我没有看到答案,我将其标记为已解决,因此我将简单地发布解决方案
当我去unity Scene editor查看时,playerController被正确地传递给玩家,我发现僵尸和幸存者也在要求提供健康和幸存者的文本对象,尽管没有传递文本对象,但他们仍在将信息传递到文本中
我仍然没有将其传递给僵尸或幸存者,但通过稍微更改代码,我确保僵尸和幸存者从未将任何值传递到文本文件中,从而使其正常工作。我找到了答案,但我没有看到我是否将其标记为已解决,因此我将简单地发布解决方案
当我去unity Scene editor查看时,playerController被正确地传递给玩家,我发现僵尸和幸存者也在要求提供健康和幸存者的文本对象,尽管没有传递文本对象,但他们仍在将信息传递到文本中
我仍然没有将其传递给僵尸或幸存者,但通过稍微更改代码,我确保僵尸和幸存者从未将任何值传递到文本文件中,从而使其正常工作。您应该研究一个,特别是最小值的概念。看起来本例中的问题可能与链接一样简单(在场景编辑器中)从玩家
到玩家控制器
未设置。因此我进入Unity并仔细检查了所有内容,找到了问题的根源。当我将文本对象提供给玩家时,幸存者和僵尸也要求提供文本对象,但我没有提供给他们。不幸的是,现在我有一个完整的其他问题beca“使用僵尸”不应该有这样的功能,所以我需要重新编写这个活的实体代码。你应该研究一个,特别是最小值的概念。看起来这个例子中的问题可能和链接一样简单(在场景编辑器中)从玩家
到玩家控制器
未设置。因此我进入Unity并仔细检查了所有内容,找到了问题的根源。当我将文本对象提供给玩家时,幸存者和僵尸也要求提供文本对象,但我没有提供给他们。不幸的是,现在我有一个完整的其他问题beca“使用僵尸”不应该有这样的功能,所以我需要重新编写这个活生生的实体代码。