我在Unity C#中制作游戏,角色在每个场景中都有不同的角色和动作功能。所以我试图为不同场景中的玩家设置不同的脚本,而所有脚本都继承自同一个基类。定义将如下所示
public class PlayerScript1 : PlayerBase { /* for scene 1*/
public void Move(){
/* my movement code*/
}
}
同样,我有一个单独的Scene2类作为
public class PlayerScript2 : PlayerBase { /* for scene 2*/
public void Move(){
/* my movement code*/
}
}
现在的问题是,我的其他脚本,如HealthScript,ScoreScript等,它们不随场景而改变。但他们确实访问了PlayerScript1脚本。这就是为什么,我在其中有PlayerScript1声明。如下所示:
public class HealthScript : MonoBehaviour {
PlayerScript1 playerScript;
void Start(){
/*accessing the script attached to game object*/
}
}
那么如何让我的健康脚本根据场景访问我的PlayerScript的不同实例?我知道我可以使用委托在运行时调用不同的方法,但是如何对类进行相同的操作呢?
答案 0 :(得分:1)
那么如何让我的健康脚本根据场景访问我的PlayerScript的不同实例呢?
首先,您要声明该类型为var modal= $modal.open({
templateUrl: '...',
controller: '...',
resolve: {
myList: function () {
return $scope.lists;
}
}
});
的对象,因为您将无法将PlayerScript2的实例分配给PlayerScript1类型的变量:这些类可能从同一父类继承,但它们不一样,你不能从一个转换为另一个。
之后你需要在场景中搜索玩家对象,比如......
PlayerBase
当然,假设PlayerBase扩展了MonoBehaviour。如果它没有,你就不能以这种方式获得参考(因为它根本不存在于场景中)。此外,如果您希望此健康对象在场景之间持续存在,则需要为其调用DontDestroyOnLoad()
(以及记住,如果您没有从场景1开始测试此对象,则会赢得&根本不存在,或者如果你在每个场景中都有副本,你就会遇到重复问题。
答案 1 :(得分:0)
有人在Unity论坛上回答了我的问题,这清除了我的疑虑: 关键是在我的HealthScript中使用以下行:
PlayerBase player = (PlayerBase)FindObjectOfType(typeof(PlayerBase));