2017-04-23 7 views
0

私は教育目的のためだけにテンプル・ラン・ゲーム・プロジェクトに取り組んでいます。そして私はキャラクターに少し集中してキャラクターにその位置を変えなければならないスクリプトを作成しました。寺院のように、カメラがゲームのスクリプトのときにゆっくりとプレーヤーに向かっているとき。ここに私のスクリプトですユニティカメラのアニメーションが機能しませんか?

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); 
     } 

    } 
} 

答えて

0

あなたは近くにいるが、Lerpが正常に動作するためにはトランジション値が継続的に増加する必要があります。

transition = Time.deltaTime* 1/animationduration; 

transition += Time.deltaTime* 1/animationduration; 
へ:この行を変更してみてください
1

次の行は

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

ルックアット()メソッドは、型パラメータ、ないの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

関連する問題