Unity 3D:访问另一个C#类中的属性或方法

发表于2017-12-21
评论0 3.1k浏览

在开发Unity 3D 游戏的过程中,经常遇到在某个C#类中访问另一个C#类中的方法或属性;比如:在Eenmy.cs中访问PlayAttack.cs脚本中的TakeDamage(int damage)方法(该方法控制主角受伤的情况),以实现当敌人攻击主角时调用TakeDamage方法对主角进行受伤的处理。那么,如何实现访问另一个C#类中的属性呢?有下面常用的三种方法:


1. 设置PlayerAttack类为单例模式

// PlayerAttack脚本  
public class PlayerAttack : MonoBehaviour {  
    public static PlayerAttack _instance; // static关键字。 单例模式   
    void Awake(){  
        _instance = this;// 确保单例模式在使用前已被初始化  
    }  
    public void TakeDamage(int damage){  
        // do something  
    }  
}  
// Enemy脚本  
public class Enemy : MonoBehaviour {  
    //  
    void Attack(){  
        // 当敌人攻击主角时  
        PlayerAttack._instance.TakeDamage(20);  
    }  
}  

2. 把要访问的方法设置为静态方法

// PlayerAttack脚本  
public class PlayerAttack : MonoBehaviour {  
    public static void TakeDamage(int damage){  
        // do something  
    }  
}  
// Enemy脚本  
public class Enemy : MonoBehaviour {  
    //  
    void Attack(){  
        // 当敌人攻击主角时  
        PlayerAttack.TakeDamage(20);  
    }  
}  
3. 通过SendMessage方法传递参数
// PlayerAttack脚本  
public class PlayerAttack : MonoBehaviour {  
    public void TakeDamage(int damage){  
        // do something  
    }  
} 
// Enemy脚本  
public class Enemy : MonoBehaviour {  
    //  
    void Attack(){  
        // 当敌人攻击主角时  
        // 首先需要获取挂PlayerAttack的主角  
        GameObject player = GameObject.FindGameObjectWithTag("PlayerBoy");// Unity中主角模型的标签为PlayerBoy  
        player.SendMessage("TakeDamage", 20);  
    }  
}  

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引