//定义一个变量来引用要跟随的对象
public Transform TargetObj = null;
//定义一个对象引用角色的animator组件
protected Animator animator;
//定义一个角色控制器变量引用角色控制器
protected CharacterController controller;
//定义一个时间变量,主要用在使用Animator组件设置浮点函数
private float SpeedDempTime = 0.25f;
private float DirectionDempTime = 0.25f;
void Start()
{
//对前面定义的两个组件类型的变量animator和controller进行初始化
animator = GetComponent<Animator>();
controller = GetComponent<CharacterController>();
if (animator) //当组件存在时
{
//对animator组件中的一个属性animator 和 speed 进行随机化设置
//animator 和speed 的作用就是控制animator动画的播放
animator.speed = 1 + Random.Range(-0.4f, 0.4f);
}
}
// Update is called once per frame
void Update()
{//控制角色跟随的主要逻辑
if (animator && TargetObj)
{
//是跟随者跟随的目标一起运动,同时两者之间保持一定的距离之内
if (Vector3.Distance(TargetObj.position, animator.rootPosition) > 3)//是一个物体跟随另一个物体, 判断两个物体之间保持在硬顶的距离之内
{
animator.SetFloat("Speed", 1, SpeedDempTime, Time.deltaTime);
//定义俩个矢量
Vector3 curentDir = animator.rootRotation * Vector3.forward; // 定义角色的正方向 也就是角色的前方
//通过计算判断两者之间的位置关系
Vector3 wanterDir = (TargetObj.position - animator.rootPosition).normalized;
//if else语句:判断物体和当前物体之间的位置关系,主要用到了点积和差积的矢量的操作 来进行方向的判断
if (Vector3.Dot(curentDir, wanterDir) > 0)//当物体大于0 也就是物体的前方
{
//通过差积来判断左右
animator.SetFloat("Direction", Vector3.Cross(curentDir, wanterDir).y, DirectionDempTime, Time.deltaTime);
}
else
{
animator.SetFloat("Direction", Vector3.Cross(curentDir, wanterDir).y > 0 ? 1 : -1, DirectionDempTime, Time.deltaTime);
}
}
else
{
animator.SetFloat("Speed", 0, SpeedDempTime, Time.deltaTime);
}
}
}
Unity3D跟随脚本
精选 转载上一篇:NGUI各个基本组件总结
下一篇:Unity3D小地图制作脚本
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Android平台Unity3D下如何同时播放多路RTMP|RTSP流?
技术背景好多开发者,提到希望在Unity的Android头显终端,播放2路以上RTMP或RTSP流,在设备性能一般的情况下,对Unity下的RTMP|RTSP播放器提出了更高的要求。实际上,我们在前几年发布Unity下直播播放模块的时候,就已经支持了Android多实例播放RTMP|RTSP,随着大家对这块的技术诉求和性能要求越来越高,我们需要持续考虑如何低资源占用的播放多实例流。实现思路目前,我
Unity3D rtmp播放器 Unity3D rtsp播放器 unity rtsp播放器 unity rtmp播放器 大牛直播SDK -
Unity3D下采集camera场景并推送RTMP服务实现毫秒级延迟直播
技术背景好多开发者,希望我们能够分享下如何实现Unity下的camera场景采集并推送rtmp服务,然后低延迟播放出来。简单来说,在Unity 中实现采集 Camera 场景并推送RTMP的话,先是获取 Camera 场景数据,通过创建 RenderTexture 和读取图像数据到 Texture2D。选择选择合适的RTMP推送库或SDK,并设置推流地址和初始化推流。然后说明了推送数据时需要将图像
Unity3D rtmp推送 unity rtmp推流 unity rtmp unity采集camera rtmp 大牛直播SDK