在unity中的sprite的OnMouseDown()中调用一个子类方法



大家好,我正在尝试制作一个简单的2D游戏,下面是它的工作原理。假设有一个精灵"帐篷",每当我点击帐篷时,控制台就会打印出一条消息。听起来很简单,是吗?然而,我就像被困在中间一样,我知道在这之后我会非常努力地面对自己。我在脚本中所做的是:

public abstract class Player : MonoBehaviour {
protected string _name;
// Use this for initialization
public Player(string name)
{
_name = name;
}
public string Name
{
get { return _name; }
set { _name = value; }
}
void Start () {
}
// Update is called once per frame
void Update () {
}}  

接下来我有一个名为平民的儿童班

public class Civilian : Player {
// Use this for initialization
public Civilian(string name):base(name)
{
}
void Start () {
}
// Update is called once per frame
void Update () {
}

}然后在我的脚本"Tentclicated"中,我想在点击精灵时调用sleep函数。

public class tentclicked : MonoBehaviour {
void OnMouseDown()
{
// c.Sleep();
}

// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}

}

你想知道什么是c,它指向什么?我在另一个名为testing1的脚本中实例化了一个新类。

public class testing1 : MonoBehaviour
{
public Text p1name;
public void Awake()
{
//p1name.text = "Hello";
//Civilian C = Scriptss.AddComponent<Civilian>();
//GameObject theCivilian = GameObject.Find("Scriptss");
// Civilian c = theCivilian.GetComponent<Civilian>();
//c.Name = Testingsavename.playernames.username;
//c.Name = "Hello";

}
// Use this for initialization
void Start()
{
if (Choosechar.choice.choicecount == 1)
{
Civilian c = new Civilian(Testingsavename.playernames.username);
p1name = GetComponent<Text>();
p1name.text = c.Name;
}

我已经为我的精灵添加了一个圆碰撞器。错误是在tentclicated中,上下文中不存在c。所以我怀疑这可能是因为团结不知道c是什么。我正在考虑让平民类成为一个静态的类,只是在点击脚本中称为Civil.civil.Sleep((。。。。

"c"在此上下文中不存在,因为您的tentclicked类没有对它的引用。用GameObject.Find(string name)查找"c",并将游戏对象值分配给tentclicked中的变量

您可以从当前鼠标位置向对象进行光线投射(只需确保对象有一个对撞机即可。

void OnMouseDown()
{
RaycastHit hit; 
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
if ( Physics.Raycast (ray,out hit,100.0f)) 
{
Civilian c = hit.collider.gameObject.GetComponent<Civilian>();
c.Sleep();
}
}

最新更新