unity随笔(1)——基本概括

1.脚本简介

1.1生命周期及常用函数

2.改变物体位置

改变物体位置实际上是修改物体transform组件的position的值

transform常用属性

2.1改变位置的方法

一种是使用translate()函数,逐渐改变,放在update()中

transform.Translate(x,y,z);//x,y,z表示自身的方向,x正方向表示自身的右方向
transform.Translate(1,0,0);//表示沿着右方向移动1个单位
transform.position += new Vector3(1,0,0);//等价于上一行代码

(注:Translate()和修改position的本质区别:Translate()函数默认的是局部坐标系,而修改position的方法是世界坐标系)

另一种是直接指定新的位置

transform.position=new Vector3(1.5f,0,0);

(注:1.5要写成1.5f形式,这是由于c#的语法规定,不带后缀的会自动默认为double类型,这里需要的是float类型;

为什么要加new,是因为position是一个属性,而Vector是一个值类型,且不能写成transform.position.x=1.5f的形式)

由于无法保证稳定的帧率,若要实现每秒移动相同的距离,则要用上Time.deltaTime,它表示两帧之间的间隔

transform.Translate(1*Time.deltaTime,0,0);
transform.position += new Vector3(1*Time.deltaTime,0,0);
Time.timeScale=0;//表示游戏里时间停滞,等于1为正常流逝,等于2为两倍流逝

3.读取和处理输出

3.1获取偏移量

如读取键盘上的WASD值,用户输入在纵轴和横轴的偏移量

void Update()
{
    float v = Input.GetAxis("Vertical");//获取纵轴偏移量,取值范围-1~1
    float h = Input.GetAxis("Horizontal");//横轴
    Debug.Log("纵轴偏移量为:"+v+"   "+"横轴偏移量为:"+h);//打印
}

3.2控制移动

通过简单的乘法就可以将输入的幅度和物体运动联系起来

void Update()
{
    float v = Input.GetAxis("Vertical");
    float h = Input.GetAxis("Horizontal");
    transform.Translate(h*10*Time.deltaTime,0,v*10*Time,deltTime);//10是速度
}

4.触发器

Collider组件中勾选Is Trigger就可实现触发器功能,并不是所有物体进入触发范围

4.1产生触发事件的条件:

后续补充

4.2触发器事件函数:

  • 开始触发(OnTriggerEnter):进入触发范围

  • 触发持续中(OnTriggerStay):在触发范围内

  • 结束触发(OnTriggerExit):离开触发范围

5.案例:控制小球吃金币

5.1控制小球脚本

private float v,h;
private float speed=10f;
private void Update()
{
    v = Input.GetAxis("Vertical");
    h = Input.GetAxis("Horizontal");
    transform.Translate(h*speed*Time.deltaTime,0,v*speed*Time.deltaTime);
}

5.2金币触发脚本

private void OnTriggerEnter()
{
    Destroy(gameObject);
}

(注:多余空的Star()和Update()函数请删除,避免CPU资源消耗)

补充:

头部引入UnityEngine.SceneManagement,就可使用切换场景方法

SceneManager.LoadScene(0);//0表示场景序号
gameObject.SetActive(false);//场景中隐藏这个物体
Quaternion.Slerp (Quaternion a, Quaternion b, float t);
//这可用于创建一个旋转,以基于参数的值 a,在第一个四元数 a 到第二个四元数 b 之间平滑进行插值。
gameObject.tag=="Cube"等价于gameObject.CompareTag("Cube");推荐使用CompareTag

6.通过父子路径获取物体

如果要引用上一级节点,使用两个英文句号“..”即可。

Transform p1 = transform.parent;
Transform p2 = transform.Find("..");//p1与p2相同

7.实现预制体

使用Instantiate()方法对预制体实例化

8.定时创建和销毁物体

8.1定时创建

Invoke(" ",t);//延迟执行,第一个参数是以字符串表示的方法名称,第2个参数表示延迟时间,单位为秒
//写一个创建物体的方法放入Invoke()中

8.2销毁物体

Destroy(gameObject);//在合适时机销毁物体
Destroy(gameObject,0.8f);//延迟销毁
DestroyImmediate(gameObject);//立即销毁物体

9.相机跟随

创建脚本挂在相机上

public Transform followTarget;//跟随的目标
Vector3 offset;
void Start()//场景中需要设置好目标和相机的位置
{
    offset=transform.position-followTarget.position;//算出从目标到相机的向量,作为相机的偏移量
}
void LateUpdate()
{
    transform.position=followTarget.position+offset;//
}

10.协程入门

协程代替大量使用Invoke()

void Start()
{
    StarCoroutine(Timer());//开启协程,协程函数为Timer()
}
IEnumerator Timer()//协程函数
{
    while(true)//不断循环执行,但不会导致死循环
    {
        Debug.Log("测试协程");//打印
        yield return new WaitForSeconds(1);//等待1秒
        Debug.Log(Time.time);//打印当前游戏经历的时间
        yield return new WaitForSeconds(1);//等待1秒
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值