Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# cinemachine是否有办法在播放器被销毁并实例化为克隆后重新定位该播放器?_C#_Unity3d_Cinemachine - Fatal编程技术网

C# cinemachine是否有办法在播放器被销毁并实例化为克隆后重新定位该播放器?

C# cinemachine是否有办法在播放器被销毁并实例化为克隆后重新定位该播放器?,c#,unity3d,cinemachine,C#,Unity3d,Cinemachine,我正在制作2D平台,我正在使用cinemachine跟踪我的播放器。 当玩家从-20岁以下的平台上落下时,该玩家将被销毁,并按预期实例化为复制到繁殖点,但由于原始玩家被销毁,摄像机没有跟随:在“跟随”位置上显示丢失。 有办法解决吗?我更喜欢使用毁灭和实例化作为重生,而不是将原始玩家传送到重生点 这是重生脚本(游戏大师) 公共职业玩家:单行为 { 公共静态游戏大师; void Start() { 如果(gm==null) { gm=GameObject.FindGameObjectWithTag(

我正在制作2D平台,我正在使用cinemachine跟踪我的播放器。
当玩家从-20岁以下的平台上落下时,该玩家将被销毁,并按预期实例化为复制到繁殖点,但由于原始玩家被销毁,摄像机没有跟随:在“跟随”位置上显示丢失。
有办法解决吗?我更喜欢使用毁灭和实例化作为重生,而不是将原始玩家传送到重生点

这是重生脚本(游戏大师)

公共职业玩家:单行为
{
公共静态游戏大师;
void Start()
{
如果(gm==null)
{
gm=GameObject.FindGameObjectWithTag(“gm”).GetComponent();
}
}
公共转换playerPrefab,spawnPoint;
公共延迟=2;
公共无效重新授权玩家(){
//产生返回新WaitForSeconds(产卵延迟);
实例化(playerPrefab、spawnPoint.position、spawnPoint.rotation);
Log(“添加SPAWN PARITCAL”);
}
公共静态无效玩家(玩家){
销毁(玩家。游戏对象);
总经理:重生玩家();
}
}
这是玩家脚本,如果需要的话

public class Player : MonoBehaviour
{
    [System.Serializable]
    public class PlayerStats
    {
        public int Health = 100;

    }
    public PlayerStats playerStats = new PlayerStats();
    public int FallBoundary = -20;
    void FixedUpdate()
    {
        if (transform.position.y <= FallBoundary)
        {
            DamagePlayer(1000);
        }
    }

    public void DamagePlayer(int damage) {
        playerStats.Health -= damage;
        if (playerStats.Health<=0)
        {
            Debug.Log("Kill Player");
            GameMaster.Killplayer(this);
        }
    }
}
公共类玩家:单行为
{
[系统可序列化]
公共级玩家状态
{
公共卫生=100;
}
公共PlayerStats PlayerStats=新PlayerStats();
公共边界=-20;
void FixedUpdate()
{

如果(transform.position.y,则必须按如下方式指定新对象:

myCinemachine.m_Follow = spawnedPlayer;

您可以将cinemachine缓存在start方法中,然后指定在respawn时跟随播放器

您的代码将成为

使用电影机;
公共类游戏大师:单一行为
{
公共静态游戏大师;
公共电影机虚拟电影机;
void Start()
{
如果(gm==null)
{
gm=GameObject.FindGameObjectWithTag(“gm”).GetComponent();
}
myCinemachine=GetComponent();
}
公共转换playerPrefab,spawnPoint;
公共延迟=2;
公共无效重新授权玩家(){
//产生返回新WaitForSeconds(产卵延迟);
var newPlayer=实例化(playerPrefab、spawnPoint.position、spawnPoint.rotation);
Log(“添加SPAWN PARITCAL”);
myCinemachine.m_Follow=newPlayer;
}
公共静态无效玩家(玩家){
销毁(玩家。游戏对象);
总经理:重生玩家();
}
}

上面写着“Follow”缺少插槽,有没有办法解决它
是的。当你重新启动玩家时,按程序重新分配它。当你摧毁并重新启动玩家时,这是一个新的游戏对象,与旧的不一样,所以Cinemachine不知道它。上面的代码是如何工作的?上面的代码是否使vcam(myCinemachine的)跟随插槽的变化“spawnPlayer”?对象myCinemachine具体是什么?如何创建对象?(我是Unity和Programming的新手)