using UnityEngine;
using System.Collections;
public class Followplayer : MonoBehaviour
{
privateVector3 offset;
privateTransform player;
//Use this for initialization
privatevoid Awake()
{
player = GameObject.FindGameObjectWithTag("Player").transform;
offset =transform.position - player.position;//计算偏移
offset = new Vector3(0,offset.y, offset.z);
}
voidStart()
{
}
//Update is called once per frame
voidUpdate()
{
Vector3beginpos = offset + player.position;
Vector3endpos = player.position + offset.magnitude * Vector3.up;//offset.magnitude为计算长度得到垂直长度
Vector3pos1 = Vector3.Lerp(beginpos, endpos,0.25f);
Vector3pos2 = Vector3.Lerp(beginpos, endpos, 0.5f);
Vector3pos3 = Vector3.Lerp(beginpos, endpos,0.75f);
Vector3[]posarray = new Vector3[]{ beginpos, pos1, pos2, pos3, endpos };//划分成5个角度实现缓动
Vector3targetpos = posarray[0];
for(int i = 0; i < 5; i++)
{
RaycastHit hitinfo;//获取碰撞物体信息判读是否遮挡住人物
if (Physics.Raycast(posarray[i],player.position - posarray[i], out hitinfo))
{
if (hitinfo.collider.tag != "Player")
{
continue;
}
else
{
targetpos =posarray[i];
break;
}
}
else
{
targetpos =posarray[i];
break;
}
this.transform.position = targetpos;
}
}
}
using UnityEngine;
using System.Collections;
public class Followplayer : MonoBehaviour
{
privateVector3 offset;
privateTransform player;
//Use this for initialization
privatevoid Awake()
{
player = GameObject.FindGameObjectWithTag("Player").transform;
offset =transform.position - player.position;//计算偏移
offset = new Vector3(0,offset.y, offset.z);
}
voidStart()
{
}
//Update is called once per frame
voidUpdate()
{
Vector3beginpos = offset + player.position;
Vector3endpos = player.position + offset.magnitude * Vector3.up;//offset.magnitude为计算长度得到垂直长度
Vector3pos1 = Vector3.Lerp(beginpos, endpos,0.25f);
Vector3pos2 = Vector3.Lerp(beginpos, endpos, 0.5f);
Vector3pos3 = Vector3.Lerp(beginpos, endpos,0.75f);
Vector3[]posarray = new Vector3[]{ beginpos, pos1, pos2, pos3, endpos };//划分成5个角度实现缓动
Vector3targetpos = posarray[0];
for(int i = 0; i < 5; i++)
{
RaycastHit hitinfo;//获取碰撞物体信息判读是否遮挡住人物
if (Physics.Raycast(posarray[i],player.position - posarray[i], out hitinfo))
{
if (hitinfo.collider.tag != "Player")
{
continue;
}
else
{
targetpos =posarray[i];
break;
}
}
else
{
targetpos =posarray[i];
break;
}
this.transform.position = targetpos;
}
}
}
以及unet改版
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class Followplayer : MonoBehaviour
{
public float movespeed = 1;
public float rotatespeed = 1;
private Vector3 offset;
public GameObject Player;
private Transform playertransform;
private GameObject[] players;
private int i,pass=0;
private bool isntrue=false;
// Use this for initialization
bool FindPlayer()
{
players = GameObject.FindGameObjectsWithTag("Player");
foreach (GameObject one in players)
{
if (one.GetComponent<SoliderController>().islocal==true)
{
Player = one;
Debug.Log("Find Player");
return true;
}
else Debug.Log("false2");
}
return false;
}
void SetOffset()
{
playertransform = Player.transform;
//player = GameObject.FindGameObjectWithTag("Player").transform;
offset = transform.position - new Vector3(0,0,0);//计算偏移
offset = new Vector3(0, offset.y, offset.z);
}
// Update is called once per frame
void Update()
{
if (playertransform == null)
{
if (FindPlayer())
SetOffset();
}
if (playertransform == null)
{
return;
Debug.Log("false");
}
Vector3 beginpos = offset + playertransform.position;
Vector3 endpos = playertransform.position + offset.magnitude * Vector3.up;//offset.magnitude为计算长度得到垂直长度
Vector3 pos1 = Vector3.Lerp(beginpos, endpos, 0.25f);
Vector3 pos2 = Vector3.Lerp(beginpos, endpos, 0.5f);
Vector3 pos3 = Vector3.Lerp(beginpos, endpos, 0.75f);
Vector3[] posarray = new Vector3[] { beginpos, pos1, pos2, pos3, endpos };
Vector3 targetpos = posarray[0];
for ( i = 0; i < 5; i++)
{
RaycastHit hitinfo;
if (Physics.Raycast(posarray[i], playertransform.position - posarray[i], out hitinfo))
{
if (hitinfo.collider.tag != "Player")
{
continue;
}
else
{
targetpos = posarray[i];
break;
}
}
else
{
targetpos = posarray[i];
//if (i > 0 && i != pass) isntrue = true;
break;
}
}
transform.position = beginpos;
// transform.position = Vector3.Lerp(transform.position,targetpos,Time.deltaTime*movespeed);//插值运算实现相机缓动
//Quaternion nowquaterniom = transform.rotation;
//transform.LookAt(playertransform);
//if(isntrue)
//{
// i= Computer(i);
// Debug.Log(i);
// transform.Rotate(22.5f * i, 0, 0);
//}
//transform.rotation= Quaternion.Lerp(nowquaterniom, transform.rotation, Time.deltaTime * rotatespeed);
}
//int Computer(int i)
//{
// int b = i - pass;
// pass = i;
// return b;
//}
}