我的游戏是一个自上而下的僵尸射击游戏,每当僵尸到达玩家时,他们就会聚集在他们下面,直到玩家可以走过僵尸。我注意到当我在Rigidbody上检查isKinematic时,僵尸不能将玩家推到他下面,所以他们只是碰到了他(这就是我想要的)。尽管如此,我无法移动。我该如何解决这个问题?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMoving1 : MonoBehaviour {
public float moveSpeed;
private Rigidbody myRigidbody;
private Vector3 moveInput;
private Vector3 moveVelocity;
private Camera mainCamera;
public GunController theGun;
void Start () {
myRigidbody = GetComponent <Rigidbody>();
mainCamera = FindObjectOfType<Camera>();
}
// Update is called once per frame
void Update () {
moveInput = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical"));
moveVelocity = moveInput * moveSpeed;
Ray cameraRay = mainCamera.ScreenPointToRay(Input.mousePosition);
Plane groundPlane = new Plane(Vector3.up, Vector3.zero);
float rayLength;
if(groundPlane.Raycast(cameraRay,out rayLength))
{
Vector3 pointToLook = cameraRay.GetPoint(rayLength);
transform.LookAt(new Vector3(pointToLook.x,transform.position.y,pointToLook.z));
}
if (Input.GetMouseButtonDown(0))
theGun.isFiring = true;
if (Input.GetMouseButtonUp(0))
theGun.isFiring = false;
}
void FixedUpdate(){
myRigidbody.velocity = moveVelocity;
}
}
答案 0 :(得分:0)
使用isKinematic == true
您无法通过刚体更改对象位置,您只能更改transform.position
。
我认为可能会更好,如果你将isKinematic设置为false并为敌人添加停止距离,那么他们就不能太靠近玩家。
答案 1 :(得分:0)
由于你的玩家不再受物理引擎的影响,你必须手动操纵对象的变换。你的脚本当前没有理想的设置,但如果我要将它破解成它并尝试使其工作,它将看起来像这样:
(如果您不再使用物理引擎,可以将它从fixedUpdate更改为更新)
void update(){
float x = Input.GetAxisRaw("Horizontal")* Time.Deltatime;
float z = Input.GetAxisRaw("Vertical") * Time.Deltatime;
transform.position = new Vector3(transform.position.x+x,0,transform.position.z+z);
答案 2 :(得分:0)
另一种方法是锁定玩家的Y位置(假设Y是正“向上”方向)。当您想要移动玩家或物体时,isKinimatic
是最好的。
我想说在这种情况下提高mass
会更好,而且在这种情况下你也可以保持isKinematic
未经检查。同时应用锁定Y移动(如果它是从平面“向上”的方向再次)
让我知道你的解决方案是什么,过去我遇到过一些问题以及发生这些类型的事件