C# Unity Inspector在运行时清除变量
所以我有了一个非常基本的战斗脚本,它将玩家和脚本所附的任何敌人都纳入了这个脚本中。但是,当我点击play来测试游戏时,我在inspector中添加到player变量的值消失了,就好像我从未添加任何东西一样。当我按下“停止”按钮时,它再次出现 我的超级简单的战斗脚本C# Unity Inspector在运行时清除变量,c#,unity3d,unity5,C#,Unity3d,Unity5,所以我有了一个非常基本的战斗脚本,它将玩家和脚本所附的任何敌人都纳入了这个脚本中。但是,当我点击play来测试游戏时,我在inspector中添加到player变量的值消失了,就好像我从未添加任何东西一样。当我按下“停止”按钮时,它再次出现 我的超级简单的战斗脚本 using UnityEngine; using System.Collections; using UnityEditor; using UnityEngine.UI; public class BasicCombat : Mon
using UnityEngine;
using System.Collections;
using UnityEditor;
using UnityEngine.UI;
public class BasicCombat : MonoBehaviour
{
public KennedyClass playerK;
public pawnClass pawn;
public archerClass archer;
// Use this for initialization
void Start()
{
playerK = GetComponent<KennedyClass>();
pawn = GetComponent<pawnClass>();
archer = GetComponent<archerClass>();
playerK.charHP = playerK.maxHP;
}
// Update is called once per frame
void Update()
{
}
public void Attack()
{
if (gameObject.CompareTag("Pawn"))
{
while (playerK.charHP != 0 & pawn.pawnHP !=0)
{
playerK.charHP -= pawn.pawnDamage;
playerK.HPCount();
Debug.Log("Player - " + playerK.charHP);
var option = EditorUtility.DisplayDialogComplex(
"Attack",
"Do you want to attack?",
"Yes",
"No",
"Exit");
switch (option)
{
case 0:
pawn.pawnHP -= playerK.atkP;
Debug.Log("Pawn - " + pawn.pawnHP);
break;
case 1:
//Exit loop (for now)
break;
case 2:
//Exit loop (for now)
break;
}
}
}
else if (gameObject.CompareTag("Archer"))
{
while (playerK.HP != 0 & pawn.pawnHP != 0)
{
playerK.HP -= archer.archerDamage;
Debug.Log("Player - " + playerK.HP);
var option = EditorUtility.DisplayDialogComplex(
"Attack",
"Do you want to attack?",
"Yes",
"No",
"Exit");
switch (option)
{
case 0:
archer.archerHP -= playerK.atkP;
Debug.Log("Archer - " + archer.archerHP);
break;
case 1:
//Exit loop (for now)
break;
case 2:
//Exit loop (for now)
break;
}
}
}
if (playerK.charHP == 0)
{
Debug.Log("Player death");
Application.LoadLevel(0);
}
if (pawn.pawnHP == 0)
{
Debug.Log("Enemy death");
pawn.GetComponent<Renderer>().enabled = false;
}
if (archer.archerHP == 0)
{
Debug.Log("Enemy death");
archer.GetComponent<Renderer>().enabled = false;
}
}
}
使用UnityEngine;
使用系统集合;
使用UnityEditor;
使用UnityEngine.UI;
公共课基本课程:单一行为
{
公共犬类运动员;
公共典当类典当;
公共射箭运动员;
//用于初始化
void Start()
{
playerK=GetComponent();
pawn=GetComponent();
archer=GetComponent();
playerK.charHP=playerK.maxHP;
}
//每帧调用一次更新
无效更新()
{
}
公开无效攻击()
{
if(gameObject.CompareTag(“典当”))
{
while(playerK.charHP!=0和pawn.pawnHP!=0)
{
playerK.charHP-=典当师.pawnDamage;
playerK.HPCount();
Log(“Player-”+playerK.charHP);
var option=EditorUtility.DisplayDialogComplex(
“攻击”,
“你想进攻吗?”,
“是的”,
“不”,
“退出”);
开关(选件)
{
案例0:
pawn.pawnHP-=玩家k.atkP;
Debug.Log(“Pawn-”+Pawn.pawnHP);
打破
案例1:
//退出循环(暂时)
打破
案例2:
//退出循环(暂时)
打破
}
}
}
else if(gameObject.CompareTag(“弓箭手”))
{
while(playerK.HP!=0和pawn.pawnHP!=0)
{
玩家k.HP-=射手伤害;
Log(“Player-”+playerK.HP);
var option=EditorUtility.DisplayDialogComplex(
“攻击”,
“你想进攻吗?”,
“是的”,
“不”,
“退出”);
开关(选件)
{
案例0:
archer.archerHP-=玩家K.atkP;
Log(“Archer-”+Archer.archerHP);
打破
案例1:
//退出循环(暂时)
打破
案例2:
//退出循环(暂时)
打破
}
}
}
如果(playerK.charHP==0)
{
Debug.Log(“玩家死亡”);
应用程序。加载级别(0);
}
if(pawn.pawnHP==0)
{
调试日志(“敌人死亡”);
pawn.GetComponent().enabled=false;
}
if(archer.archerHP==0)
{
调试日志(“敌人死亡”);
archer.GetComponent().enabled=false;
}
}
}
您正在更改Start
功能中的变量。拆下线路
playerK=GetComponent()代码>
通过启动
函数,使变量保持在inspector中设置的状态
为了稍微解释一下发生了什么,当您在inspector中分配player变量时,您是在给它一个GameObject
的引用,并附加了KenedyClass
脚本。这是我假设你想要的参考资料
但是,当您调用playerK=GetComponent()时
然后您会说“忘记我在inspector中设置的内容,在该脚本所附加的游戏对象上查找KennedyClass
组件,并将playerK
设置为它”。如果没有一个KennedyClass
脚本附加到这个游戏对象上,我假设没有,那么它将返回null
并在inspector中擦除设置