簡體   English   中英

如何向播放器 controller 添加跳轉?

[英]How can I add a jump to the player controller?

我希望能夠通過在家里或空間站等地方以及外面按空格鍵來跳躍。

這是附在膠囊上的播放器 controller 腳本:

在我添加跳轉部分之前它工作正常。 在頂部我添加了這 3 行:

public float jumpSpeed = 8.0F;
public float gravity = 20.0F;
private Vector3 moveDirection = Vector3.zero;

然后在更新中添加:

if (controller.isGrounded && Input.GetButton("Jump"))
            {
                moveDirection.y = jumpSpeed;
            }
            moveDirection.y -= gravity * Time.deltaTime;
            controller.Move(moveDirection * Time.deltaTime);

但我沒有變量 controller。

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

public class PlayerController : MonoBehaviour
{
    public float speed = 10.0F;
    public float jumpSpeed = 8.0F;
    public float gravity = 20.0F;

    private Vector3 moveDirection = Vector3.zero;

    // Start is called before the first frame update
    void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
    }

    // Update is called once per frame
    void Update()
    {
        float translation = Input.GetAxis("Vertical") * speed;
        float straffe = Input.GetAxis("Horizontal") * speed;

        translation *= Time.deltaTime;
        straffe *= Time.deltaTime;

        transform.Translate(straffe, 0, translation);

        if (controller.isGrounded && Input.GetButton("Jump"))
        {
            moveDirection.y = jumpSpeed;
        }
        moveDirection.y -= gravity * Time.deltaTime;
        controller.Move(moveDirection * Time.deltaTime);

        if (Input.GetKeyDown("escape"))
        {
            Cursor.lockState = CursorLockMode.Locked;
        }
    }
}

這是附加到作為膠囊子的主相機的凸輪鼠標外觀腳本:

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

public class CamMouseLook : MonoBehaviour
{
    public float sensitivity = 5.0f;
    public float smoothing = 2.0f;

    Vector2 mouseLook;
    Vector2 smoothV;

    GameObject character;

    // Start is called before the first frame update
    void Start()
    {
        character = this.transform.parent.gameObject;
    }

    // Update is called once per frame
    void Update()
    {
        var md = new Vector2(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y"));

        md = Vector2.Scale(md, new Vector2(sensitivity * smoothing, sensitivity * smoothing));
        smoothV.x = Mathf.Lerp(smoothV.x, md.x, 1f / smoothing);
        smoothV.y = Mathf.Lerp(smoothV.y, md.y, 1f / smoothing);

        mouseLook += smoothV;

        mouseLook.y = Mathf.Clamp(mouseLook.y, -90f, 90f);

        transform.localRotation = Quaternion.AngleAxis(-mouseLook.y, Vector3.right);
        character.transform.localRotation = Quaternion.AngleAxis(mouseLook.x, character.transform.up);
    }
}

你有沒有想過施加力量?

public Rigidbody myphysic;
public float forceofjump = 100f; // or minor or more....

void Awake()
{
    myphysic= transform.GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    if (controller.isGrounded && Input.GetButton("Jump"))
        {
        myphysic.AddForce( transform.up * forceofjump, ForceMode.Impulse);
    }
}

Vector3.zero 是錯誤的,因為將所有運動矢量設置為零! 所以 = 沒有動作!

或者,例如:

Vector3 moveDirection = new Vector3(0, 10, 0);

這是什么意思:

new Vector3(X=stop, Y=10 of force, Z=stop);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM