所以我有一个球员(胶囊),我希望他的底部面对立方体的中心。问题是我只能在失去对前向矢量的控制时才能使它工作,我需要我的前向矢量来告诉我的玩家他可以移动的位置2.此外,看到玩家游戏在Y轴上旋转而没有输入也不是很好一个控件。这是hapenning:
https://www.youtube.com/watch?v=00BIhBHSSKQ&feature=youtu.be
问题在于它在1轴上移动时确实指向了立方体的中心,但是当在另一个轴上移动时,它开始表现得很奇怪。这是代码:
using UnityEngine;
using System.Collections;
public class test : MonoBehaviour {
public Transform ground;
public Transform player;
void Update()
{
Landing();
}
public void Landing()
{
Vector3 dir = ground.position - player.position;
Quaternion rot = Quaternion.LookRotation(player.forward, -dir);
player.rotation = rot
}
}
如果我添加此代码,但它可以工作,但我失去了对我前进方向的控制,它只是一直在旋转:
Quaternion bla2 = Quaternion.LookRotation(player.right, -dir);
答案 0 :(得分:1)
我想把底部指向太空中的一个点。
我认为有更简单的方法可以完成它。如果我理解正确,您可能希望将播放器的bottom
向量与另一个给定向量dir
对齐吗?好吗?
如果我是对的,你可以简单地使用这个脚本:
player.trandform.bottom = dir;
因此,您无需重新计算其旋转对象。此外,可以按照这种方式对任何对象的forward
,right
,left
,...方向进行操作。
注意:您可能想要为此轮播设置动画。为此,您可以使用Vector3的Lerp
/ Slerp
方法在这两个向量之间平滑过渡。
player.transform.bottom = Vector3.Lerp(player.transform.bottom, dir, Time.deltaTime * rotateSpeed);
答案 1 :(得分:0)
喜欢这样吗?
obj.Translate(speed * Vector3.forward * Time.deltaTime);
您说要使用自定义y
:
Vector3 direction = obj.forward;
direction.y = input.GetAxis("Vertical"); // < --- however you are retieving your input i have no idea
obj.Translate(direction.normalized * speed * Time.deltaTime);