if(Vector3.Distance(transform.position,rightPos.position)> maxDis){
Vector3 pos = (transform.position - rightPos.position).normalized;
pos*=maxDis;
transform.position = pos + rightPos.position;
}
if(Vector3.Distance(transform.position,rightPos.position)> maxDis){
Vector3 pos = (transform.position - rightPos.position).normalized;
pos*=maxDis;
transform.position = pos + rightPos.position;
}
距离限定
①求两点间的方向:normalized;
②求两点间的直线距离 Vector.Distance()
Distance()//求两点的距离
normalized//归一化矢量,
单位化向量
获取2点之间的距离 然后 用normalized
单位化向量 返回长度为1 点向量,包含单位的方向。
Isclick 鼠标跟随
之后需统一坐标系
调整最大位置限定
8、距离限定
向量单位化(,,).normalized;
再利用单位化后的向量去x你想要的最大距离
7、将鼠标位置转化为物体位置:
transform.position=Camera.main.ScreenToWorldPoint(Input.mouseposition);
screen是以左下角为坐标原点,世界坐标是以中间点为坐标原点,故用此函数,
转化后物体在2D平面z轴被添加了摄像机的轴,所以还要减掉Camera.main.transform.position.z
限制最大距离。
和一个具体的位置,进行限制。
如何进行限制,就是,当小鸟位置和规定位置之间距离大于限定位置,获得它的单位话向量,然后*限定长度,然后重新从另个一个点出发,得到小鸟的位置点。。
Vector3.Distance();//计算两向量之间位移
向量.normalized; //向量单位化
Vector3 是一个类,返回值,入口值都是x,y,z
这里新建的rightPos一定要注意,在Hierarchy面板直接新建empty object的话默认会有z轴的值,这样的话会影响script里的计算,必须把新建的object 的z轴设为0
private bool isClick=false;
private void OnMouseDown(){
isClick=true;
}
private void OnMouseUp(){
isClick=false;
}
private void Update(){
if(isClick){
//鼠标一直按下的跟随的位置变化
transform.position=Camera.Main.ScreenToWorldPoint(Input.mousePosition);
//设置规定的跟随长度
transform.position+=new Vector3(0,0,10);
//计算一个长度
transform.position+=new Vector3(0,0,-Camera.main.transform.position.z);
}
}
想要设置物体的拉拽的距离,给我们的物体设置一个字对象,回到脚本里面,新建两个变量。
private Transform rightPos;
private float maxDis;
在我们的判断跟随中再去做一次判断
用的的方法if(Vector3.Distance(tranform.position,rightpost.position)>maxDis)//判断两个物体间的距离限定{
//我们只需要获取他的方向,长度我们会设置
Vector3 pos=(transform.position-rightPost.postion).normalized;//单位化向量
pos*=maxDis;//最大长度向量
transform.position=pos+rightPos.position;
}
Vector3.Distance(a,b);//获取两点间距离
position.normalized;//向量化,只要方向
public Transform rightPos;
public float maxDis=3;
if(vector3.Distance(transform.position,rightPos.postion)>maxDis){//进行位置限定
vector3 pos=(transform.positon-tightPos.position).onrmalized;//单位化向量
pos*=maxDis;//最大长度的向量
transform.position=pos+rightPos.position;
}
记一下 3d转2d的摄像机的投影改 正交是必须勾上的
另一种思路:
transform.position = rightPos.position + Vector3.ClampMagnitude(transform.position-rightPos.position, maxDis);
Vector3.Distance
计算里两个向量之间的位移,这个位置是一个长度位置,是float类型的一个正数
.normalized 单化向量,这个不会改变原来的值
OnMouseDown
OnMouseUp
单位化向量
最大距离限制
单位化向量 。normalizzed
学习到任务7,任务8没看懂 10-30