C# 如何根据单击的鼠标光标位置旋转播放器?
然后第一个原始移动播放器我确实旋转了播放器,但以我设置的特定角度旋转,例如:C# 如何根据单击的鼠标光标位置旋转播放器?,c#,unity3d,C#,Unity3d,然后第一个原始移动播放器我确实旋转了播放器,但以我设置的特定角度旋转,例如: void Update() { MovePlayer(); } 但我希望它旋转到鼠标光标位置的角度,而不是走到那里,或者移动到那里只是旋转并面向鼠标光标位置。因此,我尝试将MovePlayer方法更改为此,但这是错误的,它没有任何作用: private void MovePlayer() { if (Input.GetMouseButtonDown(0)) {
void Update()
{
MovePlayer();
}
但我希望它旋转到鼠标光标位置的角度,而不是走到那里,或者移动到那里只是旋转并面向鼠标光标位置。因此,我尝试将MovePlayer方法更改为此,但这是错误的,它没有任何作用:
private void MovePlayer()
{
if (Input.GetMouseButtonDown(0))
{
targetAngles = transform.eulerAngles + 85.0f * Vector3.up;
StartCoroutine(TurnObject(transform, transform.eulerAngles, targetAngles, smooth));
}
}
及
第一个问题是,当我将鼠标光标指向天空时,因为它太远,玩家没有旋转,然后当我指向远处的某个位置时,玩家跳到该位置。不知道怎么解决。也许可以计算天空(在我的例子中是天空框)的距离,这样它在指向天空时也会旋转
第二个问题是,当我将鼠标光标指向我自己的身体时,它正在原地快速旋转。我怎样才能避免呢?还是解决它
我试图改变路线:
void Update()
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit, 100000))
{
transform.LookAt(hit.point);
}
}
到
但这并没有解决问题。可能问题是我的天空是一个天空盒,我拖到了场景窗口,所以它不是一个对象
我的skybox是我拖到场景窗口的材质,所以这可能是当鼠标光标指向天空时我无法旋转播放器的问题。有什么解决方案吗?您使用的是第一人称摄像头、第三人称摄像头、鸟瞰摄像头还是…?@Abion47 ThirdPersonController是我的播放器,主摄像头就在播放器后面,但它不是播放器的孩子,而是在一般的层次结构中。我在播放器上移动鼠标时设法解决了这个问题。我刚刚在注视线之前添加了这条线:if(hit.collider.name!=“ThirdPersonController”)现在我必须解决天空的问题。你使用的是第一人称摄影机、第三人称摄影机、鸟眼摄影机、,或者…?@Abion47 ThirdPersonController是我的播放器,主摄像头就在播放器后面,但它不是播放器的孩子,而是在一般的层次结构中。当我在播放器上移动鼠标时,我设法解决了这个问题。我刚刚在LookAt行之前添加了这一行:if(hit.collider.name!=“ThirdPersonController”),现在我必须解决天空的问题。
IEnumerator TurnObject(Transform ship, Vector3 startAngle, Vector3 endAngle, float smooth)
{
float lerpSpeed = 0;
isSpinning = true;
while (lerpSpeed < 1)
{
ship.eulerAngles = Vector3.Lerp(startAngle, endAngle, lerpSpeed);
lerpSpeed += Time.deltaTime * smooth;
yield return null;
}
startPositon = ship.position;
isSpinning = false;
}
void Update()
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit, 100000))
{
transform.LookAt(hit.point);
}
}
if (Physics.Raycast(ray, out hit, 100000))
if (Physics.Raycast(ray, out hit))