我有一台相机,我用(W,A,S,D)键控制它......
我想要做的是当按下鼠标左键(“Fire1”)时,相机会动画回到第一个位置。
是否可以使用Mecanim进行操作并创建动态动画文件来执行此操作?!
这是我的代码:
void Update ()
{
if (Input.GetKey(KeyCode.W))
{
Cam.transform.Rotate (0, 0, 2);
}
if (Input.GetKey(KeyCode.S) )
{
Cam.transform.Rotate (0, 0, -2);
}
if (Input.GetKey(KeyCode.D))
{
Cam.transform.Rotate (0, 2, 0);
}
if (Input.GetKey(KeyCode.A))
{
Cam.transform.Rotate (0, -2, 0);
}
我的相机位置和开始时的旋转是(0,0,0)但是当我控制我的相机时这些参数会发生变化,所以我希望我的相机在我改变时回到第一个位置(0,0,0)按下鼠标左键......
类似的东西:
if (Input.GetButtonDown("Fire1"))
{
Cam.GetComponent<Animation> ().Play ();
}
答案 0 :(得分:2)
取代动画,你可以平滑相机的移动:
将以下变量添加到脚本中,第一个变量用于控制所需的平滑度:
public float smoothTime = 0.2f;
private Vector3 velocity = Vector3.zero;
然后:
if (Input.GetButtonDown("Fire1")) {
Vector3 targetPosition = new Vector3(0,0,0);
Cam.transform.position = Vector3.SmoothDamp(Cam.transform.position, targetPosition, ref velocity, smoothTime);
}
答案 1 :(得分:2)
从您的代码中,我可以看到您只是更改了相机的旋转。以下是我的解决方案。
它会在开始时保存起始旋转,然后在&#34; Fire1&#34;按下。
但是,此处未处理位置,因为您的代码中没有位置更改。但这个概念是一样的。您可以用类似的方式更改位置。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CamTest : MonoBehaviour {
public float animSpeed = 1.0f;
public Camera Cam;
private Quaternion startRotation;
private bool doRotate = false;
// Use this for initialization
void Start () {
//Cam = GetComponent<Camera> ();
startRotation = transform.rotation;
}
void Update () {
if (Input.GetKey(KeyCode.W))
{
Cam.transform.Rotate (0, 0, 2);
}
if (Input.GetKey(KeyCode.S) )
{
Cam.transform.Rotate (0, 0, -2);
}
if (Input.GetKey(KeyCode.D))
{
Cam.transform.Rotate (0, 2, 0);
}
if (Input.GetKey(KeyCode.A))
{
Cam.transform.Rotate (0, -2, 0);
}
if (Input.GetButtonDown("Fire1")) {
Debug.Log ("Fire1");
doRotate = true;
}
if(doRotate) DoRotation ();
}
void DoRotation(){
if (Quaternion.Angle(Cam.transform.rotation, startRotation) > 1f) {
Cam.transform.rotation = Quaternion.Lerp(Cam.transform.rotation, startRotation,animSpeed*Time.deltaTime);
} else {
Cam.transform.rotation = startRotation;
doRotate = false;
}
}
}