我对Unity和C#都是陌生的,已经研究了几天。我目前正在尝试阻止播放器滑动,并为此设置了较高的播放器材料摩擦值,以使其不会滑动。但是,这会导致我的角色走得太快的问题。为了解决这个问题,我创建了一个带有BoxCollider2D的子对象,该对象被标记为可以修改的摩擦控制器。我得到一个代码,当我开始移动时,它将物理材料的摩擦值更改为0,而当应该停止时将其更改为100。问题在于,尽管这会更新材质本身,但不会影响盒碰撞器设置。有人知道解决方案吗?
using System.Collections.Generic;
using System.Collections.Specialized;
using UnityEngine;
public class Player_Movement : MonoBehaviour
{
GameObject frictionController;
public BoxCollider2D collider;
public float speed = 400f;
public float jumpForce;
private float friction;
private Rigidbody2D rb2d;
private bool isMoving;
// Start is called before the first frame update
void Start()
{
rb2d = GetComponent<Rigidbody2D> ();
}
// Update is called once per frame
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
Vector2 movement = new Vector2(moveHorizontal,0);
rb2d.AddForce(movement * speed);
}
void Update()
{
frictionController = GameObject.FindWithTag("Friction Controller");
collider = frictionController.GetComponent<BoxCollider2D>();
if (Input.GetKey("a") || (Input.GetKey("d")))
{
{ Debug.Log("Pressed Button"); }
collider.sharedMaterial.friction = 0;
} else { collider.sharedMaterial.friction = 100; }
///This part isn't complete yet
float moveVertical = Input.GetAxis("Vertical");
Vector2 jump = new Vector2(0, moveVertical);
if (Input.GetKeyDown("space"))
{
rb2d.AddForce(Vector3.up * jumpForce);
}
}
}
我对Unity和C#都是陌生的,已经研究了几天。我目前正在尝试阻止播放器滑动,并为此设置了播放器的摩擦值...
我不确定您的方法是否特别好,以后可能会给您带来问题。因为您使用的是物理系统,所以更好的方法是在要停止时对刚体施加力,该力与速度成反比。