【Unity】项目源码 您所在的位置:网站首页 unity2d格斗游戏实战 【Unity】项目源码

【Unity】项目源码

2024-07-09 23:03| 来源: 网络整理| 查看: 265

(Ps:本文为个人原创旧文章,原发布地址为:CSDN ) 【摘要】这同样是sunset在学习Unity游戏制作过程中独立制作的游戏,游戏的操作与过关方式比较简单,整体制作时间大概两到三天中除去上课吃饭以及睡觉的剩余时间。虽然也出现了意想不到的小问题,不过整体制作过程中还算比较顺利。这篇博客就来说说如何制作一款这样的游戏的核心部分。

1.游戏背景简介##

这款游戏的故事背景大概讲的是一群不知为何从地底复活的古生物——萌萌的小骷髅为了实现蠢蠢的想法而想要占领城市,它们各种破坏城市,制作了各种妨碍人们正常生活的事,此时一位热衷于跑步的少年出现,他的出现显然不是为了拯救城市,而只是一心一意的专注于奔跑,然而在这个过程却又要免于小骷髅的骚扰,故事就从这里开始了。。。

2.我们所需要的

制作任何一款游戏都离不开合适于游戏的人物模型,所以我们先需要一下这些东西:

适合游戏故事背景的萌萌的主人公,也就是玩家控制的角色模型。 适合游戏故事背景的萌萌的小骷髅,也就是逻辑意义上的敌人。 适合游戏故事背景的场景模型以及障碍物模型,因为游戏发生在现代都市,所以可以是车辆,树木,建筑物等等。 合适的音频文件 一颗耐心,静静去完成属于自己的独立作品。 3.编写人物移动代码##

在此类游戏中,最重要的就是玩家操作感受,于是优先考虑移动代码的编写是非常需要的,虽然这个游戏的过程是2D游戏,但是sunset在创建场景等一切模型元素上采用的都是3D模型,所以游戏整体上在视角方面更有层次感。因为我们这是2D游戏,并不会在平面上突然出现一个斜坡,所以人物的移动只需要使用this.transform.Translate()即可,但是人物身上还是需要载有CharacterController组件以用于进行角色跳跃。然而这都不是最难的,因为角色控制器的存在,无法使用刚体的一切属性,所以就不得不对游戏场景的重力进行模拟,只有一遍一遍不断的尝试才能找到合适感觉。接下来是代码:

using UnityEngine; using System.Collections; [RequireComponent(typeof(Animator))] public class RunnerController : MonoBehaviour { //public Variable public enum Direction { Forward = 90, Backward = 270, } public float maxSpeed; public float MoveSpeed = 0; public float Z; public float JumpForce; public float Gravity; public bool PlayerDead; //private variable private CharacterController Controller; private Animator animator; private Direction direction = Direction.Forward; private float H; private float V; private bool OnGround = true; private bool Jump; private float JSpeed; void Awake() { //rigidbody = this.GetComponent(); Controller = this.GetComponent(); animator = this.GetComponent(); } void Update () { if(!PlayerDead) { if(this.transform.position.z != Z) { Vector3 Position = this.transform.position; Position.z = Z; this.transform.position = Position; } H = Input.GetAxis("Horizontal"); V = Input.GetAxis("Vertical"); //AniamtorState(); if(Controller.isGrounded) { OnGround = true; Jump = false; animator.SetBool("Jump",false); if(Input.GetKeyDown(KeyCode.J)) { if(V > 0.3) { JSpeed = 1.3f * JumpForce; } else { JSpeed = JumpForce; } Jump = true; animator.SetBool("Jump", true); } } else { OnGround = false; if(!OnGround) { Controller.Move(-Vector3.up * Gravity * Time.deltaTime); } } } else { animator.SetBool("Dead",true); animator.SetFloat("speed", 0); animator.SetFloat("Slider", 0); animator.SetBool("Jump", false); } } void FixedUpdate() { JumpUp(); Move(); } void Move() { //先计算朝向 if(H >= 0.3) { if(MoveSpeed == 0) { SetFacingDirection(Direction.Forward); } if(direction == Direction.Forward) { if(MoveSpeed < maxSpeed) { MoveSpeed += 1.0f; //state = State.Walk; } else { MoveSpeed = maxSpeed; //state = State.Run; } } } else if(H 0.3 && MoveSpeed != 0)) { MoveSpeed -= 1.0f; if(MoveSpeed 1.0f) { _state = State.Walk; this.transform.LookAt(_TargetPosition); this.transform.Translate(Vector3.forward * _Speed * Time.deltaTime); } else { if(_Laststate == State.Run) { _TargetPosition = new Vector3(_MovePoints[0].position.x, this.transform.position.y, this.transform.position.z); _Laststate = State.Idle; } _state = State.Idle; _WaitTime -=Time.deltaTime; if(_WaitTime XMargin; } bool CheckYMargin() { return Mathf.Abs(transform.position.y - Target.position.y) < YMargin + 89.0f; } void FixedUpdate() { FollowTarget(); } void FollowTarget() { float targetX = transform.position.x; float targetY = transform.position.y; if(CheckXMargin()) { targetX = Mathf.Lerp(transform.position.x, Target.position.x, XSmooth * Time.deltaTime); } if(CheckYMargin()) { targetY = Mathf.Lerp(transform.position.y, Target.position.y + targetY, YSmooth * Time.deltaTime); } transform.position = new Vector3(targetX, transform.position.y, transform.position.z); } }

XMargin和YMargin值可以在Inspector视图中进行自由的修改。而Camera的跟随主要是利用 Mathf.Lerp()方法进行实现的。XSmooth和YSmooth主要用于影响Camera移动过程中的平滑程度。 嗯,这款游戏的核心部分主要就是这些了,如果还有其他自己想要实现的部分,可以再细细琢磨,慢慢修改。 接下来,上试玩图片: 开始

遇怪

补充:源码及资源下载地址:http://pan.baidu.com/s/14R1me

文章为个人原创,转载请注明出处( https://www.cnblogs.com/Beyond1900/p/14484995.html )。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有