微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Unity 在游戏对象之间切换

如何解决Unity 在游戏对象之间切换

我的项目有一个奇怪的问题,我试图通过按一个键在 2 个游戏对象 -village 和狼人之间切换(两者都是同一个空游戏对象的孩子)。出于某种原因,它只切换了一次并“卡在”狼人游戏对象上,而没有切换回村民。这是我第二次尝试处理 getter/setter。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;

public class WerewolfTransform : MonoBehavIoUr
{
    public GameObject villager;
    public GameObject wereWolf;
    public bool isWerewolf;

    private void Awake()
    {
        villager.SetActive(true);
        wereWolf.SetActive(false);
    }

    public bool getIsWereWolf
    {
        set
        {
            if (isWerewolf != value)
            {
                isWerewolf = value;
                villager.SetActive(false);
                wereWolf.SetActive(true);
                
            }
            else 
            {
                villager.SetActive(true);
                wereWolf.SetActive(false);
            }
        }

        get
        {
            return isWerewolf;
        }
    }


    private void Update()
    {
        Transformation();
    }

    public void Transformation()
    {
      
        if (Input.GetKeyDown(KeyCode.T))
        {
            wereWolf.transform.position = villager.transform.position;

            getIsWereWolf = !getIsWereWolf;
        } 

    }
}

解决方法

好吧,每当您更改值时,第一个案例就会启动并且您很难设置

villager.SetActive(false);
wereWolf.SetActive(true);

无论您实际将其更改为什么值。

你宁愿这样做,例如

public bool getIsWereWolf
{
    set
    {
        isWerewolf = value;
        villager.SetActive(!isWerewolf);
        wereWolf.SetActive(isWerewolf);
    }

    get => isWerewolf;
}
   

为了确保初始状态一致,我还会在 Awake

中使用它
private void Awake()
{
    getIsWerewolf = false;
}         
,

首先感谢! 我做了一些与你建议的非常相似的事情,它奏效了! 我发布了我所做的事情(布尔没有像我想要的那样工作,我去了另一个方向)

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;

public class WerewolfTransform : MonoBehaviour
{
    public GameObject villager;
    public GameObject wereWolf;
    //public bool isWerewolf;
    public int formSwitch;

    private void Awake()
    {
        villager.SetActive(true);
        wereWolf.SetActive(false);
        formSwitch = 1;
    }

  
    private void Update()
    {
        Transformation();
    }

    public void Transformation()
    {
        if (Input.GetKeyDown(KeyCode.T) && formSwitch == 1)
        {

            villager.SetActive(false);
            wereWolf.SetActive(true);
            formSwitch = 2;
            wereWolf.transform.position = villager.transform.position;
            wereWolf.transform.rotation = villager.transform.rotation;
        }

        else if (Input.GetKeyDown(KeyCode.T) && formSwitch == 2)
        {

            villager.SetActive(true);
            wereWolf.SetActive(false);
            formSwitch = 1;
            villager.transform.position = wereWolf.transform.position;
            villager.transform.rotation = wereWolf.transform.rotation;


        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。