|
背景
因为平时确实很少需要打开,我每次打开Unity都是算是阔别重逢了,再加上工作本身的变动情况,整个人就是处于摆又摆不烂,卷又卷不赢,躺又躺不平,以至于那碗夹生的饭我咽了又咽的状态。
毕竟游戏是带给人快乐的,这也是我想要进入游戏行业的主要原因,对于游戏本身的热爱会让我在业余时间除了打游戏也会尝试做一做Demo,大概就是玩多了想做,做不下去了继续玩的状态,做Demo就是自我解救的一个过程,当我一次次和游戏同好讨论游戏想法、克服对于未知的恐惧解决了一个又一个BUG之后我会变得自信。
在家玩游戏,又没有抽到甘雨妹妹
周末也会把Demo给男票京儿玩一玩,虽然Demo本身恶心但是最后他还是通关了,但是整个过程还是收获到了不少快乐。
终于通关的纪念(时间还是有bug,实际不可能这么短
梦想就是一件非常想干的事情,然而这件事哪怕最后不能给你带来生活上极大的富足,但是我就是觉得我想成为这样的人。
说来惭愧因为公司搬得比较远,空闲时间比较少,所以Demo实在是拿不出手,但是还是做一个阶段性的总结吧。
思路
利用机制+马里奥的资源,机制用Unity的Prefab来制作,不同的机制写在枚举里,切换枚举对应不同的表现,做一个难以通关的狗里奥Demo版本。
机制拆解
Demo展示
狗里奥Demo简短展示
https://www.zhihu.com/video/1557095778040090624
机制
问号砖块
思路是利用马里奥砖块本身的属性,只是蘑菇经过了自己修图之后,变成了毒蘑菇,子弹花加了一个滤镜之后也变成了“霸王花”。
砖块类别 | 作用 | 蘑菇 | 吃了不再变大,而是直接中毒挂掉 | 子弹花 | 触碰就挂 | 隐藏砖块 | 只有当碰到的时候才会出现,用来封走位 | 普通砖块 | 只是加金币,没什么实际作用 | 星星 | 一碰出现好多星星,碰到就挂 |
砖块Prefab
绿水管
虽然很想用绿水管做类似隐藏通道的效果,但是因为不知道怎么做(真诚,有知道的也可以直接告诉我...)而作罢,思路就是枚举绿水管的机制,对于不同的机制控制不同子物体的Show/Hide。
绿水管 | 作用 | 尖刺1 | 玩家到绿水管的区域,就会出现,碰到就挂 | 尖刺2 | 玩家到绿水管的区域,就会出现,碰到就挂,触碰范围比尖刺1大,算是进阶版本吧 | 动态尖刺 | 虽然还是碰到就挂,但是尖刺本身是运动的 | 半物理水管 | 上面过不过去,只能下面过去(京儿以为又是bug卡关,然而臣妾冤枉啊 |
绿水管Prefab
砖块
重力砖块,实现也很简单,走上去加刚体,并且设置刚体的重力为True。
重力砖块
软泥怪
玩家接近一定的水平距离,就会从天而降,前期必杀招。
软泥怪
总之,当这么多搞人心态的机制结合在了一起,就组成了狗里奥的关卡。
打不过去只能对着屏幕哔哔赖赖
核心代码
玩家
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour {
public float moveSpeed;
public float additionalSpeedOnRun;
public SpriteRenderer PlayerGrowShrinkRenderer;
public SpriteRenderer TransformToFireMarioRenderer;
private float activeMoveSpeed;
private float currentAdditionalSpeedOnRun;
public float additionalJumpSpeed;
private float currentAdditionalJumpSpeed;
public bool canMove;
[HideInInspector]
public Rigidbody2D myRigidbody;
public float jumpSpeed;
public Transform groundCheck;
public float groundCheckRadius;
public LayerMask whatIsGround;
public bool isGrounded;
bool PauseControl = false;
private Animator myAnim;
private SpriteRenderer mySpriteRenderer;
public Vector3 respawnPosition;
private LevelManager theLevelManager;
public GameObject stompBox;
public float knockBackForce;
public float knockBackLength;
private float knockBackCounter;
public float invincibilityLength;
private float invincibilityCounter;
public AudioSource JumpAudioSource;
public AudioSource PowerupAudioSource;
public GameObject PlayerDies;
private bool onPlatform;
public float onPlatformSpeedModifier;
BoxCollider2D BoxCollider;
CircleCollider2D CircleCollider;
Vector2 saveVelocity = new Vector2 ();
//Vector2 saveAngularVelocity = new Vector2 ();
public static bool PauseAllAnimations = false;
public enum PlayerStates
{
Small, Big, BigFire
};
public static PlayerStates PlayerState;
// Use this for initialization
void Start () {
myRigidbody = GetComponent<Rigidbody2D> ();
myAnim = GetComponent<Animator> ();
mySpriteRenderer = GetComponent<SpriteRenderer> ();
canMove = true;
if (Global.mData.isArchive)
{
//只有一个存档点所以写死
respawnPosition = new Vector3(30.3899994F, -3.47000003F, 0);
}
else
{
respawnPosition = transform.position;
}
transform.position = respawnPosition;
theLevelManager = FindObjectOfType<LevelManager> ();
BoxCollider = GetComponent<BoxCollider2D> ();
CircleCollider = GetComponent<CircleCollider2D> ();
activeMoveSpeed = moveSpeed;
currentAdditionalSpeedOnRun = 0;
currentAdditionalJumpSpeed = 0;
PlayerState = PlayerStates.Small;
TransformMarioToNewSize ();
myAnim.Play(&#34;PlayerIdle&#34;);
onPlatform = true;
}
public void TransformMarioToNewSize()
{
Vector2 v = new Vector2();
switch (PlayerState)
{
case PlayerStates.Small:
myAnim.Play(&#34;PlayerIdle&#34;);
v.x = 0;
v.y = 0.03f;
BoxCollider.offset = v;
v.x = 0.5f;
v.y = 0.59f;
BoxCollider.size = v;
v.x = 0;
v.y = -0.09f;
//CircleCollider.offset = v;
//CircleCollider.radius = 0.23f;
break;
}
}
// Update is called once per frame
void Update () {
if (!PauseControl) {
isGrounded = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround);
if (knockBackCounter <= 0 && canMove) {
if (onPlatform) {
activeMoveSpeed = (moveSpeed + currentAdditionalSpeedOnRun) * onPlatformSpeedModifier;
} else {
activeMoveSpeed = moveSpeed + currentAdditionalSpeedOnRun;
}
if (Input.GetAxisRaw (&#34;Horizontal&#34;) > 0f) {
myRigidbody.velocity = new Vector3 (activeMoveSpeed, myRigidbody.velocity.y, 0f);
mySpriteRenderer.flipX = false;
} else if (Input.GetAxisRaw (&#34;Horizontal&#34;) < 0f) {
myRigidbody.velocity = new Vector3 (-activeMoveSpeed, myRigidbody.velocity.y, 0f);
mySpriteRenderer.flipX = true;
} else {
myRigidbody.velocity = new Vector3 (0f, myRigidbody.velocity.y, 0f);
}
if (Input.GetKeyDown(KeyCode.Space) && isGrounded) {
myRigidbody.velocity = new Vector3 (myRigidbody.velocity.x, jumpSpeed + currentAdditionalJumpSpeed, 0f);
JumpAudioSource.Play ();
}
if (Input.GetKeyDown (KeyCode.B) && isGrounded) {
Debug.Log (&#34;Pressing on run buttton!&#34;);
currentAdditionalSpeedOnRun = additionalSpeedOnRun;
currentAdditionalJumpSpeed = additionalJumpSpeed;
}
if (Input.GetKeyDown(KeyCode.B)) {
Debug.Log (&#34;slow down!&#34;);
currentAdditionalSpeedOnRun = 0;
currentAdditionalJumpSpeed = 0;
}
//theLevelManager.invincible = false;
}
if (knockBackCounter > 0) {
knockBackCounter -= Time.deltaTime;
if (mySpriteRenderer.flipX)
myRigidbody.velocity = new Vector3 (knockBackForce, knockBackForce / 2, 0f);
else
myRigidbody.velocity = new Vector3 (-knockBackForce, knockBackForce / 2, 0f);
}
if (invincibilityCounter > 0) {
invincibilityCounter -= Time.deltaTime;
} else {
//theLevelManager.invincible = false;
}
myAnim.SetFloat (&#34;Speed&#34;, Mathf.Abs (myRigidbody.velocity.x));
myAnim.SetBool (&#34;Grounded&#34;, isGrounded);
if (myRigidbody.velocity.y < 0) {
stompBox.SetActive (true);
} else
{
stompBox.SetActive (false);
}
}
}
private void OnDrawGizmos()
{
Gizmos.color = Color.green;//改变线框的颜色
Gizmos.DrawWireSphere(groundCheck.position, groundCheckRadius);//画圆
}
public void PlayerEnemyCollision() {
Instantiate (PlayerDies, gameObject.transform.position, gameObject.transform.rotation);
PauseAllAnimations = true;
theLevelManager.levelMusic.Stop ();
PauseControl = true;
gameObject.SetActive (false);
}
public void PlayerDied()
{
Instantiate(PlayerDies, gameObject.transform.position, gameObject.transform.rotation);
PauseAllAnimations = true;
theLevelManager.levelMusic.Stop();
PauseControl = true;
gameObject.SetActive(false);
}
public void OnEnable() {
knockBackCounter = 0;
}
void OnTriggerEnter2D(Collider2D other) {
if (other.tag == &#34;KillPlane&#34;) {
theLevelManager.HurtPlayer(1);
}
if (other.tag == &#34;Checkpoint&#34;) {
respawnPosition = other.transform.position;
}
if (other.tag == &#34;Mushroom&#34;|| other.tag == &#34;Flower&#34; ) {
Destroy (other.gameObject);
theLevelManager.HurtPlayer(1);
}
if (other.tag == &#34;GravityBox&#34;)
{
if (!other.gameObject.GetComponent<Rigidbody2D>())
{
Rigidbody2D rb_box = other.gameObject.AddComponent<Rigidbody2D>();
rb_box.gravityScale = 1.0f;
}
}
// 软泥怪
if (other.tag == &#34;BadFlower&#34;)
{
other.gameObject.SetActive(false);
theLevelManager.HurtPlayer(1);
}
}
void PauseMarioWhileShrink() {
PauseAllAnimations = true;
PauseControl = true;
saveVelocity = myRigidbody.velocity;
//saveAngularVelocity = myRigidbody.angularVelocity;
myRigidbody.velocity = Vector3.zero;
myRigidbody.isKinematic = true;
myAnim.Play (&#34;ShrinkPlayer&#34;);
}
void OnCollisionEnter2D(Collision2D other) {
if (other.gameObject.tag == &#34;MovingPlatform&#34;) {
transform.parent = other.transform;
onPlatform = true;
}
if (other.gameObject.tag == &#34;GravityBox&#34;)
{
if (!other.gameObject.GetComponent<Rigidbody2D>())
{
Rigidbody2D rb_box = other.gameObject.AddComponent<Rigidbody2D>();
rb_box.gravityScale = 1.0f;
}
}
}
void OnCollisionExit2D(Collision2D other) {
if (other.gameObject.tag == &#34;MovingPlatform&#34;) {
transform.parent = null;
onPlatform = false;
}
}
}
问号砖块
using UnityEngine;
using System.Collections;
public class QuestionMark : MonoBehaviour {
Animator theAnimator;
/// <summary>
/// JumpShowCoin:马里奥跳下去往上跳才显示,分成两种情况,从下往上,进入的时候显示,从上往下,离开的时候显示
/// UnableCoin:马里奥碰到就显示
/// Coin:默认显示的金币
/// MushroomOrFlower:默认显示的蘑菇,大人就是显示花,花碰到就挂
/// Death:里面出来的鬼东西碰到就挂
/// </summary>
public enum Prize {JumpShowCoin, UnableCoin, Coin, MushroomOrFlower, Death}
public Prize prize = Prize.Coin;
private bool hitLeft = true;
public GameObject mushroomPrefab;
public GameObject flowerPrefab;
public AudioSource PowerupAppearsAudioSource;
public AudioSource BumpAudioSource;
public AudioSource CoinAudioSource;
private Transform bg;
private LevelManager theLevelManager;
// Use this for initialization
void Start () {
theAnimator = GetComponent<Animator> ();
if (prize == Prize.UnableCoin|| prize == Prize.JumpShowCoin)
{
bg= transform.Find(&#34;Block&#34;);
bg.gameObject.SetActive(false);
}
theLevelManager = FindObjectOfType<LevelManager>();
}
// Update is called once per frame
void Update () {
}
private void OnTriggerExit2D(Collider2D other)
{
if (prize == Prize.JumpShowCoin && other.tag == &#34;Player&#34;)
{
if (GetComponent<BoxCollider2D>()&& other.gameObject.GetComponent<Rigidbody2D>())
{
if (other.gameObject.GetComponent<Rigidbody2D>().velocity.y < 0 &&
GetComponent<BoxCollider2D>().isTrigger == true)
{
bg.gameObject.SetActive(true);
GetComponent<BoxCollider2D>().isTrigger = false;
theAnimator.SetTrigger(&#34;Hit&#34;);
CoinAudioSource.Play();
theLevelManager.AddCoin();
}
}
}
}
void OnTriggerEnter2D(Collider2D other) {
/// JumpShowCoin:马里奥跳下去往上跳才显示,分成两种情况,从下往上,进入的时候显示,从上往下,离开的时候显示
/// UnableCoin:马里奥碰到就显示
if (prize == Prize.UnableCoin&& other.tag == &#34;Player&#34;)
{
Debug.Log(other.gameObject.name);
bg.gameObject.SetActive(true);
theLevelManager.AddCoin();
}
if (prize == Prize.JumpShowCoin )
{
if (GetComponent<BoxCollider2D>() && other.gameObject.GetComponent<Rigidbody2D>())
{
if (other.gameObject.GetComponent<Rigidbody2D>().velocity.y > 0&&
GetComponent<BoxCollider2D>().isTrigger == true )
{
bg.gameObject.SetActive(true);
GetComponent<BoxCollider2D>().isTrigger = false;
theAnimator.SetTrigger(&#34;Hit&#34;);
CoinAudioSource.Play();
theLevelManager.AddCoin();
}
}
}
if (other.tag == &#34;Player&#34;) {
BumpAudioSource.Play ();
}
if (other.tag == &#34;Player&#34; && hitLeft) {
if (prize == Prize.Coin|| prize == Prize.UnableCoin ) {
theAnimator.SetTrigger (&#34;Hit&#34;);
CoinAudioSource.Play ();
theLevelManager.AddCoin();
}
if (prize == Prize.MushroomOrFlower)
{
int i = Random.Range(0, 2);
if(i%2==0)
{
theAnimator.SetTrigger(&#34;HitMushroom&#34;);
PowerupAppearsAudioSource.Play();
}
else
{
theAnimator.SetTrigger(&#34;HitFlower&#34;);
}
}
hitLeft = false;
}
}
void OnMushroomAnimationEnd() {
Transform mushTransform = GetComponent<Transform> ();
GameObject mushroomInstance = (GameObject)Instantiate (mushroomPrefab, (mushTransform.position - new Vector3(0,-0.8f,0)), Quaternion.identity);
mushroomInstance.GetComponent<Transform> ().parent = null;
}
void OnFlowerAnimationEnd() {
Transform theTransform = GetComponent<Transform> ();
GameObject flowerInstance = (GameObject)Instantiate (flowerPrefab, (theTransform.position - new Vector3(0,-0.74f,0)), Quaternion.identity);
flowerInstance.GetComponent<Transform> ().parent = null;
}
}
问号砖块
using UnityEngine;
using System.Collections;
public class QuestionMark : MonoBehaviour {
Animator theAnimator;
/// <summary>
/// JumpShowCoin:马里奥跳下去往上跳才显示,分成两种情况,从下往上,进入的时候显示,从上往下,离开的时候显示
/// UnableCoin:马里奥碰到就显示
/// Coin:默认显示的金币
/// MushroomOrFlower:默认显示的蘑菇,大人就是显示花,花碰到就挂
/// Death:里面出来的鬼东西碰到就挂
/// </summary>
public enum Prize {JumpShowCoin, UnableCoin, Coin, MushroomOrFlower, Death}
public Prize prize = Prize.Coin;
private bool hitLeft = true;
public GameObject mushroomPrefab;
public GameObject flowerPrefab;
public AudioSource PowerupAppearsAudioSource;
public AudioSource BumpAudioSource;
public AudioSource CoinAudioSource;
private Transform bg;
private LevelManager theLevelManager;
// Use this for initialization
void Start () {
theAnimator = GetComponent<Animator> ();
if (prize == Prize.UnableCoin|| prize == Prize.JumpShowCoin)
{
bg= transform.Find(&#34;Block&#34;);
bg.gameObject.SetActive(false);
}
theLevelManager = FindObjectOfType<LevelManager>();
}
// Update is called once per frame
void Update () {
}
private void OnTriggerExit2D(Collider2D other)
{
if (prize == Prize.JumpShowCoin && other.tag == &#34;Player&#34;)
{
if (GetComponent<BoxCollider2D>()&& other.gameObject.GetComponent<Rigidbody2D>())
{
if (other.gameObject.GetComponent<Rigidbody2D>().velocity.y < 0 &&
GetComponent<BoxCollider2D>().isTrigger == true)
{
bg.gameObject.SetActive(true);
GetComponent<BoxCollider2D>().isTrigger = false;
theAnimator.SetTrigger(&#34;Hit&#34;);
CoinAudioSource.Play();
theLevelManager.AddCoin();
}
}
}
}
void OnTriggerEnter2D(Collider2D other) {
/// JumpShowCoin:马里奥跳下去往上跳才显示,分成两种情况,从下往上,进入的时候显示,从上往下,离开的时候显示
/// UnableCoin:马里奥碰到就显示
if (prize == Prize.UnableCoin&& other.tag == &#34;Player&#34;)
{
Debug.Log(other.gameObject.name);
bg.gameObject.SetActive(true);
theLevelManager.AddCoin();
}
if (prize == Prize.JumpShowCoin )
{
if (GetComponent<BoxCollider2D>() && other.gameObject.GetComponent<Rigidbody2D>())
{
if (other.gameObject.GetComponent<Rigidbody2D>().velocity.y > 0&&
GetComponent<BoxCollider2D>().isTrigger == true )
{
bg.gameObject.SetActive(true);
GetComponent<BoxCollider2D>().isTrigger = false;
theAnimator.SetTrigger(&#34;Hit&#34;);
CoinAudioSource.Play();
theLevelManager.AddCoin();
}
}
}
if (other.tag == &#34;Player&#34;) {
BumpAudioSource.Play ();
}
if (other.tag == &#34;Player&#34; && hitLeft) {
if (prize == Prize.Coin|| prize == Prize.UnableCoin ) {
theAnimator.SetTrigger (&#34;Hit&#34;);
CoinAudioSource.Play ();
theLevelManager.AddCoin();
}
if (prize == Prize.MushroomOrFlower)
{
int i = Random.Range(0, 2);
if(i%2==0)
{
theAnimator.SetTrigger(&#34;HitMushroom&#34;);
PowerupAppearsAudioSource.Play();
}
else
{
theAnimator.SetTrigger(&#34;HitFlower&#34;);
}
}
hitLeft = false;
}
}
void OnMushroomAnimationEnd() {
Transform mushTransform = GetComponent<Transform> ();
GameObject mushroomInstance = (GameObject)Instantiate (mushroomPrefab, (mushTransform.position - new Vector3(0,-0.8f,0)), Quaternion.identity);
mushroomInstance.GetComponent<Transform> ().parent = null;
}
void OnFlowerAnimationEnd() {
Transform theTransform = GetComponent<Transform> ();
GameObject flowerInstance = (GameObject)Instantiate (flowerPrefab, (theTransform.position - new Vector3(0,-0.74f,0)), Quaternion.identity);
flowerInstance.GetComponent<Transform> ().parent = null;
}
}
绿水管
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GreenTubeController : MonoBehaviour
{
public enum Prize { None, Flower, StaticSpawn, DynamicSpawn}
public Prize prize = Prize.None;
// 动态炸弹出现的声音
public AudioSource DynamicSpawnSound;
// 静态炸弹出现的声音
public AudioSource StaticSpawnSound;
// 花花出现的声音
public AudioSource FlowerSound;
//是否已经踩过坑了
private bool hitLeft = true;
public GameObject flowerObj;
public GameObject staticObj;
public GameObject dynamicObj;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
private void OnTriggerEnter2D(Collider2D other)
{
// 只有当人物下方踩到才算是触发!!!写死
Debug.Log(other.gameObject.name);
if (other.gameObject.name == &#34;StompBox&#34;)
{
if (hitLeft)
{
switch (prize)
{
case Prize.Flower:
flowerObj.SetActive(true);
FlowerSound.Play();
break;
case Prize.StaticSpawn:
StartCoroutine(StaticSpawn());
StaticSpawnSound.Play();
break;
case Prize.DynamicSpawn:
dynamicObj.SetActive(true);
DynamicSpawnSound.Play();
break;
}
hitLeft = false;
}
}
}
public IEnumerator StaticSpawn()
{
yield return new WaitForSeconds(0.5f);
staticObj.SetActive(true);
}
}
管理类
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using UnityEngine.SceneManagement;
public class Global
{
public static Global mData = new Global();
public int maxHealth = 2;
public bool isArchive = false;
public int midTime = 0;
public Global()
{
}
}
public class LevelManager : MonoBehaviour {
public float waitToRespawn;
public PlayerController thePlayer;
public GameObject deathExplosion;
public int coinCount;
public int bonusLifeThreshold;
public Text coinText;
// 當前場景生命
public int healthCount;
private bool respawning;
private ResetOnRespawn[] objectsToReset;
public GameObject gameScreen;
public Text deathText;
public Text life;
public GameObject endScreen;
public Text endText;
public Text endlife;
public AudioSource levelMusic;
public AudioSource coinAudioSource;
private bool isMid=false;
private int useTime;
// Use this for initialization
void Start () {
thePlayer = FindObjectOfType<PlayerController> ();
// 当前血量
healthCount = 1;
gameScreen.SetActive(false);
endScreen.SetActive(false);
life.text = healthCount.ToString();
objectsToReset = FindObjectsOfType<ResetOnRespawn> ();
coinText.text = &#34;00&#34; /*+ coinCount*/;
Invoke(&#34;AddTime&#34;, 1f);
}
// Update is called once per frame
void Update () {
// 当前场景生命
if (healthCount <= 0&&!respawning) {
Respawn ();
respawning = true;
}
if (gameScreen.activeInHierarchy)
{
if (Input.GetKeyDown(KeyCode.Y))
{
PlayerPrefs.SetInt(&#34;CoinCount&#34;, 0);
PlayerPrefs.SetInt(&#34;PlayerLives&#34;, Global.mData.maxHealth);
PlayerController.PauseAllAnimations = false;
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
if (Input.GetKeyDown(KeyCode.N))
{
Application.Quit();
}
}
}
public void ShowSuccess()
{
endScreen.SetActive(true);
if (Global.mData.isArchive)
{
useTime += Global.mData.midTime;
}
if (useTime > 60)
{
int min = useTime / 60;
int s = useTime % 60;
if (min > 10)
{
endText.text = string.Format(&#34;{0}m{1}s才通关,太慢了叭!&#34;, min.ToString(), s.ToString());
}
else
{
endText.text = string.Format(&#34;太棒了,{0}m{1}s就通关啦!&#34;, min.ToString(), s.ToString());
}
}
else {
int s = useTime % 60;
endText.text = string.Format(&#34;有奖励哦,{0}s就通关啦!&#34;, s.ToString());
}
endlife.text = Global.mData.maxHealth.ToString();
}
void AddTime()
{
useTime++;
Invoke(&#34;AddTime&#34;, 1f);
if (Global.mData.isArchive == true && !isMid)
{
Global.mData.midTime = useTime;
isMid = true;
}
}
public void Respawn()
{
CancelInvoke(&#34;AddTime&#34;);
Global.mData.maxHealth -= 1;
StartCoroutine(RespawnCo());
thePlayer.gameObject.SetActive (false);
levelMusic.Stop ();
}
public void AddCoin()
{
coinCount += 200;
coinText.text = coinCount.ToString();
}
public IEnumerator RespawnCo() {
thePlayer.gameObject.SetActive (false);
Instantiate (deathExplosion, thePlayer.transform.position, thePlayer.transform.rotation);
yield return new WaitForSeconds (waitToRespawn);
gameScreen.SetActive(true);
if (useTime > 60)
{
int min = useTime / 60;
int s = useTime % 60;
deathText.text = string.Format(&#34;仅仅用{0}m{1}s就寄了&#34;, min.ToString(), s.ToString());
}
else
{
int s = useTime;
deathText.text = string.Format(&#34;仅仅用{0}s就寄了&#34;, s.ToString());
}
life.text = Global.mData.maxHealth.ToString();
coinCount = 0;
thePlayer.transform.position = thePlayer.respawnPosition;
thePlayer.gameObject.SetActive (true);
for (int i = 0; i < objectsToReset.Length; ++i) {
objectsToReset .gameObject.SetActive (true);
objectsToReset .ResetObject ();
}
}
public void HurtPlayer(int damageToTake) {
healthCount-= damageToTake;
thePlayer.PlayerEnemyCollision ();
}
}
未来计划
做个Boss关!
玩法示意 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|