这是我使用附加到主摄像头的脚本。 我可以将相机旋转360度。但是角色(ThirdPersonController)始终处于空闲状态。
我想在旋转相机的同时旋转角色。
我遇到的一个问题是我可以将它旋转到地面下一点点。 如何将相机旋转限制在地面/地形水平? 这是截图我的意思是相机在地形/字符下:
这是脚本代码: 我试图添加这一行来用相机旋转角色,但它没有这样做,它什么也没做。
val filtered_users = users.filter(_.length == x || _.length == x - 1 || _.length == x + 1)
剧本:
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.faces</artifactId>
<version>2.2.13</version>
</dependency>
我创建了一个新的小干净脚本,应根据相机旋转旋转角色。上面的脚本附在主摄像头上。
现在我有了ThirdPersonController,我已经附加了一个脚本:
transform.rotation = Quaternion.RotateTowards(transform.rotation, rotation, rotationSpeed);
这个脚本运行正常。还有旋转相机的上面的脚本。 但是,一旦我连接到ThirdPersonController,新的小脚本应该旋转角色,所以首先它不旋转角色,然后是让角色向前走,整个ClickToMove脚本运行不正常。
using UnityEngine;
using System.Collections;
[AddComponentMenu("Camera-Control/Mouse Orbit with zoom")]
public class MouseOrbitImproved : MonoBehaviour
{
public Transform target;
public float distance = 5.0f;
public float xSpeed = 120.0f;
public float ySpeed = 120.0f;
public float yMinLimit = -20f;
public float yMaxLimit = 80f;
public float distanceMin = .5f;
public float distanceMax = 15f;
private Rigidbody rigidbody;
float x = 0.0f;
float y = 0.0f;
public float rotationSpeed = 5f;
// Use this for initialization
void Start()
{
Vector3 angles = transform.eulerAngles;
x = angles.y;
y = angles.x;
rigidbody = GetComponent<Rigidbody>();
// Make the rigid body not change rotation
if (rigidbody != null)
{
rigidbody.freezeRotation = true;
}
}
void LateUpdate()
{
if (target)
{
x += Input.GetAxis("Mouse X") * xSpeed * distance * 0.02f;
y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
y = ClampAngle(y, yMinLimit, yMaxLimit);
Quaternion rotation = Quaternion.Euler(y, x, 0);
distance = Mathf.Clamp(distance - Input.GetAxis("Mouse ScrollWheel") * 5, distanceMin, distanceMax);
RaycastHit hit;
if (Physics.Linecast(target.position, transform.position, out hit))
{
distance -= hit.distance;
}
Vector3 negDistance = new Vector3(0.0f, 0.0f, -distance);
Vector3 position = rotation * negDistance + target.position;
transform.rotation = rotation;
transform.position = position;
transform.rotation = Quaternion.RotateTowards(transform.rotation, rotation, rotationSpeed);
}
}
public static float ClampAngle(float angle, float min, float max)
{
if (angle < -360F)
angle += 360F;
if (angle > 360F)
angle -= 360F;
return Mathf.Clamp(angle, min, max);
}
}
答案 0 :(得分:0)
我想只需将 yMinLimit 值调整为 0 或更低就足以限制相机的垂直角度。
关于你的角色轮换,你应该在他身上有一个小脚本,叫做:
Vector3 characterPosition = transform.position;
Vector3 cameraPosition = Camera.main.transform.position;
Vector3 delta = new Vector3(characterPosition.x - characterPosition.x, 0.0f, characterPosition.z - characterPosition.z);
transform.LookAt(delta);
我将 delta 向量的 y 值设置为0,因此只有&#34;水平&#34;将考虑相机的方向。