一个unity制作的狗狗的小练习 writeor的博客 wr的小窝喔~
  • 欢迎访问wr的小窝~,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站.
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧
  • 嘟嘟嘟嘟嘟嘟啦~~

一个unity制作的狗狗的小练习

java writeor 2年前 (2023-05-16) 571次浏览 已收录 0个评论

 

  • 项目概述

项目概述:本作品是一款基于Unity游戏引擎技术的小游戏。该游戏主要设计了三个关卡,玩家通过鼠标点击控制人物移动,可以攻击在场景中的怪物。击败一定数量的怪物会进行升级。

主要职责:在游戏中主要实现了课程中涉及的控制角色运动和攻击,碰撞检测,血量控制,音效控制,三维场景设计,AI角色运动和攻击等功能。

项目成果:该游戏是本次课程的阶段成果检验,也帮助玩家适当的放松,缓解精神疲劳。

  • 项目的设计:

1.项目应用的素材

(1)项目插件:

Uniersal RP 通用渲染管线插件;

Shader Graph 图形程序编辑插件;

ProBuilder 场景搭建插件;

Polybrush 地形编辑插件;

Cinemachine 摄像机插件;

(1)项目素材:

FREE Skybox Extended Shader 天空盒素材;

DogKnight 小狗骑士;

RPG Monster Duo PBR Polyart 怪物角色;

SimpleNaturePack 场景素材;

Scene Teleportation Kit 传送门模型素材;

SineVFX;水晶和石头素材;

2.游戏策划

游戏规则:点击开始按钮载入游戏场景开始游戏,玩家通过鼠标点击控制人物移动,可以攻击在场景中的怪物。击败一定数量的怪物会进行升级。靠近传送门后可以按下E键进行同场景或不同场景的传送。

游戏功能设计:

 

图1.游戏功能的设计

一个unity制作的狗狗的小练习一个unity制作的狗狗的小练习

  • 项目的实现
  1. 接口实现观察者模式的订阅和广播,当玩家死亡,发送广播,敌人收到广播切换胜利动画。

当玩家死亡时会调用游戏管理实例里的广播函数GameManager.instance.Notify();敌人收到广播后,完成胜利动画的切换。

public void Notify()

{

foreach(var item in observers)

{

item.EndNotify();

}

}

public void EndNotify()

{

iswalk = false;

ischase = false;

an.SetBool("Win", true);

attacktarget = null;

playerdead = true;

}
  1. 制作了一个工具类Singleton,用于实现单例模式,在使用时让gamemanage或其他需要使用单例模式的类继承此工具类,类似如下。
public class Mouse_manage : Singleton<Mouse_manage>
public class Singleton<T> : MonoBehaviour where T:Singleton<T>

{

public static T instance;//单例模式泛型

protected virtual void Awake(){

if(instance!=null){

Destroy(gameObject);




}else{

instance=(T)this;

}

}

public static T Instance

{

get

{

return instance;

}

}

}
  • 传送门的实现

先制作传送门的预制体,拥有两个部分,父节点理解为要去目的地,它的子节点为当地门所在位置的名字。用enum定义目的地类型。

public enum DestinationTag{Enter,A,B,C}//传送目的地

启动协程,判断是同场景还是不同场景后,配合淡入淡出效果,异步加载到新场景后重新实例化玩家并且加载保存好的玩家数据。

IEnumerator Transition(string ScenceName,transPointDestination.DestinationTag destinationTag){

SaveManager.instance.PlayerSaveData();




SceneFade fade = Instantiate(fadePrefab);







if(SceneManager.GetActiveScene().name!=ScenceName)//不同场景

{

Debug.Log("进入不同场景");

yield return StartCoroutine(fade.FadeOut(1.5f));

yield return SceneManager.LoadSceneAsync(ScenceName);

yield return player = Instantiate(playerPrefab,GetDestination(destinationTag).transform.position,GetDestination(destinationTag).transform.rotation);

StartCoroutine(fade.FadeIn(1.5f));

SaveManager.instance.PlayerLoadData();

yield break;







}else{

Debug.Log("进入相同场景");

player = GameManage.instance.playerCharacterState.gameObject;

player.GetComponent<NavMeshAgent>().enabled=false;




yield return StartCoroutine(fade.FadeOut(1.5f));

player.transform.SetPositionAndRotation(GetDestination(destinationTag).transform.position,GetDestination(destinationTag).transform.rotation);

player.GetComponent<NavMeshAgent>().enabled=true;

StartCoroutine(fade.FadeIn(1.5f));







yield break;




}




}

 

 

 

  • 项目的效果图:(演示视频就可以,这里可以选择性填写)

一个unity制作的狗狗的小练习 一个unity制作的狗狗的小练习 一个unity制作的狗狗的小练习

  • 自学的内容

      在资源商店下载了一些素材。

六,创新点

项目总结

  学到了角色参数的管理方式。游戏设计中常用的设计模式,场景的跳转方法,动画k帧操作。摄像机的体积光。Npc的行为动作机。

期间有一次Bug怎么也找不到错,原来是忘记挂给物体了。

接下来将会去学习多结局叙事类游戏的设计方式,类似《群星》或《文明》系列的模拟经营类游戏。

 

 


wr的小窝 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:一个unity制作的狗狗的小练习
喜欢 (0)
[1528532472@qq.com]
分享 (0)

您必须 登录 才能发表评论!

wpChatIcon
wpChatIcon