球跳跃时移动得太远。当它在空中时仍然可以被控制。 Unity3d播放器控制脚本

问题描述 投票:0回答:1

我正在研究统一球类游戏。我的玩家是一个球,它使用玩家控制脚本。当球在空中跳跃时,仍然可以控制它并在空中向任意方向移动。我不希望这样,因为它无法达到建造迷宫的目的,因为它可以飞过障碍物。

我正在使用免费的 Unity 游戏套件附带的玩家控制脚本。我尝试修复它,但我只能删除跳跃功能或降低其高度,无法修复问题。

using UnityEngine;
using System.Collections;

public class PlayerControl : MonoBehaviour 
{
    private GameObject moveJoy;
    private GameObject _GameManager;
    public Vector3 movement;
    public float moveSpeed = 6.0f;
    public float jumpSpeed = 5.0f;
    public float drag = 2;
    private bool canJump = true;

    void Start()
    {
        moveJoy = GameObject.Find("LeftJoystick");
        _GameManager = GameObject.Find("_GameManager");
    }

    void Update () 
    {   
        Vector3 forward = Camera.main.transform.TransformDirection(Vector3.forward);
        forward.y = 0;
        forward = forward.normalized;

        Vector3 forwardForce = new Vector3();
        if (Application.platform == RuntimePlatform.Android) 
        {
            float tmpSpeed = moveJoy.GetComponent<Joystick>().position.y;
            forwardForce = forward * tmpSpeed * 1f * moveSpeed;
        }
        else
        {
            forwardForce = forward * Input.GetAxis("Vertical") * moveSpeed;
        }
        rigidbody.AddForce(forwardForce);

        Vector3 right= Camera.main.transform.TransformDirection(Vector3.right);
        right.y = 0;
        right = right.normalized;

        Vector3 rightForce = new Vector3();
        if (Application.platform == RuntimePlatform.Android) 
        {
            float tmpSpeed = moveJoy.GetComponent<Joystick>().position.x;
            rightForce = right * tmpSpeed * 0.8f * moveSpeed;
        }
        else
        {
            rightForce= right * Input.GetAxis("Horizontal") * moveSpeed;
        }       
        rigidbody.AddForce(rightForce);

        if (canJump && Input.GetKeyDown(KeyCode.Space))
        {
            rigidbody.AddForce(Vector3.up * jumpSpeed * 100);
            canJump = false;
            _GameManager.GetComponent<GameManager>().BallJump();
        }
    }

    void OnTriggerEnter(Collider other) 
    {
        if (other.tag == "Destroy")
        {
            _GameManager.GetComponent<GameManager>().Death();
            Destroy(gameObject);
        }
        else if (other.tag == "Coin")
        {
            Destroy(other.gameObject);
            _GameManager.GetComponent<GameManager>().FoundCoin();
        }
        else if (other.tag == "SpeedBooster")
        {
            movement = new Vector3(0,0,0);
            _GameManager.GetComponent<GameManager>().SpeedBooster();
        }
        else if (other.tag == "JumpBooster")
        {
            movement = new Vector3(0,0,0);
            _GameManager.GetComponent<GameManager>().JumpBooster();
        }
        else if (other.tag == "Teleporter")
        {
            movement = new Vector3(0,0,0);
            _GameManager.GetComponent<GameManager>().Teleporter();
        }
    }

    void OnCollisionEnter(Collision collision)
    {
        if (!canJump)
        {
            canJump = true;
            _GameManager.GetComponent<GameManager>().BallHitGround();
        }
    }

    void OnGUI()
    {
        GUI.Label(new Rect(300,10,100,100),"X: " + moveJoy.GetComponent<Joystick>().position.x.ToString());
        GUI.Label(new Rect(300,30,100,100),"Y: " + moveJoy.GetComponent<Joystick>().position.y.ToString());
    }
}

问题已得到解答。现在如何使用这个脚本 - >创建一个球体并给它“球体碰撞器”,“网格渲染器”,“刚体”,“玩家控制(脚本)”在玩家控制脚本下放置此脚本并完成。现在你有了一个可以在 ios、android 和 pc 中控制的球,我猜它可以跳跃。

c# unity-game-engine
1个回答
0
投票

我认为 canJump 标志上写着“玩家在地面上”。因此,如果您“无法跳跃”,则意味着您不应该允许玩家在角色飞行时控制角色。在 Update() 的一开始就检查它并调用 return;如果canJump == false

© www.soinside.com 2019 - 2024. All rights reserved.