我正在使用C#在Unity引擎中创建2D游戏。我有一个播放器对象,该对象始终在x和z轴上向上移动,并且我希望播放器与障碍物发生碰撞。
我已经尝试过一些事情,知道我冻结了障碍物的位置以使障碍物停止从其位置移动。那么,如何使播放器与它们发生碰撞?谢谢。
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class player : MonoBehaviour
{
public float distance = 1.0f;
private Rigidbody rb;
public float speed = 10f;
private Vector2 direction;
private Vector3 mouseposition;
public bool useInitalCameraDistance=false;
private float actualDistance;
private float deltaX , deltaY;
private float dirz, diry;
void Start()
{
rb = GetComponent<Rigidbody>();
rb.isKinematic = true;
if (useInitalCameraDistance)
{
Vector3 toobjectvector = transform.position - Camera.main.transform.position;
Vector3 lineardistancevector = Vector3.Project(toobjectvector,Camera.main.transform.forward);
actualDistance = lineardistancevector.magnitude;
}
else
{
actualDistance = distance;
}
}
void FixedUpdate ()
{
Vector3 mouseposition = Input.mousePosition;
mouseposition.z = actualDistance;
transform.position = Camera.main.ScreenToWorldPoint(mouseposition);
transform.position = Vector3.Slerp(transform.position , Camera.main.ScreenToWorldPoint(mouseposition),0.01f);
由于Z轴是2D深度,所以我想使用x和y轴。您还需要确保播放器和要碰撞的对象上都有RigidBodies。确保他们也有一个网格collider。
您可能需要将它们设置为kinematic并使用rb.MovePosition()向玩家施加力量,以获得所需的效果。
根据您的代码,您正在使用至少一个带有运动学设置的刚体。确保您的播放器也为其模型设置了此设置。如果您使用鼠标的z位置在X,Y平面上移动播放器,请忽略我的第一句话。
没有看到检查器的设置方式,仅凭代码还不足以提供真正的帮助。