现在主要开始着手学习Unity中的C#✊
学习主要参考B站教程
po一下我看的教程:
M_Studio的基础教程:老师讲的很好很仔细,可惜由于官方教程出了后就没再更新啦。
Unity官方初级教程
今日重点
1. 变量的使用与计算
- 使用public创建Unity界面可见可控的变量
- 使用GameObject类型来创建游戏对象,获得在代码中使用该对象所有组件的使用权,想使用哪一个组件,就在代码中生成该组件的一个实例
- 使用Transform类型来控制Transform组件,Transform声明的实例可以表示该实例的位置
- 可以在Unity界面直接修改变量的值
2. 常见指令
- Start():当在Unity中点击开始时,包含在Start()中的所有指令会被执行
- Update():每一帧执行一次
- Awake():无论script是否启动,都在开始的时候运行
- 使用Debug类的方法来观测Unity中点击开始后Console栏中的情况
- 使用Input类的方法来获取键盘、鼠标的输入(注意参数的输入方式)
- 详细信息请参考今日练习
3.代码生命周期
- 参考Unity手册:ExecutionOrder
- 执行周期与代码顺序无关
4.数组
- 在代码中直接生成一个数组而不初始化,可以在Unity界面中自由调控
- 可以结合Tag进行多个物品的管控
5.矢量数学
- Unity3D 采用左手坐标系

- 向量的点积:可以使用Vector3.Dot(Vector1,Vector2)来完成点积的运算
- 向量的叉积(向量积):可以使用Vector3.Cross(Vector1,Vector2)来完成叉积的运算
6.组件的禁用与启用
- 可以使用.enabled来禁用和启用某个组件
7.激活游戏对象
- 可以使用.setActive(bool值)来激活游戏对象
8.Translate和Rotate
- 在transform.translate()中,乘上Time.deltaTime让物体以每秒多少米的速度移动,而不是每帧多少米
示例:transform.Translate(Vector3.forward * speed * Time.deltaTime); - 想要物体产生物理效果时,就不应该用translate和rotate来移动物体,而应该用physics函数
今日练习
戳我戳我
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
// Start is called before the first frame update
public int health = 5;
public float speed = 3.5f; //public会出现在Unity界面中
private int height = 3; //private不会出现在Unity界面中
public GameObject player;
public Transform playermovement;
private Light mylight; //声明一个light组件的实例
public GameObject [] cubes;
private void Awake() //无论script是否启动,都在Start之前运行
{
//Debug.Log("周飞飞牛逼!"); //用于显示括号中的字符
}
private void OnEnable() //只要script启用了,就会在Start之前运行
{
}
void Start()
{
cubes = GameObject.FindGameObjectsWithTag("cube"); //用该语法对标签的物品进行管控
mylight = GetComponent<Light>(); //给该组件实例赋值,让这个组件实例能够控制Light组件
}
private void FixedUpdate() //处理所有的物理数据,如刚体等,可在Unity中进行详细设置
{
//FixedUpadate的间隔时间是固定的,而Update的间隔时间不是固定的
}
private void OnTriggerEnter(Collider other) //触发器
{
}
private void OnCollision(Collision collision) //碰撞判定
{
}
private void OnMouseDown() //指鼠标进行XX操作
{
//其中,比较特殊的是Down可以视作移动设备的屏幕触摸。但Up不能再Iphone上实现
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.D))
{
playermovement.transform.position = new Vector3(playermovement.transform.position.x+1, 1);
//此处需要注意position.x不能使用++,而应该是直接+1,因为++相当于多了一个给自身赋值的操作
}
if(Input.GetKeyDown(KeyCode.Space)) //按下空格来切换灯光
{
mylight.enabled = !mylight.enabled; //可以不停切换
Debug.Log("切换灯光");
}
if(Input.GetKeyDown(KeyCode.W))
{
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
if(Input.GetKeyDown(KeyCode.S))
{
transform.Translate(-Vector3.forward * speed * Time.deltaTime);
}
}
private void LateUpdate() //同样每帧执行,但在Update之后
{
}
private void OnGUI() //用于屏幕界面的设置,按钮等
{
GUI.Button(new Rect(10,10,100,150),"Hello"); //此处记得Rect需要new,因为它是一种类型,而不是一个实例
}
private void OnDestory() //最后销毁
{
}
}
今日总结
今天上了差不多一天的B站大学,在M_Studio上了8节课后转战Unity官方的C#初级教程,并且学习了一半,其实难度不大,主要是要在学的同时用VS进行练习。目前学校的节奏还挺舒服的,虽然都说学习Unity应该多去尝试做项目,但我始终还是觉得至少把C#基础掌握好,才能更快地掌握项目的节奏。
总之,明天再继续努力吧!
😁😁😁
阅读量
loading...