一,設置
二,腳本
1,PlayerController
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour { private Rigidbody2D m_rg; public float MoveSpeed; public float JumpSpeed; //在角色下添加一個空物體 //設置一個跳躍監測點 public Transform CheckPoint; //設置一個跳躍監測半徑 public float CheckRadius; //設置一個跳躍監測層---角色與地面的檢測 public LayerMask WhatIsGround; //角色默認是否着地--true public bool isGround; private Animator Anim; //存儲復活點的位置信息 public Vector2 RespawnPosition; public LevelManager theLevel; void Start () { m_rg = gameObject.GetComponent<Rigidbody2D>(); Anim = gameObject.GetComponent<Animator>(); //游戲剛開始時,玩家的重生點,就是當前的初始位置點 RespawnPosition = transform.position; theLevel = FindObjectOfType<LevelManager>(); } // Update is called once per frame void Update () { // isGround = Physics2D.OverlapCircle(CheckPoint.position, CheckRadius, WhatIsGround); //m_rg.gameObject.transform.rotation= Quaternion.identity; //------------------Input.GetAxisRaw沒有小數值,只有整數,不會產生緩動------------------ //角色水平移動 //按住D鍵,判斷如果大於0,則向右開始移動 if (Input.GetAxisRaw("Horizontal") > 0) { m_rg.velocity = new Vector2(MoveSpeed, m_rg.velocity.y); //設置自身縮放的值 transform.localScale = new Vector2(1f,1f); } //角色水平移動 //按住A鍵,判斷如果小於0,則向左開始移動 else if (Input.GetAxisRaw("Horizontal") < 0) { m_rg.velocity = new Vector2(-MoveSpeed, m_rg.velocity.y); //如果new Vector2(-1f, 1f) x值為負數,則圖片進行反轉顯示 transform.localScale = new Vector2(-1f, 1f); } else //角色水平移動 //松開按鍵,判斷如果等於0,則停止移動 { m_rg.velocity = new Vector2(0, m_rg.velocity.y); } //角色按下空格鍵實現跳躍 //禁止二連跳 //要先判斷角色是否在地面上,在地面上可以跳,不在地面上則不能跳 if (Input.GetButtonDown("Jump")&& isGround) { m_rg.velocity = new Vector2(m_rg.velocity.x,JumpSpeed); } Anim.SetFloat("Speed", m_rg.velocity.x); Anim.SetBool("Grouned", isGround); } private void OnTriggerEnter2D(Collider2D collision) { if (collision.tag=="KillPlane") { //gameObject.SetActive(false); //使當前玩家的位置點為,保存的復活點位置 //transform.position = RespawnPosition; theLevel.Respawn(); } //角色與當前的復活點進行碰撞檢測 //把當前角色的位置信息,設置為重生的復活點 if (collision.tag == "CheckPoint") { RespawnPosition = collision.transform.position; } } /// <summary> /// 實現角色跟隨移動平台一起運動 /// 把角色的父物體設置為移動平台 /// </summary> /// <param name="collision"></param> private void OnCollisionEnter2D(Collision2D collision) { Debug.Log("碰撞到的那個吊毛叫什么名字:"+ collision.gameObject.name); if (collision.gameObject.tag == "MovePlatForm") { transform.parent = collision.transform; Debug.Log("碰撞到的那個吊毛的父物體什么名字:" + transform.parent); } } private void OnCollisionExit2D(Collision2D collision) { if (collision.gameObject.tag == "MovePlatForm") { transform.parent = null; } } }
2,MovePlatFromController
using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 平台移動腳本 /// </summary> public class MovePlatFromController : MonoBehaviour { //要移動的物體 public GameObject PlatForm; //要移動物體開始的點 public Transform StartPoint; //要移動物體結束的點 public Transform EndPoint; //要移動物體的移動速度 public float MoveSpeed; //要移動到的目標點 public Vector2 target; void Start () { target = EndPoint.position; } // Update is called once per frame void Update () { //把物體移動到指定的位置點上 PlatForm.transform.position = Vector2.MoveTowards(PlatForm.transform.position, target, MoveSpeed*Time.deltaTime); //實現物體來回移動 if (PlatForm.transform.position == EndPoint.position) { target = StartPoint.position; } if (PlatForm.transform.position == StartPoint.position) { target = EndPoint.position; } } }