【UNET自学日志】Part11 玩家复活

上一部分玩家摧毁的方法是设置其enable为false,那么玩家的复活就是在玩家死后,显示复活的按钮,点击按钮后把相关的enable再次设置为true即可

新建脚本Player_Respawn

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using UnityEngine.UI;

public class Player_Respawn : NetworkBehaviour {

    private Player_Health healthScript;
    private Image crossHairImage;
    private GameObject respawnButton;

	// Use this for initialization
	void Start () 
    {
        healthScript = GetComponent<Player_Health>();
        healthScript.EventRespawn += EnablePlayer;
        crossHairImage = GameObject.Find("crossHairImage").GetComponent<Image>();
        SetRespawnButton();
	}

    void SetRespawnButton()
    {
        if (isLocalPlayer)
        {
            respawnButton = GameObject.Find("GameManager").GetComponent<GameManager_References>().respawnButton;
            respawnButton.GetComponent<Button>().onClick.AddListener(CommenceRespawn);
            respawnButton.SetActive(false);
        }
    }

    void OnDisable()
    {
        healthScript.EventRespawn -= EnablePlayer;
    }

    void EnablePlayer()    
    {
        GetComponent<CharacterController>().enabled = true;
        GetComponent<Player_Shoot>().enabled = true;
        GetComponent<BoxCollider>().enabled = true;

        Renderer[] renderers = GetComponentsInChildren<Renderer>();
        foreach (Renderer ren in renderers)
        {
            ren.enabled = true;
        }

        if (isLocalPlayer)
        {
            GetComponent<UnityStandardAssets.Characters.FirstPerson.FirstPersonController>().enabled = true;
            crossHairImage.enabled = true;
            respawnButton.SetActive(false);
        }
    }

    void CommenceRespawn()
    {
        CmdRespawnOnServer();
    } 

    [Command]
    void CmdRespawnOnServer()
    {
        healthScript.ResetHealth();
    }
}


在Player_Health中添加几行代码

    public delegate void RespawnDelegate();
    public event RespawnDelegate EventRespawn;
    void CheckCondition()
    {
        if (health <= 0 && !shouldDie&&!isDead)
        {
            shouldDie = true;
        }

        if (health <= 0 && shouldDie)
        {
            if (EventDie != null)
            {
                EventDie();
            }

            shouldDie = false;
        }

        if (health > 0 && isDead)
        {
            if (EventRespawn != null)
            {
                EventRespawn();
            }

            isDead = false;
        }
    }
    public void ResetHealth()
    {
        health = 100;
    }
在Player_Death中的预留位置添加设置按钮活动的一行代码

void DisablePlayer()
    {       
        GetComponent<CharacterController>().enabled=false;       
        GetComponent<Player_Shoot>().enabled = false;
        GetComponent<BoxCollider>().enabled = false;

        Renderer[] renderers = GetComponentsInChildren<Renderer>();
        foreach (Renderer ren in renderers)
        {
            ren.enabled = false;
        }

        healthScript.isDead = true;

        if (isLocalPlayer)
        {
            GetComponent<UnityStandardAssets.Characters.FirstPerson.FirstPersonController>().enabled = false;
            crossHairImage.enabled = false;
            GameObject.Find("GameManager").GetComponent<GameManager_References>().respawnButton.SetActive(true);
        }
    }

= =反正真的没什么人看。。我也就懒得注释了

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
在Python中,特别是在使用深度学习框架如PyTorch或Keras时,`from unet import UNet`这样的语句通常是在引入预定义的Unet模型。Unet是一个流行的卷积神经网络(CNN)架构,特别适用于像图像分割这样的任务。 具体来说,假设你在一个名为`unet.py`的文件中定义了UNet模型,导入的方式可能是这样的: ```python # 假设unet.py文件有这样的定义: import torch.nn as nn class UNet(nn.Module): def __init__(self, input_channels, output_channels, features=64, depth=5): super(UNet, self).__init__() # UNet的初始化代码,包括下采样、编码器、上采样和解码器部分 # 这里省略了一些细节,但可能包括: self.downsampling_blocks = ... # 下采样层 self.bottleneck = ... # 隐藏层 self.upsampling_blocks = ... # 上采样层 self.final_layer = nn.Conv2d(features, output_channels, kernel_size=1) def forward(self, x): # 前向传播方法 skips = [] for downsampling_block in self.downsampling_blocks: x = downsampling_block(x) skips.append(x) x = self.bottleneck(x) for upsampling_block, skip in zip(self.upsampling_blocks, reversed(skips)): x = upsampling_block(x, skip) return self.final_layer(x) ``` 在你想要使用的模块文件中,你可以像这样导入并实例化Unet: ```python from unet import UNet input_channels = 3 # 输入通道数,比如RGB图像就是3 output_channels = 1 # 输出通道数,对于二值分割通常是1 model = UNet(input_channels, output_channels) ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值