【问题标题】:Unity Camera animation not working?Unity 相机动画不起作用?
【发布时间】:2017-04-23 19:06:07
【问题描述】:

我正在开发某种寺庙运行游戏项目,只是为了教育目的。我创建了一个脚本,它应该从高处开始关注角色,然后将其位置更改为角色。就像在游戏脚本中当相机慢慢地向玩家倾斜时在寺庙奔跑中一样。这是我的脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraMotor : MonoBehaviour {
    private Vector3 ofset;
    private Vector3 characterposition;

    private float transition =0.0f;
    private float animationduration = 2.0f;
    private Vector3 animationoffset = new Vector3(0,2f,2f);
    void Start () {
        ofset = GameObject.FindObjectOfType<CharacterController> ().transform.position - this.transform.position;
    }

    // Update is called once per frame
    void Update () {
        characterposition = GameObject.FindObjectOfType<CharacterController> ().transform.position - ofset;
        characterposition.x = 1.3f;
        characterposition.y = Mathf.Clamp (characterposition.y, 3f, 5f);
        if (transition > 1.0f) {
            this.transform.position = characterposition;
        } else {
            this.transform.position = Vector3.Lerp (characterposition + animationoffset, characterposition, transition);
            transition =  Time.deltaTime* 1 / animationduration;
            this.transform.LookAt (characterposition, Vector3.up);
        }

    }
}

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    下面的行是错误的

    this.transform.LookAt (characterposition, Vector3.up);
    

    LookAt() 方法需要 Transform 类型参数,而不是 Vector3。尝试使用这些

    private Vector3 ofset;
    private Vector3 characterposition;
    private CharacterController characterCon;
    
    private float transition =0.0f;
    private float animationduration = 2.0f;
    private Vector3 animationoffset = new Vector3(0,2f,2f);
    
    void Start () {
        ofset = GameObject.FindObjectOfType<CharacterController> ().transform.position - this.transform.position;
        characterCon = GameObject.FindObjectOfType<CharacterController> ().GetComponent<CharacterController>();
    }
    
    void Update () {
    
        characterposition = characterCon.transform.position - ofset;
        characterposition.x = 1.3f;
        characterposition.y = Mathf.Clamp (characterposition.y, 3f, 5f);
        if (transition > 1.0f) {
            this.transform.position = characterposition;
        } else {
            this.transform.position = Vector3.Lerp (characterposition + animationoffset, characterposition, transition);
            transition =  Time.deltaTime * 1 / animationduration;
        }
    
        this.transform.LookAt (characterCon.transform, Vector3.up);
    }
    

    此外,您在每一帧调用 FindObjectOfType 方法都会导致性能不佳。 看看下面的链接LookAt

    【讨论】:

      【解决方案2】:

      您已经很接近了,但您的转换值需要不断增加,您的 Lerp 才能正常工作。尝试更改此行:

      transition =  Time.deltaTime* 1 / animationduration;
      

      transition +=  Time.deltaTime* 1 / animationduration;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-16
        • 1970-01-01
        • 2015-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多