• Unity学习疑问记录之保卫伦敦塔学习体会


    1.生成的prefab如果要产生反向:

         Instantiate(Rocket, rocketPosition.position, Quaternion.Euler(new Vector3(0,0,180f)))

    2. Input.GetAxis("Horizontal")的使用,返回-1~+1之间的数

        按键盘左右键可以得到不同的数,长按是+1或-1,按得越久,数字越大

    3. 数学的应用

      Mathf.Sign(f)的使用

        返回 f 的符号,当 f 为正或为0返回1,为负返回-1。

        Mathf.clamp(float value,float min,float max);

        限制value的值在min和max之间, 如果value小于min,返回min。 如果value大于max,返回max,否则返回value

        Mathf.Lerp(float from,float to,float t),这个主要用在平滑移动方面

        基于浮点数t返回a到b之间的插值,t限制在0~1之间,当t = 0返回from,当t = 1 返回to。当t = 0.5 返回from和to的平均值

    4.延时与间隔的实现,但这里有个问题,都无法输入参数

       Invoke(string methodName,float time);//延迟调用某个方法

       InvokeRepeating (string methodName, float time, float  repeatRate ) //延迟多少秒后,开始间隔执行

    5.着地的一种检测方法

       public LayerMask mask;

       bool Phsyiscs2D.OverlapCircle(Vetctor3 position,float circle, mask);

    6.敌人前方放置个检测点,看碰到哪些了?

       Collider2D [] Physics2D.OverlapPointAll(Vector3 pos,mask);

    7.敌人GameObject如果是多张图组成,而死亡时只用一张图,要先把子物体中的图全关掉,在对父物体给图

       SpriteRender []rens=GetComponentsInChildren<SpriteRender>();

       foreach(SpriteRender ren in rens){ ren.enabled=false;}

    8.敌人死时,旋转掉下来

       rigidbody2D.fixedAngle=false;

       rigibody2D.AddTorque(minAnagle,maxAngle);

       它身上的碰撞器有多个(Circle和Box),全打开trigger

       Collider2D []cols=GetComponents<Collider2D>();

       foreach(Collider2D col in cols)

       {

           col.isTrigger=true;

       }

     9.血条的制作

       (1)作个血条图片,白色的透明底部,接着要作个material,并使用绿色;

       (2)用于GameObject的Sprite,Sprite Renderer中的material要用(1)中作好的;

       (3)用个health变量代表血值,受伤以后要开始减;

        (4) 血条的颜色缓变成红色,使用了Color插值法

             healthBar.material.color=Color.Lerp(Color.green,Color.red,1-health*0.01f);

        (5)血条越来越短

             healthBar.transform.localScale=new Vector3(healthScale*health*0.01f,1,1);

    10.不断生成小车,它用到了协程

         在协程中,再调用StartCoroutine来执行自己,不断产生

    11.查找相应的父GameObject的transform,用transform.parent

         父结点用transform.parent.gameObject

    12.组件是可以动态添加的,例如添加刚体组件

         gameObject.AddComponet<Rigidbody2D>();   

     13.动画播放结束要用事件咋办?

         先给相应的GameObject绑个脚本,然后在动画设计Animation Window中,Add Animation Event事件

         

      14.在游戏中经常遇到这样的需求:Enemy和Bomb不需要碰撞,而Bomb需要能掉在地板上(它需要碰撞器),这时可以Edit- Project Settings-Physics 2D,设置相应的碰撞矩阵

     15. 找到当前炸弹范围以内的敌人是这样作的:

           Collider2D[] enemies = Physics2D.OverlapCircleAll(transform.position, 10.0f, 1 << LayerMask.NameToLayer("Enemies"));

     16.Vector3.normalized;//向量标准化,返回向量的长度为1(只读).

     17.消灭敌人时用的语法:

         // Find a vector from the bomb to the enemy.

       Vector3 deltaPos = rb.transform.position - transform.position;

      // Apply a force in this direction with a magnitude of bombForce.
       Vector3 force = deltaPos.normalized * 100f;
       rb.AddForce(force);

  • 相关阅读:
    省队集训Ⅱ-Day5
    省队集训Ⅱ-Day4
    省队集训Ⅱ-Day3
    省队集训Ⅱ-Day2
    省队集训Ⅱ-Day1
    并查集 Pro
    树上带修: 莫队Ⅳ
    树上骗分: 莫队Ⅲ
    带修骗分: 莫队Ⅱ
    骗分带师: 莫队Ⅰ
  • 原文地址:https://www.cnblogs.com/bearhb/p/4775796.html
Copyright © 2020-2023  润新知