我想像普通的第三人称射击游戏一样,使用moverotation沿主相机的方向旋转对象,但是我不知道如何设置四元数值
List<string>
答案 0 :(得分:1)
我使用协程进行平滑旋转。我用Quaternion.LookRotation做这份工作。
因此您指示要查看的对象的位置以及动画的持续时间。在这里,您要将脸部旋转到主摄像头
StartCoroutine(SmoothRotation(Camera.main.transform, 3f));
:
:
IEnumerator SmoothRotation(Transform target, float duration)
{
float currentDelta = 0;
var startrotation = transform.rotation;//use your rigisbody if you want here i use the gameobject
var LookPos = target.position - transform.position;
var finalrot = Quaternion.LookRotation(LookPos);
while (currentDelta <= 1f)
{
currentDelta += Time.deltaTime / duration;
transform.rotation = Quaternion.Lerp(startrotation, finalrot, currentDelta);//
yield return null;
}
transform.rotation = finalrot;
}
如果要(在运行时在场景中)看到摄像机指向的位置,只需在update()中添加以下代码:
Debug.DrawRay(Camera.main.transform.position, Camera.main.transform.TransformDirection(Vector3.forward) * 10f, Color.black);
如果您要指向同一方向,则只需在SmoothRotation方法中更改Finalrot的线即可:
var finalrot = Camera.main.transform.rotation;
您不需要计算LookPos
对于您的疯狂旋转问题,我建议您重置x和z旋转
direction = hit.transform.position - transform.position;
Quaternion rotation = Quaternion.LookRotation(direction);
rotation.x = 0f;
rotation.z = 0f;
使用spere内的光线投射检测物体所需的技巧:Physics.OverlapSphere:使用可选参数layermask
时,可以选择要投射的物体private void DetectEnemy(Vector3 center, float radius)
{
var hitColliders = Physics.OverlapSphere(center, radius );
for (var i = 0; i < hitColliders.Length; i++)
{
print(hitColliders[i].name + "," + hitColliders[i].transform.position);
// collect information on the hits here
}
}
答案 1 :(得分:0)
我用相机创建了一个射线投射,我想将刚体旋转到该射线投射指向的位置,但是如果我启动一个单位,它会疯狂旋转。有什么问题吗?
with open('file2.txt') as f:
data = [f.readline().rstrip().split(' ') for x in range(4)]
# print(data)
array1, array2, array3, array4 = data
count = 1
for i in array1:
val = int(i)
# print(val)
if count == 1:
val1 = val
elif count == 2:
val2 = val
elif count == 3:
val3 = val
elif count == 4:
val4 = val
count += 1
count = 1
for i in array2:
val = int(i)
# print(val)
if count == 1:
val5 = val
elif count == 2:
val6 = val
elif count == 3:
val7 = val
elif count == 4:
val8 = val
count += 1
for i in array3:
val = int(i)
# print(val)
if count == 1:
val9 = val
elif count == 2:
val10 = val
elif count == 3:
val11 = val
elif count == 4:
val12 = val
count += 1
for i in array4:
val = int(i)
# print(val)
if count == 1:
val13 = val
elif count == 2:
val14 = val
elif count == 3:
val15 = val
elif count == 4:
val16 = val
count += 1
print(val1, val2, val3, val4)
print(val5, val6, val7, val8)
print(val9,val10,val11,val12)
print(val13,val14,val15,val16)
答案 2 :(得分:0)
添加一个字符控制器组件,就是为了这个目的。参见:
https://docs.unity3d.com/Manual/class-CharacterController.html