unity 学习笔记(一)

本文详细介绍了Unity游戏开发中的各种实用技巧,包括物体移动、旋转、伸缩代码,触发器和碰撞器的区别及使用方法,鼠标操作,组件获取,实例化,特效组件应用,以及音效控制等,为游戏开发者提供了全面的技术指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开始

 

位移代码:cube.transform.translate(x,y,z);   x=x轴距离  cube为移动的物体(移动的是方向

          transform.position=new vector(x,y,z);    x=x轴距离  (移动的是点)

          Unity 5.3以上支持 R.AddForce(vector3.forward);    //R是Rigidbody一个变量

            forward是向前的一个力,其他分别为back:向后,left:向左,right:向右

         Vector2 direction = new Vector2(0, 1);   transform.Translate(direction);

旋转代码:cube.transform.Rolate(x,y,z);       x=x轴旋转角度  cube为旋转的物体

伸缩代码:cube.transform.localScale+=new vector(x,y,z);     x=向x轴延伸方向  cube为延伸的物体

世界坐标:

本地坐标:

 

触发器和碰撞器区别:

1、碰撞体需要添加Box ColliderRigidbody控件,被碰撞体需要添加 Box Collider控件

2、触发器要勾选Box Collider 控件中的 is Trigger 选项(碰撞器不需要)

3、

 

触发器方法:

void OnTriggerEnter(Collider other){ Destory this.gameObject; }  当物体碰撞时销毁自身

void OntriggerEnter(Collider other){ Destory other.gameObject; } 当物体碰撞时,销毁被碰撞体

 

碰撞器方法:

void OnCollisionEnter(Collision collisionInfo){ Destory this.gameObject;} 当物体碰撞时销毁自身

void OnCollisionEnter(Collision collisongInfo){ Destory collisionInfo.gameObject;} 当物体碰撞时,销毁被碰撞体

 

判断碰撞哪个物体的tag(比如:cube),脚本里面写:if(other.gameO bject.CompareTag(“cube”);

 

鼠标左键点击有两种方法:

1、Input.GetKey(KeyCode.Mouse0)   鼠标左键一直按住 (如果GetKeyDown,代表只有点击一下有反应)    此类方法常用

2、Input.GetButton("btn_fire")   鼠标左键一直按住  (如果GetButtonDown,代表点击一下有反应)

 

获得组件的方法:Transform.GetComponent<组件名称>();  //最好在Awake()和Start()中使用

比如:transform.GetComponent<Rigidbody>().useGravity = true;     控制RigidbodyuseGravity的控件为true

 

定义实例化对象目标点:public GameObject go;

public GameObject target;

实例化物体:GameObject obj = Instantiate(go) as GameObject; 

控制实例化的物体在哪里生成:obj.transform.position= target.transform.position;

                                                                 obj.transform.rotation= target.transform.rotation;

另一种方法:Instantiate(go,target,Quaternion.identity);

Quaternion.identity和transform.rotation的区别:

Quaternion.identity就是指四元数Quaternion(0,0,0,0),就是每旋转前的初始角度,是一个确切的值,而transform.rotation是指本物体的角度,值是不确定的,比如可以这么设置transform.rotation = Quaternion.identity;
一个是值类型,一个是属性变量

 

两种调试方法:print Debug.Log

 

60s计时器:public float time=60;   time-=Time.deltatime;

保留小数点后1位:b=Mathf.Round(a*10)/10;

 

随机数:Random.Range(x,y);  xy-1数字中取随机数

 

记录永久数据:PlayerPrefs.SetInt("c++", a);

读取永久数据:PlayerPrefs.GetInt("c++");

判断数据是否存在:PlayerPrefs.HasKey(“c++”)==false

 

控制音效播放:①创建一个AudioSource 对象:AudioSource audio;

②在Start方法中赋值给这个对象:audio=transform.GetComponent<AudioSource>();

创建控制方法,将要播放的音效赋值给AudioSource对象:audio.clip=audio2;接着播放音效:audio.Play();

最后在UpDate方法中调用音效播放方法。

 

音效状态方法:播放音效:audio.Play();    暂停播放:audio.Pause();    

停止播放:audio.Stop();

 

特效组件:TrailRenderer

 

Vector3Vector3向量既可以用来表示位置,也可以用来表示方向。xyz 表示一个空间向量。  This:用于访问xyz三个数据使用数组的方式访问,比如: position = new Vector3(1.5f, 3.0f, 6.7f);

position[0];   // 获得1.5

position[1];   // 获取3.0

position[2];   // 获取6.7

 

改变对象颜色(对象名:cube,颜色:red):cube.GetComPonent<Ronderer>().material.color=red;

 

找外部物体(物体名:cube):先定义:GameObject obj;      obj=GameObject.Find(“cube”);

 

延时调用一次:Invoke(“turnColor”,2);   //turnColor是改变颜色的方法,两秒后调用一次

延时调用多次:InvokeRepeating(“turnColor“,2,3);    //turnColor是改变颜色的方法,首次调用要2秒,间隔3秒再次调用

结束上述两个调用:CancelInvoke(“turnColor”);    //turnColor是改变颜色的方法

 

场景加载的方法:Application.LoadLevel("Level1");   //Level1是一个场景名称

退出游戏的方法:APPlication.Quit();

 

5.0过后,使用SceneManager.LoadScene("level1");方法获取下一个场景// 需要引用命名空间UnityEngine.SceneManagement;

 

按钮点击的一种方法:先获取到Canvas里面的Start按钮:GameObject btnObj = GameObject.Find("Canvas/Start"); 定义一个Button变量获取到Button组件:Button btn = (Button)btnObj.GetComponent<Button>();  最后是调用Button的事件方法:btn.onClick.AddListener(onClick);   后者的onClick是定义的点击按钮所要做的事情

 

OnMouseDown()可以检测碰撞器或者GUI文本的点击事件

 

线性插值:float result=Mathf.Lerp(3f,5f,0.5f);  //前两个参数代表初始值和结束值3和5,第三个参数代表插值比例为0.5,result为4

        Vector3 form=new Vector3(1f,2f,3f);

                   Vector3 to =new Vector3(5f,6f,7f);

                   Vector3 result=Vector3.Lerp(form,to,0.75f);   //结果为(4,5,6)

 

延时摧毁一个物体:Destory(gameObject,3f);       //在3秒后摧毁该物体

摧毁一个组件:Destory(GetComponment<>();

 

协同程序:

 

创建物理射线:ray=Camera.main.ScreenPointToRay(input.mousePosition);   //主摄像机发射一条射线指向鼠标点击的地方,并存储在ray中

If(Physics.Raycast(Ray,out RaycastHit){}

发送信息:SendMessage("tankDamage");    //发送了一条信息给了tankDamage方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值