Unity 3D 相关 C#语法

  1. id  =  GetComponent< 相关组件>(); //为id制定相应的组件
  2. id.AddForce( vector );  //为id施加由某向量规定的力
  3. new Vector3(1,1,0);//创建一个自定义的向量 ,Vector中的值只能为整形。
    1. 向量点乘 : Vector.Dot(Vector1,Vector2);
    2. 向量叉乘:    Vector.Cross(Vector1,Vector2); 
  4. float h = Input.GetAxis("Horizontal");  //定义一个短整形h,用于储存从键盘(a&d)上输入的水平值
  5. float v = Input.GetAxis("Vertical");  //定义一个短整形v,用于储存从键盘(w&s)上输入的垂直值
  6. if (collision.gameObject.tag == "Food"){Destroy(collision.gameObject);}   //碰撞检测后销毁碰撞物体,tag是字符串类型,碰撞检测必发生碰撞物理效果,即必有运动状态的改变。
  7. public 变量可被外部脚本修改(例如Unity 3D中的Inspector)   private 变量只作用于本函数中,无法被外部修改,未声明的变量均为private                                                                                                                                                public可在Unity 3D中的Inspector中修改,但是会被Start & Update等脚本覆盖,即顺序为 脚本初始化->Inspector修改->Start函数->Update函数
  8. Myclass(定义一个类变量) =  new AnotherClass();(同工程中其他脚本中的类)  //调用其他脚本中的类 
  9. 循环语句 :for  while  do-while   foreach
  10. 四个初始函数:Awake  Start   Update FixUpdate (可用Ctrl+Shift+M启用MonoBehavior向导,可选择相应函数)
    1. Awake :在脚本启动前调用,即使脚本没有调用,也会作用一次。
    2. Start :在脚本启动时调用,也只作用一次。
    3. Update:每帧调用一次,当每帧的运算时间不同时,Update的调用时间也不同
    4. FixUpdate:每帧调用一次,调用时间相同(适用于物理检测)
  11. 组件的启用和禁用可用Component.enabled和!Component.enabled,包括脚本,但不包括游戏对象。
  12. 游戏对象的启用和禁用可用GameObject.SetActive(true/false),在层级结构中,父对象的启用会影响子对象,子对象的改变无法影响父对象。
  13. 平移与旋转
    1. 平移:transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime(每秒多少米));
    2. 旋转:transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime);
  14. Lookat函数
    1. transform.LookAt(target);  target是transform类型变量  //使物体正面对着target,并跟随。
  15. 线性插值函数 Lerp
    1. 数值插值 :float result = Mathf.Lerp (3f, 5f, 0.5f);     //result == 5;向量插值: Vector3 result = Vector3.Lerp (from, to, 0.75f);
      1. 可用于数值平滑 ,例如  light.intensity = Mathf.Lerp(light.intensity, 8f, 0.5f * Time.deltaTime);   //是光线强度不断逼近8f,只在确定目标值得时候适用,其他情况下用SmoothDamp
    2. 颜色插值:Color result = Color.Lerp(from, to ,0.5f);    //from&to 为Color类型的向量变量,有四个参数(Red,Blue,Green,Alpha)
  16. 销毁函数  Destory(gameobject,float)
    1. 可用于摧毁对象和组件,float用于延时,单位为s  
  17. 获取键盘输入按键  GetKey //  GetBotton  (函数均返回bool值)
    1. GetKey:需要配合Keycode.keyname  bool down = Input.GetKeyDown(KeyCode.Space);
    2. GetBotton:通过Unity的输入管理器,来指定按键  bool down = Input.GetButtonDown("Jump");
  18. 基于坐标轴的按键输入函数   GetAxis    (返回的值为float(-1~1) 例如:float h = Input.GetAxis("Horizontal");)  鼠标输入  void OnMouseDown()   作用于对象,可添加鼠标点击后的事件
    1. 可通过Input manager设置Axie的相关参数
      1. Gravity :表示物体移动后,返回原点的速率
      2. Sentivity:表示物理移动的速率
      3. Dead    :盲区,小于Dead值时,函数均返回0,用于防止微小移动。
    2. GetAxisRaw :用于返回整数,用于2D层面精准定位,无需平滑移动的场景
  19. 获取其他组件中的参数   GetComponent
    1.  id = GetComponent<componentname>();
  20. 值Value变量与类Class变量的区别构造函数Construction (没有返回类型,void都没有)
    1. Value:bool,int,char,structure,float,ect.定义一个新Value变量,即申请一个新的储存位置放变量值
    2. Class:transform,gameobject,ect. 定义一个新Class变量,即获取该Class类型的地址,之后新变量的改变会直接改变该Class地址中的值
  •              public class Stuff
  •            {         //同一个类中可有多个不同的构造函数,用不同的输入参数区分
  •       public Stuff(int bul, int gre, int roc)
  •       {bullets = bul; grenades = gre; rockets = roc;}
  •            }

      23.克隆预制体函数  Instantiate        

 

      24.改变类型函数  as   (as+目标类型)放语句末尾

  25.数组初始化

    1.    int[] intarray = new int[5];

    2.    int[] intarray = {1,2,3,4,5};

  26.延迟唤醒函数 Invoke InvokeRepeating  CancelInvoke

    1.Invoke("FunctionName",StartDelay)   //在过StartDelay秒后,运行FunctionName函数

    2.InvokeRepeating("FunctionName",StartDelay,RepeatDelay)  //在过StartDelay秒后,运行FunctionName函数,之后每过RepeatDelay秒再运行一次。

    3.CancelInvoke(“FunctionName”)

  27.枚举函数 enum

    1. enum Direction (: 类型)(可规定枚举类型) {North, East, South, West};

  28.属性 Property             public int MyProperty()   {get(读取本属性时返回的值);set(写入本属性时的动作);}

    1.通过属性,我们可以在其他脚本中调用本脚本中的属性,作用同Public                                   

    2.但属性可以通过删除get,set函数来实现只读或只写

    3.属性中可在get,set中添加代码语段,增加功能。

  29.三元运算符  (id = judgefunction ? turefunction:falsefunction;)

  30.静态修饰符  static

    1.static声明的类,和方法都可直接调用,无需为其指定实例(对象)

    2.static声明的变量,其存储空间固定,名称唯一。而非静态变量可在多个脚本中创建同名变量,分别存储不同的值,且脚本完成后会释放空间。 

  31.通用函数创建      public T GenericMethod<T>(T param)   

    1.T代表未知类型,需在创建实例的时候为其指定

    2.我们可以在where  T :  type1, type2   来限制T的类型

  32.类的继承    public class Apple : Fruit   (Apple作为子类,拥有Fruit的所有特征及成员,但自己又可添加新的功能)

    1.我们可用  : base(pramtertype)  来指定调用父阶的构造函数,防止构造函数的重复。

    2.可在实例前置括号,使父阶对象改变为子阶对象  ChildClass myclass = (ChildClass)ParentClassName

  33.继承中的函数覆盖   virtual   override

    1.父阶的函数可在返回类型前添加关键字 virual 使其可被子阶类覆盖。

    2.子阶函数可在返回类型前添加关键字  override 使其覆盖父阶函数。

    3.若子阶函数希望调用父阶函数,且添加新功能,可在函数体第一句写上  base.FunctionName();

   34.接口的实现  Interface   (public interface IKillable)

    1.接口适用于不相关的类直接的函数调用,跟继承类似

  35.扩展方法    public static void ResetTransformation(this Transform trans)

    1.拓展方法必须声明为static  ,  参数中为  this + 希望扩展的类名  +  任意id(此ID即为函数体中的调用对象)

  36.命名空间  namespace SampleNamespace{}

    1.即类的一个集合,例如 UnityEngine  System.Collection

    2.有三种使用命名空间的方法

      1.在开头添加  using  Namespace

      2.直接在函数中调用   Namespace.function

      3.在类外直接写上  namespace SampleNamespace{} ,之后花括号中的类均会放在此命名空间中。

  37.四元数  Quaternion  (用于描述旋转的最好方法)

  38.协同程序   IEnumerator MyCoroutine (Transform target)

  39.委托类型  delegate void MyDelegate(int num);  //创建一种委托类型,里面可以放入返回值为空,参数为int的函数

    1.委托类型需要实例化,MyDelegate myDelegate;

    2.委托类型可以叠加和删除,使用+= 和-=,

    3.委托变量未指定方法时,返回值为null,最好在每次使用前,先判断其是否为空,否则会发生错误。

  40.属性    用[]进行调用  用于丰富函数的功能。

    1.例如 [Range(-100,100)]  int speed; 即会在Unity的Inspect界面产生一个滑动条。

  41.事件   public static event ClickAction OnClicked;     

    1.事件是一种特殊的委托类型,需要先声明一种委托类型   public delegate void ClickAction();

    2.事件的好处在于,其他的脚本中,只能从事件中添加或删除本脚本中的类,无法影响到事件中的其他类。  //内部安全性。

    3.每次往事件中添加方法时,都需要订阅和退订的函数,以保证其安全运行。

  42.单例模式       //保证一个类只有一个实例。

    public class Singleton{

      private static Singleton instance;

      private Singleton (){}

      public static Singleton getInstance(){

        if (instance == null){

          instance = new Singleton();

         }

        return instance;

       }

    }

posted @ 2022-03-16 21:00  蹲墩敦  阅读(350)  评论(0)    收藏  举报