c#语言基础中的小重点

 
c#的语言基础小知识

有关字符串的小知识

只有字符串常量才有字符串池,stringBuilder 可变字符串,stringBuilder s = new stringBuilder(10);//开辟容纳10个数据空间的

频繁修改字符串(3次以上)就用stringburilder,stringbuilder主要是可以扩容。但是,string也有比stringbuilder好的地方
string比stringbuilder好的地方
1.创建简单

2.节省空间

3.方法多

如果不需要频繁修改字符串的大小,一般还是用string

枚举:enum

枚举,说白了就是换标签,比如说,性别,c#里面没有什么数据类型是男或者女的,那怎么办呢,就用枚举,怎么用呢,

可以新建一个枚举,新建枚举,就是新建一个类,或者一个脚本,不用继承MonoBehaviour,然后把class关键字 换成enum
public enum ee  {
    男,//==0 其实它装的还是int类型的值
    女//==1
}

用的话就在你需要的地方 ee.男 或者 ee.女 就好啦 很直观和明了哦。比如下面的代码

private void Start()
    {
        switch (ee.女)
        {
            case ee.男:
                //执行性别是男的代码
                break;
            case ee.女:
                //执行性别是女的代码
                break;
            default:
                break;
        }
    }

构造函数

还是先写写自带的构造函数吧,你在脚本里不写构造函数,编译器会送你一个无参的构造函数
public 类名(){} 当你自己写了一个构造函数,那么它就不送了,构造函数也是可以重载的,比如:
public 类名(int a){} ,有这么一种需求,就是我想用自己写的重载了的构造函数,而且,也想用
自带的构造函数,那可以这样public 类名(int a):this(){}这样就可以了。但是你如果想用两个重载
了的构造函数,这个方法就不适用了。有大神也可以告诉我,谢谢啦
构造函数执行在子线程中,Unity API执行在主线程中,unity是不允许跨线程运行的哦。

有关start,awake和enable

首先,顺序先记住,Awake先于enable先于start
Awake是这个脚本的依附物体一经加载,就立即执行
start最起码比Awake慢一帧。start要这个脚本运行了,才开始执行

有关GetComponent的东西

GetComponentInChildren<>();他的特点 就是 还是从自身开始找 找不到才去子物体找这个组件
setactive(true/false) //改变物体的检视面板的激活状态
GameObject go = GameObject.FindWithTag("物体标签");
GameObject[] go1 = GameObject.FindGameObjectsWithTag("物体标签");找到所有是这个标签的物体
但是,如果这个物体是没有被激活的,那么他的标签属性是找不到,你运行代码,就会出现空指针异常
这时,就可以用GameObject.Find("这个物体的路径吧");比如说GameObject.Find("Canvas/Image");
不过这种方法比较消耗性能,能不用就尽量不用。

Animation

老版的动画播放,有时候还是比新版要好用那么点点,如果项目里有很多动画需要播放,可以建一个动画类
这个类只需要负责播放就好了,至于需要播放什么,就看是谁调用这个方法了。比如在这个类里面写一个方法
public void playAnimation(string name)
{
anim.play(name);//anim是动画的播放组件,需要在前面定义和赋值,不然会是空指针异常
}
play(name) //没有间隙 下一帧就播放
CrossFade()//两个动画 有融合 适合人物动画
PlayQueued()//队列 两个动画有先后
CrossFadeQueued()//融合 队列

有关3D数学的知识

首先声明哈,这个玩意则绕,作者表示也还有点晕晕的,下面这些只是我的笔记,怎么理解就看你们啦
不要喷我哈
1.求一个三维向量的模长(也就是长度)
Vector3 c = new Vector3(0,0,1);
float a = c.magnitude;
求单位向量就可以vector3 pos =  c.normalized;还有就是用这两个方法,不会改变原向量的大小和方向,不管是什么向量,他的normalized都可以除了(0,0,0).normalized这个方法叫做向量的归一化或者标准化,得到的就是这个向量的方向。
2.bullet.position += n1.normalized;位置加等于一个向量,表示该物体沿着这个方向运动。
3.弧度转角度,c#里有很多角度的计算,得到的结果一般都是弧度制的角度,就要用方法转了
   方法就是 弧度转角度 Mathf.Rad2Deg,角度转弧度Mathf.Deg2Rad,怎么用呢,比如现在有一个角度值50°
   int a = 50;float rad = a *   Mathf.Deg2Rad;这样rad里面就是弧度角了。
4.计算当前物体正前方3米的世界坐标
   //计算当前物体正前方三米的世界坐标Vector3 pos = transform.TransformPoint(0,0,3);
    

其他

1.比如人物的移动,你不能说是因为电脑性能好,就跑得快吧,这显然不合理,可以用下面的方法让人物的移动
速度恒定,不会因为掉帧而变慢 Time.deltaTime * speed 每一帧都一样的速度,比如人物一般是沿Z轴,也就是他的
前方移动吧 那就是 transform.translate(0,0,Time.deltaTime * speed);
2.有些函数我们需要它重复调用,而且间隔时间一定,就可以用下面这个方法
重复调用 函数名 开始执行时间 间隔
InvokeRepeating("Time",1,1);
延迟调用
Invoke("方法",延迟时间);
取消调用
CancelInvoke("函数名");
3.有些运动或者旋转,我们不想让他一帧就执行,比如物体有A运动到B,结果,一眨眼就过去了,,这显然很尴尬
就可以用lerp,camera.fieldOfView这个是镜头的大小
camera.fieldOfView = Mathf.lerp(camera.fieldOfView,b,c);
                                                    1,起点  2 终点 3 比例0.1f








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值