Unity2D Roguelike tutorial 学习03

发布时间:2017-7-1 11:41:18编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Unity2D Roguelike tutorial 学习03 ",主要涉及到Unity2D Roguelike tutorial 学习03 方面的内容,对于Unity2D Roguelike tutorial 学习03 感兴趣的同学可以参考一下。

1.创建MoveObjects移动基类

Code:

using UnityEngine;using System.Collections;public abstract class MovingObject : MonoBehaviour{    public float moveTime = 0.1f;    public LayerMask blockingLayer;    private BoxCollider2D boxCollider;    private Rigidbody2D rb2D;    private float inverseMoveTime;	// Use this for initialization	protected virtual void Start () {	    boxCollider = GetComponent<BoxCollider2D>();	    rb2D = GetComponent<Rigidbody2D>();        //通过存储移动时间的倒数,我们可以使用乘法而不是划分,这是更有效的。         inverseMoveTime = 1f/moveTime;	}    //当可以移动式返回true,否则返回false    protected bool Move(int xDir,int yDir,out RaycastHit2D hit)    {        Vector2 start = transform.position;        Vector2 end = start + new Vector2(xDir, yDir);        boxCollider.enabled = false;        hit = Physics2D.Linecast(start, end, blockingLayer);//http://www.ceeger.com/Script/Physics/Physics.Linecast.html        boxCollider.enabled = true;        if (hit.transform == null)        {            StartCoroutine(SmoothMovement(end));            return true;        }        return false;    }    //通过协程来控制对象从一个位置移动到下一个位置    protected IEnumerator SmoothMovement(Vector3 end)    {        float sqrRmainDistance = (transform.position - end).sqrMagnitude;        while (sqrRmainDistance>float.Epsilon)        {            Vector3 newPostion = Vector3.MoveTowards(rb2D.position, end, inverseMoveTime*Time.deltaTime);            rb2D.MovePosition(newPostion);            sqrRmainDistance = (transform.position - end).sqrMagnitude;            yield return null;        }    }    //该虚方法指定为component组件类型的泛型T来与可以阻挡玩家移动的对象交互    protected virtual void AttemptMove<T>(int xDir, int yDir)        where T : Component    {        RaycastHit2D hit;        bool canMove = Move(xDir, yDir, out hit);        if (hit.transform == null)            return;        T hitComponet = hit.transform.GetComponent<T>();        if(!canMove&&hitComponet!=null)            OnCantMove(hitComponet);    }    protected abstract void OnCantMove<T>(T componet)        where T : Component;}


上一篇:redis 数据库
下一篇:安装goimports

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款