C#/Unity-如何比较字符串变量?
如何在Unity中比较第一个对象中的字符串变量和第二个对象中的字符串? 下面是我的问题的截图: 谢谢你的回答 PlayerMove:C#/Unity-如何比较字符串变量?,c#,string,variables,unity3d,compare,C#,String,Variables,Unity3d,Compare,如何在Unity中比较第一个对象中的字符串变量和第二个对象中的字符串? 下面是我的问题的截图: 谢谢你的回答 PlayerMove: using UnityEngine; using System.Collections; public class PlayerMove : MonoBehaviour { Vector3 pos; public float speed; char mv; string ObstacleTypePlayer; void Start () { po
using UnityEngine;
using System.Collections;
public class PlayerMove : MonoBehaviour {
Vector3 pos;
public float speed;
char mv;
string ObstacleTypePlayer;
void Start () {
pos = transform.position;
}
void Update () {
if (Input.GetKeyDown(KeyCode.LeftArrow) && mv != 'l')
pos.x -= speed;
if (Input.GetKeyDown(KeyCode.RightArrow))
pos.x += speed;
if (Input.GetKeyDown(KeyCode.UpArrow) && mv != 'u')
pos.y += speed;
if (Input.GetKeyDown(KeyCode.DownArrow) && mv != 'd')
pos.y -= speed;
transform.position = pos;
}
void OnTriggerEnter2D(Collider2D col)
{
if (col.CompareTag("obstacle"))
{
col.gameObject.GetComponent<Obstacle>().Move(true);
print("obstacle");
}
if (col.gameObject.GetComponent<Obstacle>().ObstacleType == "big left") // not true, but if Obstacle.ObstacleType == "big left"
{
if (col.CompareTag("side_up"))
NotMove('d');
else if (col.CompareTag("side_down"))
NotMove('u');
else if (col.CompareTag("side_right"))
NotMove('l');
}
}
void OnTriggerStay2D(Collider2D col)
{
}
void OnTriggerExit2D(Collider2D col)
{
if (col.CompareTag("side_up"))
NotMove(' ');
else if (col.CompareTag("side_down"))
NotMove(' ');
else if (col.CompareTag("side_right"))
NotMove(' ');
}
char NotMove(char z)
{
mv = z;
return mv;
}
}
与调用
Move()
函数的方式完全相同:
col.gameObject.GetComponent<Obstacle>().ObstacleType == "big left"
与调用
Move()
函数的方式完全相同:
col.gameObject.GetComponent<Obstacle>().ObstacleType == "big left"
在问题中包含您的代码。您可以将字符串与
=
进行比较,通常是.obja.TheString==objb.TheString。但是,请与其他对象和脚本字符串进行比较,因为问题似乎与该比较没有直接关系,请包括整个类,而不仅仅是片段。在Unity中,在不同游戏对象中的脚本之间进行通信的唯一方法是使用“GameObject.SendMessage()”在一个游戏对象的脚本中创建一个公共游戏对象,并在编辑器中将另一个游戏对象分配给它。然后,将字符串发送到公共方法,例如:public void receiveString(string anyString)。现在,您可以将此字符串与其他字符串进行比较。将您的代码包括在问题中。您通常将字符串与=
进行比较。obja.TheString==objb.TheString但与其他对象和脚本字符串进行比较。由于问题似乎与该比较没有直接关系,因此,请包括整个类,而不仅仅是片段。唯一的方法是o Unity中不同游戏对象中的脚本之间的通信使用“GameObject.SendMessage()”在其中一个游戏对象的脚本中创建一个公共游戏对象,并在编辑器中将另一个游戏对象分配给它。然后,将字符串发送到公共方法,例如:public void receiveString(string anyString)。现在,您可以在另一个字符串中比较此字符串。我知道,但它是错误的:NullReferenceException:对象引用未设置为对象资产的实例/Scripts/PlayerMove.cs 46I很久以前尝试过。示例:d这是访问另一个脚本中变量的正确方法。如果您获得NullReferenceException,则问题在于除此之外,一切都是正确的:您可能希望在if(col.compareTag(“障碍”)的末尾添加一个返回;
)由于碰撞对象只能有一个标记,因此不进一步检查或使第二个块成为否则。
我知道,但这是错误的:NullReferenceException:object reference未设置为对象的实例Assets/Scripts/PlayerMove.cs 46我很久以前尝试过。:d访问Other中变量的正确方法是什么r脚本。如果您得到一个NullReferenceException,那么问题就出在其他地方。但是,在哪里,一切都是正确的:您可能希望在If(col.compareTag(“障碍”)
的末尾添加一个return;
,以避免进一步检查,或者使第二个块成为else If
,因为碰撞对象只能有一个标记。
col.transform.root.GetComponent<Obstacle>().ObstacleType == "big left"