我的Unity学习笔记----------API常用方法和类详解(三)

十三.鼠标相关事件函数 OnMouseXXX


OnMouseDown : 按下
OnMouseEnter: 移到上面

OnMuseDrag:拖拽(按住)
OnMouseExit :移开

OnMouseUp : 抬起
OnMouseOver: 在上面(每帧检测)

ps:在物体A上按下鼠标,拖到物体B上抬起鼠标,此时执行的抬起指分是物体A的抬起指令

OnMouseUpAsButton:类似于检测鼠标“单击”,只有当按下和抬起在同-物体上时才会在鼠标抬起时触发


十四.Mathf类(相当于一个工具类,静态方法)


1. 常量:
Deg2Rad :角度转化为弧度
Rad2Deg :弧度转化为角度

Epsilon:超级小但比0大的小数(可以忽略不计)
PI :π

Infinity:无穷大,最大整数
NegativeInfinity:无限小

2. Clamp限定方法

Abs:取绝对值

Ceil:向上取整(如10.2=11) 返回float型

CeilToInt: 向上取整 返回int型

Clamp: 夹紧 (float value,float min,float max)

Value > max返回max, Value < min返回min (把一个值限定在范围内)

min< Value < max ,返回Value 即控制返回值在min和max之间

(例子:控制Cube在一个位置区间内运动 [动画] )

Cube.position=new Vector3(Mathf.clamp(Time.time,1.0F,3.0F),0,0);

