玩家的开镜和拾取钥匙开门(其实就碰到钥匙)
我们要先在层级视图里去创建一个新的Camera,然后把新的Camera里面的耳朵删掉也就是Audio Listener组件
在把我们新的相机拖到玩家视角的前面一点点,在把Camera组件里的Field Of View值调到你想要的值(往左边就放大)
然后就完成了开镜的功能(如果想好看点可以加点UI,新相机的大小要自己调试哦,在Viewport Rect里调试哦)。
![](https://i-blog.csdnimg.cn/blog_migrate/91aa31fd22c39c3159d0a03d33e53db7.png)
拾取钥匙开门就做一个简单的判断,我们先写一个触发器(当然也可以写一个碰撞器)我们可以用OnTriggerEnter就只需要接触的那一阵调用,我是写了两个一个是碰到钥匙然后就让我设置的布尔值变成true,这样我们的门就能判断到拾取过钥匙了,然后我是想让门慢慢的往下移动所以用了OnTriggerStay接触的每帧都被调用直到看不见。
// 触发接触的那一帧被调用
void OnTriggerEnter(Collider o)
{
if (o.CompareTag(StaticGameResources.keyTag))
{
AudioSource.PlayClipAtPoint(keyAudio, Camera.main.transform.position, StaticGameResources.a1);
StaticGameResourcesOne.GameOne().hasKey = true;
Destroy(o.gameObject, StaticGameResources.b1);
}
}
//触发接触的每帧都被调用
void OnTriggerStay(Collider o)
{
if (o.CompareTag(StaticGameResources.doorTag) && StaticGameResourcesOne.GameOne().hasKey)
{
//失败告终(正在努力)
//door.transform.position = new Vector3(door.transform.position.x, door.transform.position.y - 1f, door.transform.position.z);
AudioSource.PlayClipAtPoint(doorAudio, Camera.main.transform.position, StaticGameResources.a1);
Destroy(door);
}
else if (o.CompareTag(StaticGameResources.doorTag) && StaticGameResourcesOne.GameOne().hasKey == false)
{
StaticGameResourcesOne.GameOne().playerHP--;
}
}
敌人的克隆
首先我们在管理器类里去克隆敌人就得获取敌人预制体(这边我是用动态加载去获取预制体的不想用的同学可以去公开对象直接把预制体拖进来)
public class StaticGameResourcesOne : MonoBehaviour {
private GameObject dog;
void Start () {
dog = Resources.Load<GameObject>(StaticGameResources.dogPath);
}
}
今天我们用不一样的克隆生成以某个点为中心随机克隆,先写个书去接收随机数,在去用二维向量去接收我们从原点(0,0)坐标上获取任意的一个方向的向量,获取我们刚刚得到得向量并且大小为1,用三维向量去接收我们随机点得位置,在去用然后我们用for循环去克隆3个敌人。记得在Start里用Invoke去调用;(当然同学也可以用协程去写)
public class StaticGameResourcesOne : MonoBehaviour {
private GameObject dog;
private Transform campsite;//中心点
void Start () {
dog = Resources.Load<GameObject>(StaticGameResources.dogPath);
campsite = GameObject.Find(StaticGameResources.campsite).transform;
Invoke(StaticGameResources.dogCole, StaticGameResources.a1);
}
void DogCole()
{
for (int i = 0; i < 3; i++)
{
int a = Random.Range(2,5);//随机2--5米范围
Vector2 b = Random.insideUnitCircle;//从原点(0,0)坐标上获取任意一个方向的向量
Vector2 c = b.normalized;//获取向量的单位向量:只有方向,大小为为1
Vector3 d = new Vector3(campsite.position.x+c.x*a, campsite.position.y, campsite.position.z+c.y*a);//随机点的位置
Instantiate(dog,d,Quaternion.identity);
}
}
}