我正在統一創建一個 FPS,并且正在使用帶有RigidBody
. 當玩家在一個狹小的空間內被其他兩個物體擠壓并允許玩家飛行、穿過物體和其他我不想要的意外東西時。這是播放器控制器腳本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class fpsController : MonoBehaviour
{
public InputMaster inputMaster;
private Rigidbody rig;
public Vector2 inputVector;
public Transform groundcheck;
public bool isGrounded;
float speed = 6f;
public LayerMask whatisgorund;
void Awake()
{
inputMaster = new InputMaster();
inputMaster.player.Enable();
inputMaster.player.Jump.performed = Jump;
inputMaster.player.primaryuse.performed = PrimaryUse;
rig = GetComponent<Rigidbody>();
}
void Update()
{
inputVector = inputMaster.player.movement.ReadValue<Vector2>().normalized;
}
public void FixedUpdate()
{
isGrounded = Physics.CheckSphere(groundcheck.position, 0.5f, whatisgorund);
Vector3 move = transform.right * inputVector.x transform.forward * inputVector.y;
transform.position = rig.position speed * Time.deltaTime * move;
}
public void Jump(InputAction.CallbackContext context)
{
if (context.performed && isGrounded)
{
rig.AddForce(Vector3.up * 5, ForceMode.Impulse);
}
}
public void PrimaryUse(InputAction.CallbackContext context)
{
if (isGrounded && context.performed)
{
}
}
}
這是我的播放器的螢屏截圖: 播放器
uj5u.com熱心網友回復:
如果一個物體被推過其他物體,很大程度上取決于物理引擎是否能夠保持最小距離。
此外,它會跟蹤接觸點。
您的 FixedUpdate() 直接更改了 transform.position。這通常會在已經接觸時斷開物理接觸。不要那樣做。嘗試僅在速度變化的情況下作業 - 最好使用 AddForce()。(也已包含在您的腳本中)
此外,您沒有提供有關您被擠進什么的更多資訊。如果這些是“運動學”物件,那么您的玩家將無法阻止它們并且還可能夾入其中。例如,將您作為“運動學”物件擠壓的門不允許玩家停止門。受物理控制的剛體可以被玩家擋住。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488911.html
上一篇:Unity說我的陣列溢位并崩潰
下一篇:無法訪問另一個腳本上的變數