提问者:小点点

Unity3D播放器在石头上穿行


大家好,我的玩家正在石头上行走,穿过石头。名为Champ的玩家有一个盒子对撞机,石头有一个网格对撞机。而且玩家有刚体。我尝试了我发现的每一件事,但没有任何帮助我解决我的问题。

移动播放器。cs脚本

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

public class MovePlayer : MonoBehaviour
{

    Rigidbody rb;

    public float speed = 10f;
    private Vector3 moveDirection;
    public float rotationSpeed = 0.05f;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        moveDirection = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")).normalized;
    }

    void FixedUpdate()
    {
        rb.MovePosition(rb.position + transform.TransformDirection(moveDirection * speed * Time.deltaTime));
        RotatePlayer();
    }

    void RotatePlayer()
    {
        if (moveDirection != Vector3.zero)
        {
            transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(moveDirection.normalized), rotationSpeed);
        }
        transform.Translate(moveDirection * speed * Time.deltaTime, Space.World);
    }

}

检验员中的播放器设置

检查器中的石头设置

场景预览

谢谢你们的帮助,伙计们!:)


共1个答案

匿名用户

测试了你的代码,碰撞似乎在我这边工作得很好。

通过将脚本添加到带盒碰撞器的游戏对象中并使用立方体创建一个小级别来测试它。还做了一面墙,我修改成使用网格碰撞器而不是盒子碰撞器。玩家与场景中的物体正常碰撞。

你应该从项目设置中仔细检查你的图层碰撞矩阵

  1. 您还可以尝试将新立方体添加到场景中,并将其层设置为“墙”,以查看播放器是否与它发生碰撞。如果是这样的话,那么石头的网格可能会有问题
  2. 如果没有,我将禁用播放器中的动画和重力身体组件,以确保它们不会干扰碰撞