C# 光线投射鼠标控制器,玩家和鼠标点之间的差异(生存射击教程)

C# 光线投射鼠标控制器,玩家和鼠标点之间的差异(生存射击教程),c#,unity3d,C#,Unity3d,我试图理解Unity制作的PlayerController(生存射击教程)的代码。我理解一切,除了原因,他们为什么写了落点(鼠标指向的地方)和玩家(变换位置)之间的区别.我试着只写落脚点而不写球员的位置和它的作用.他们为什么写这个?也许有人通过了这个教程,可以帮我吗 统一教程: 使用UnityEngine; 公共类玩家运动:单一行为 { 公共浮子速度=6f; 矢量3运动; 动画师; 刚体播放器刚体; int floorMask; 浮动凸轮轴长度=100f; 无效唤醒() { floorMask=

我试图理解Unity制作的PlayerController(生存射击教程)的代码。我理解一切,除了原因,他们为什么写了落点(鼠标指向的地方)和玩家(变换位置)之间的区别.我试着只写落脚点而不写球员的位置和它的作用.他们为什么写这个?也许有人通过了这个教程,可以帮我吗

统一教程:

使用UnityEngine;
公共类玩家运动:单一行为
{
公共浮子速度=6f;
矢量3运动;
动画师;
刚体播放器刚体;
int floorMask;
浮动凸轮轴长度=100f;
无效唤醒()
{
floorMask=LayerMask.GetMask(“地板”);
anim=GetComponent();
playerRigidbody=GetComponent();
}
void FixedUpdate()
{
float v=Input.GetAxisRaw(“垂直”);
float h=Input.GetAxisRaw(“水平”);
移动(h,v);
转向();
动画(h,v);
}
无效移动(浮动h、浮动v)
{
运动设定(h、0f、v);
移动=移动。标准化*速度*时间。延迟时间;
playerRigidbody.MovePosition(变换.位置+移动);
}
空转()
{
Ray camRay=Camera.main.ScreenPointRoay(输入.鼠标位置);
瑞卡斯特;
if(物理光线投射(camRay、out floorHit、camRayLength、floorMask))
{
Vector3 playerToMouse=floorHit.point-transform.position********
playerToMouse.y=0f;
四元数newRotation=四元数.LookRotation(playerToMouse);
playerRigidbody.MoveRotation(新旋转);
}
}
无效动画(浮动h、浮动v)
{
布尔瓦克林=h!=0f | | v!=0f;
动画SetBool(“IsWalking”,wakling);
}
}

光线投射需要一个方向,通常以(someVector-someOtherVector)的形式给出。这个减法的结果是一个新的向量,它以someVector作为原点。在您的例子中,从鼠标到播放器的相对向量可能永远不会改变,因此似乎不需要进行减法。但是,使用两个向量的减法作为方向是一种很好的做法。

当代码运行时,您是否尝试过让播放机不处于(0,0,0)位置?是的,我现在尝试过,它仍然有效!我认为是这样,玩家面对鼠标所在的位置。例如,试着进入一个角落,然后右击球员。玩家将面对角落,而不是鼠标位置
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{

public float speed= 6f;

Vector3 movement;
Animator anim;
Rigidbody playerRigidbody;
int floorMask;
float camRayLength=100f; 

void Awake()
 {

    floorMask = LayerMask.GetMask("Floor");

    anim = GetComponent<Animator> ();
    playerRigidbody = GetComponent<Rigidbody> ();

}

void FixedUpdate()
{
    float v = Input.GetAxisRaw ("Vertical");
    float h = Input.GetAxisRaw ("Horizontal");

    Move (h, v);
    Turning ();
    Animating(h,v);

}

void Move(float h,float v)
{

    movement.Set (h,0f,v);

    movement = movement.normalized * speed * Time.deltaTime;

    playerRigidbody.MovePosition (transform.position+movement);
}

void Turning()
{
    Ray camRay = Camera.main.ScreenPointToRay (Input.mousePosition);

    RaycastHit floorHit;

    if(Physics.Raycast(camRay,out floorHit,camRayLength,floorMask))  
    {
        Vector3 playerToMouse = floorHit.point-transform.position ;********
        playerToMouse.y = 0f;

        Quaternion newRotation = Quaternion.LookRotation   (playerToMouse);
        playerRigidbody.MoveRotation (newRotation);
    }
}

void Animating(float h,float v)
{
    bool wakling = h != 0f || v != 0f;  
    anim.SetBool("IsWalking",wakling);
}
}