((例子:控制玩家血量最大不超过100最小不超过0)

Private int hp=100;

Void TakeDamage( ){ 

hp-=9;

hp=Mathf.Clamp(hp,0,100);}

Clamp01 把一个值限定在0到1之间

3. Clamp常用方法

ClosestPowerOfTwo: 求2的x次方(2的Power次方), 然后取得离2的平方序列中最近的数

DeltaAngle :求两个角度之间的最短的差(最小夹角)

Floor :向下取整 (如5.4=5) 返回float型

FloorToInt :向下取整 返回int型

Lerp:差值运算

Max:取最大值
Min: 取最小值

Pow(float f,floatP) : 取得f的P次方

Sqrt(float f): 取f的平方根

4. 差值运算

Lerp(min, max, t) t是一个比例

当t<0时输出min , t> 1时输出max.

0<t<1时 输出min+(max-min)t

例子:运用在物体移动上(从一个位置移动到另一个规定位置)

Cube.position= new Vector3(0,0,0)

Void Update( ) {

float_x=cube.position.x;

float newX = Mathf.Lerp(x,10,0.lf)

//原始位置X,目标位置10,比例为0.1

Cube.position = new Vector3(newX,0,0);

//因为写在Update里,相当于每帧执行一次}

特点:变化先快后慢

但是lerp的返回值永远都不能到达目标值,只能无限接近于

5. LerpAngle 根据角度进行差值运算

6. MoveTowards(float current,floattarget,float maxDelta)

向某个方向移动 当前值 目标值 移动间距

与Lerp使用方法相似,但在(min,max,t)中,返回值是min+t

即MoveTowards为匀速移动,但也不会超过目标值

float newX=Mathf.MoveTowards(x,10,Time.deltaTime*speed)

Ps:如果t<0,物体就会远离目标值

7. PingPong方法实现乒乓球的来回运动效果

cube.position=new Vector3(Mathf.PingPong(Time.Time*speed,10),0,0);

PingPong (a,b) a是运动速度,b是目标值

规定初始值为0,在0到b之间往返匀速运动


十五. Input类


  1. GetkeyDown / Getkey / GetkeyUp (类比OnMouseXX)

  2. GetMouseButton 监测鼠标按键事件
    Input.GetMouseButton(0)
    左0,右1,中2
    GetMouseButtonDown/ GetMouseButton/ GetMouseButtonUp

  3. GetButtonDown GetButton GetButtonUp 虚拟按健
    打开InputManager组件来设置虚拟按键的名字,对应键等属性
    (Edit→Project Settings→Input )
    Input.GetButtonDown(“虚拟键nane”)
    Negative Buten/Positive Button “轴的两端”
    Alt Negative Button /Alt Positive Button 备用键

  4. Alt Negative Button 按下由1渐变到0
    Alt Positive Button 按下由0渐变到1
    Input.GexAxis("") 实现加减速,控制运动

  5. Input.GexAxisRaw 无渐变,返回值只有0,1,-1三个
    所队没有加减速的过程而只有固定的速度

  6. GetTouch ( easytouch 插件)

  7. 静态变量
    onykey onykeydown 检测是否有任何键按下
    mousePosition 获取到鼠标在屏幕上的像素位置
    (三维坐标,以像素为单位,屏幕左下角为原点)


十六. Vector2 表示二维向量或二维坐标


  1. 静态变量 down(0,-1)
    left(-1,0) one(1,1)
    up(0,1) right(1,0)
    zero(0,0)

  2. magnitud 取得向量的长度
    normalized 对向量进行单位化,即让向量方向保持不变,长度变为1
    获取值后改变值而不对向量本身产生影响
    sqrMagnitude 取得向量还未开平方的值(x²+y²)
    可以在比较几个向量长度时使用,达到优化性能的效果

  3. 构造方法:new Vector2(x,y)

  4. Vector2是一个结构体而不是类(还有Vector3)
    对象是引用类型,里边的成员可从直接修改。但结构体是值类型,只能进行整体修改。
    如果想要修改一个坐标的x而使y和z不变,要先得到这个位置,然后再修改里边的X,最后把这个值整体赋值给position

thansform.position = new Vector3(3,3,3);
Vector3 pos=transform.position;
Pos.x=10;
Transform.position= pos;
//向量是结构体,是值类型,要整体赋值
  1. 公开方法
    Eguals 判断两个向量是否相等 (当x=x,y=y时返回ture)
    Normalize 将向量单位化,对向量本身产生影响 (无返回值)
    对自身进行操作,方向不变
    Set 对x,y进行赋值
    ToString 转变成字符串,进行格式化输出

  2. 静态方法
    Angle 取得两个向量之间的夹角
    ClampMagnitude(Vector2,float) 把一个向量的长度限定在float内
    Distance 取得一个向量的长度
    Lerp(Vector2a,Vector2b,float t)
    对向量ab的x、y轴分别进行差值运算 (a.X,b.x) (a.y,b.y)
    (当t>1时输出b)
    LerpUnclamped(Vector2a,Vector2b,floatt)
    在不限定范围的情况下按比例做差值运算
    Max(Vector2a,Vector2b) 取长度最大的向量值
    Min(Vector2a,Vector2b) 取长度最小的向量值
    MoveTowards(当前值,目标值,移动速度) 匀速向目标移动


十七. Vector3 (与Vector2相似)


  1. 静态变量
    (Vector2有的都有)
    back(0,0,-1)和forward(0,0,1)

  2. Crass 差乘运算:向量a与向量b进行差乘,得到方向与向量a.b所形成平面垂直的新向量Result
    左手法则 (大拇指为a,食指为b,中指为Result)
    Cross(Vector3 a,Vector3 b) ab和ba结果不同

  3. Project(Vector3 vector,Vector3onNormal)
    返回值=vector在onNormal方向上得到的一个投影
    Reflect(Vector3 inDirection,Vector3 inNormal); 返射
    出射方向 、 入射方向 、 法线
    Slerp 按夹角进行差值运算 (由方向a指向方向b) 用于做转向
    位置差值用lerp,方向差值用Slerp

  4. 对向量的加减乘除操作


十八. 使用Random生成随机数


Random.Range(a,b) 静态方法 随机生成a到b之间的数字(整数)

生成的整数范围不包含最大值,但包含最小值

生成随机小数:Random.Range(af.bf)

InitState(int seed) “种子”控制算法随机数(伪)序列

如果“种子”相同,则产生的随机数序列顺序也相同

如何让“种子“不断变化从而产生不同序列的随机数?

Random.InitState((int)System.DateTime.Now.Ticks);  

把时间作为“种子”

或者可以干脆不写InitState,系统会在每次运行时重新初始化,保证每次生成的随机数序列的顺序都不同

Random.value 随机生成一个0到1之间的小数

例,得到一个随机颜色:

Return new Color(Random.value,Random.value,Random.vualue);

Random.InitState 获取该“种子”的随机数序列的当前状态,以便在当前位置继续获取序列里的随机数

rotation 得到一个随机朝向

insideUhitCircle 在某个位置周围方圆一米的范围内随机生成一个位置

(返回二维向量)

insideUnitSphere (同上)在球体内随机生成三维坐标


十九. 四元数Quaternion 结构体


Rotation中的x和z轴都是围绕自身的轴进行旋转,但y轴是:当y轴与世界坐标的y轴平行时,围绕y轴自身旋转;当y轴不与世界坐标的y轴平行时,围绕世界坐标的y轴旋转

eulerAngles = new Vector3(x,y,z) 欧拉角

Rotation是四元数

把欧拉角转换为四元数:

Cube.rotation=Quaternion.Euler(new Vector3(x,y,z));

//x,y,z为角度

把四元数转化为欧拉角: cube.rotation.eulerAngles


二十. Quaternion中的LookRotation方法


控制玩家看向敌人的方向

例子:

Public Transform cube;

Public Transform player;

Public Transform enemy;

Void Update( ) 

{

if (Input.GetKeyDown(KeyCode.Space))

          {

Vector3 dir = enemy.position - player.position;

            dir.y = 0;

//控制enemy和player在同一平面(忽略二者之间在y方向上的差值)
//使player在看向enemy时只发生平面转动而不必“弯腰”

            Player.rotation=Quaternion.LookRotation(dir);}

}

二十一. Quaternion中的Lerp和Slerp差值运算


上个例子:

Void Update( ) 

{

Vector3 dir = enemy.position - player.position;

           
dir.y = 0;

       Quaternion target= Quaternion.LookRotation(dir);           
Player.rotation=Quaternion.Slerp(player.rotation,target,

Time.deltaTime);}

}

二十二. Rigidbody ( 继承自Component)


  1. .CenterOfMass 取得重心
    .freezeRotation 冻结旋转
    可以通过钢体组件修改物体的position和rotation,并且比通过Transform修改更快、性能更好

  2. Rgidbody.MovePosition(Vector3 position) 目标位置
    让钢体从现有位置移动到目标位置更加平滑
    从一个位置移动到另一个位置:直接使用Rigidbody.position设置属性
    持续移动:使用Rigidbody.MovePosition,更加平滑

  3. 旋转Rigidbody.rotation
    持续旋转: Rigidbody.MoveRotation

  4. Rigidbody. AddForce(Vector3.forward*force)
    给物体施加一个力(如推)
    方向×力


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值