界面
- hierarchy
- inspector
- project
变量
Unity 可以让你在 Inspector 里看到并改动 C# Script 里变量的值,只需要声明变量为 public。然后变量就可以出现在 Script 组件的属性里了。
按键
在 Update 里可以监听按键事件。使用 Input.GetKey("w")
即可。 此外 input 事件在 Update 里监听更好,而不是 FixedUpdate。比如说在 Update 里监听按键。然后赋值给一个布尔变量,再在 FixedUpdate 里根据这个变量来判断。
Update和FixedUpdate区别
Update 的调用是每帧调用一次。但是每一帧的处理时间很可能不一样。 而 FixedUpdate 是按照固定时间间隔调用的,而且 FixedUpdate 调用后会立刻进行物理计算。因此任何对 RIgidBody 的物理运算都应该在 FixedUpdate 里进行,因为你当然希望你的代码运行后能够立刻改变物理状态。
相机跟随
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraFollow : MonoBehaviour
{
// 定义变量存储 Player的Transform信息
public Transform PlayerTransform;
// 定义相机距离物体的偏移量
public Vector3 offset;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
transform.position = PlayerTransform.position + offset;
}
}
- 挂在MainCamera上
- 将要跟随的物体拖到属性中
- 设置偏移量
碰撞
设置一个障碍物,碰撞时无法移动
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/**
* 碰撞障碍物
*/
public class PlayerCollision : MonoBehaviour
{
public PlayerMovement playermMovement;
private void OnCollisionEnter(Collision collision)
{
Debug.Log(collision.collider.tag);
if (collision.collider.tag == "Obstacle")
{
// 发生碰撞时,无法移动
playermMovement.enabled = false;
}
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
其中 PlayerMovement 其实就是之前我们创建的 Sript 的名字(因为会按照 Script 名字自动创建一个类,然后创建的就是那个类的类型变量),然后在 Unity 里将其链接。最后在 c# 里将其 enabled 关掉即可停止 player 的行动。
OnCollisionEnter 会在物体碰撞发生的时候调用。可接受一个参数,就是这个碰撞事件。这个碰撞事件里的 collider 就是撞到的物体。
tag 可以在 Unity 里添加。Inspector 的右上角,有一些内置的 tag,但我们这里自己添加一个新的 Obstacle tag。
- 挂在Player上
- 给Obstacle创建标签
- 给PlayerCollision绑定自己(Player)
预制体Prefabs
创建方式是从 Hierachy panel 里把想要变成 Prefab 的 Object 直接拖到下方 Project Panel 里。就变成了一个 Prefab,然后可以直接把这个 Prefab 拖到中央视图。就可以创建一个个相同的 Objects 了。
- 此时如果在 Prefab 的 Inspector 里改动,所有改动都会影响到所有通过这个 Prefab 创建的 Objects。
- 也可以改动单独的 Object,不会对其他的有影响。如果想把这个改动映射到其它 Objects 上,可以选择 Object 的 Inspector 里上方的 Override 属性里选择把哪些改动映射到其它 Objects 上。