// Update is called once per frame void LateUpdate() { if (!isInit && character != null) { isInit = true; Start(); } if (character == null) { return; } lastVelocityDir += (character.position - lastPos) * 8; lastPos = character.position; lastVelocityDir += character.forward * Time.deltaTime; lastVelocityDir = lastVelocityDir.normalized; Vector3 horizontal = transform.position - character.position; Vector3 horizontal2 = horizontal; Vector3 vertical = character.up; Vector3.OrthoNormalize(ref vertical, ref horizontal2); if (horizontal.sqrMagnitude > horizontal2.sqrMagnitude) { horizontal = horizontal2; } transform.position = posFollow.Update( character.position + horizontal * Mathf.Abs(positionVector.z) + vertical * positionVector.y, Time.deltaTime ); horizontal = lastVelocityDir; Vector3 look = lookFollow.Update(character.position + horizontal * lookVector.z - vertical * lookVector.y, Time.deltaTime); transform.rotation = Quaternion.FromToRotation(transform.forward, look - transform.position) * transform.rotation; }
// Use this for initialization void Start() { positionVector = new Vector3 (0, 2, 4); lookVector = new Vector3 (0, 0, 1.5f); posFollow = new SmoothFollowerObj (0.5f, 0.5f); lookFollow = new SmoothFollowerObj (0.1f, 0.0f); posFollow.Update (transform.position, 0, true); lookFollow.Update (character.transform.position, 0, true); lastVelocityDir = character.transform.forward; lastPos = character.transform.position; }
private Vector3 lastPos; //之前移动的目标点位置 // Use this for initialization void Start() { //anim = this.GetComponent<Animator>();//获取动画控制器 posFollow = new SmoothFollowerObj(0.5f, 0.5f); lookFollow = new SmoothFollowerObj(0.1f, 0.0f); posFollow.Update(transform.position, 0, true);//初始化负值 lookFollow.Update(player.transform.position, 0, true); positionVector = new Vector3(0, 0.5f, 1.7f); lookVector = new Vector3(0, 0, 1.5f); lastVelocityDir = player.transform.forward; lastPos = player.transform.position; }
// Use this for initialization void Start() { if (character == null) { return; } positionVector = new Vector3(0, 2, 4); lookVector = new Vector3(0, 0, 1.5f); //posFollow = new SmoothFollowerObj(0.5f, 0.5f); //lookFollow = new SmoothFollowerObj(0.1f, 0.0f); posFollow = new SmoothFollowerObj(0.5f); lookFollow = new SmoothFollowerObj(0.1f); posFollow.Update(transform.position, 0, true); lookFollow.Update(character.position, 0, true); lastVelocityDir = character.forward; lastPos = character.position; }