【问题标题】:Swapping Two GameObjects on Keypress在按键上交换两个游戏对象
【发布时间】:2021-03-01 15:52:07
【问题描述】:

当我按下空格键时,玩家和假人应该交换位置。这不仅仅发生一次,每次我按下空格键时都需要发生,这样他们就可以来回交换。但是,有时它有效,有时则无效。当它不起作用时,假人传送给玩家,然后玩家传送到假人内部(因为那是它的最后一个位置)。这只是在推动玩家。 代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerSwap : MonoBehaviour
{
    public GameObject player;
    public GameObject dummy;
    public GameObject cameraAnchor;

    public Transform playerLastPos;
    public Transform dummyLastPos;

    public bool haveSwapped;
    public bool canSwap;

    public float swapRadius;
    public LayerMask dummyInRadius;

    // Update is called once per frame
    void Update()
    {
        canSwap = Physics.CheckSphere(player.transform.position, swapRadius, dummyInRadius);

        SwapTransforms();

        if (canSwap)
        {
            if (Input.GetKeyDown(KeyCode.Space))
            {
                haveSwapped = !haveSwapped;
                Swapping();
            }
        }
        else
        {
            Debug.Log("Can't Swap");
        }
        cameraAnchor.transform.position = player.transform.position;
    }

    public void SwapTransforms()
    {
        if (haveSwapped)
        {
            dummyLastPos.position = player.transform.position;
            playerLastPos.position = dummy.transform.position;
        }
        else
        {
            dummyLastPos.position = dummy.transform.position;
            playerLastPos.position = player.transform.position;
        }
    }

    public void Swapping()
    {
        if (haveSwapped)
        {
            player.transform.position = dummyLastPos.position;
            dummy.transform.position = playerLastPos.position;
        }
        else
        {
            player.transform.position = playerLastPos.position;
            dummy.transform.position = dummyLastPos.position;
        }
    }

    public void OnDrawGizmos()
    {
        Gizmos.color = Color.white;
        Gizmos.DrawWireSphere(player.transform.position, swapRadius);
    }
}

【问题讨论】:

    标签: boolean transform swap gameobject


    【解决方案1】:

    我已经解决了。在清理了大部分代码并实现之后,我不得不关闭播放器上的移动和角色控制器(链接:Unity Answers),我想出了这个:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class PlayerSwap : MonoBehaviour
    {
        public ThirdPersonMovement playerMove;
    
        public GameObject player;
        public GameObject dummy;
        public GameObject cameraAnchor;
    
        public Transform playerLastPos;
        public Transform dummyLastPos;
    
        public bool canSwap;
    
        public float swapRadius;
        public LayerMask dummyInRadius;
    
        // Update is called once per frame
        void Update()
        {
            canSwap = Physics.CheckSphere(player.transform.position, swapRadius, dummyInRadius);
    
            if (canSwap)
            {
                if (Input.GetKeyDown(KeyCode.Space))
                {
                    playerMove.canMove = false;
                    player.GetComponent<CharacterController>().enabled = false;
    
                    SetTransforms();
                }
            }
            else
            {
                Debug.Log("Can't Swap");
            }
            cameraAnchor.transform.position = player.transform.position;
        }
    
        public void SetTransforms()
        {
            dummyLastPos.position = dummy.transform.position;
            playerLastPos.position = player.transform.position;
            Debug.Log("Set Transforms");
    
            Swapping();
        }
    
        public void Swapping()
        {
            player.transform.position = dummyLastPos.position;
            dummy.transform.position = playerLastPos.position;
            dummy.transform.rotation = player.transform.rotation;
            Debug.Log("Swap");
    
            playerMove.canMove = true;
            player.GetComponent<CharacterController>().enabled = true;
        }
    
        public void OnDrawGizmos()
        {
            Gizmos.color = Color.white;
            Gizmos.DrawWireSphere(player.transform.position, swapRadius);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 2011-07-28
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多