当前位置: 首页 > news >正文

移动网站与pc网站互联网行业都有哪些公司

移动网站与pc网站,互联网行业都有哪些公司,贵阳seo计费管理,刷百度指数目录 GeneRope.cs 场景绳索生成类 HeroColliderController.cs 控制角色与单向平台是否忽略碰撞 HeroClampController.cs 控制角色攀爬 OnTriggerEnter2D方法 OnTriggerStay2D方法 OnTriggerExit2D方法 Update方法 开始攀爬 结束攀爬 Sensor_HeroKnight.cs 角色触发器…目录 GeneRope.cs 场景绳索生成类  HeroColliderController.cs 控制角色与单向平台是否忽略碰撞 HeroClampController.cs 控制角色攀爬 OnTriggerEnter2D方法 OnTriggerStay2D方法 OnTriggerExit2D方法 Update方法 开始攀爬 结束攀爬 Sensor_HeroKnight.cs 角色触发器 HeroKnight.cs 角色类 基于【Unity3D】实现横版2D游戏——单向平台简易版-CSDN博客 实现了单向平台后才能进行攀爬绳索到平台否则攀爬到平台后会被阻挡以及无法从平台往下攀爬。 GeneRope.cs 场景绳索生成类  GitHub - dbrizov/NaughtyAttributes: Attribute Extensions for Unity 上面是一个特性能够让脚本上出现一个按钮去点击执行我们的生成绳索方法    用法[Button(Generate Rope)] 写在生成绳索方法头部。 绳索标签Rope using System.Collections; using NaughtyAttributes; using System.Collections.Generic; using UnityEngine;[ExecuteInEditMode] public class GeneRope : MonoBehaviour {public Sprite top;public Sprite middle;public Sprite bottom;public int ropeNodeCount;public Vector2 ropeNodeSize;ListGameObject nodeList;BoxCollider2D boxCollider2D;[Button(Generate Rope)]public void GenerateRope(){//清理if (nodeList null){nodeList new ListGameObject();}else{for (int i nodeList.Count - 1; i 0; i--){DestroyImmediate(nodeList[i]);}nodeList.Clear();}Transform[] childrens transform.GetComponentsInChildrenTransform();if (childrens ! null childrens.Length 0){for (int i childrens.Length - 1; i 0; i--){if (childrens[i].gameObject ! this.gameObject){DestroyImmediate(childrens[i].gameObject);}}}//生成绳索节点图片for (int i 0; i ropeNodeCount; i){Sprite sprite;if (i 0){//头部sprite top;}else if (i ropeNodeCount - 1){//尾部sprite bottom;}else{//中间sprite middle;}SpriteRenderer sp new GameObject(node_ i, typeof(SpriteRenderer)).GetComponentSpriteRenderer();sp.sprite sprite;nodeList.Add(sp.gameObject);sp.transform.SetParent(transform);//从根节点向下延伸的绳索sp.transform.localPosition new Vector3(0, i * -ropeNodeSize.y - 0.5f, 0);}//生成绳索碰撞体1个boxCollider2D GetComponentBoxCollider2D();if (boxCollider2D null){boxCollider2D gameObject.AddComponentBoxCollider2D();}boxCollider2D.size new Vector2(ropeNodeSize.x, ropeNodeSize.y * ropeNodeCount);boxCollider2D.offset new Vector2(0, boxCollider2D.size.y * -0.5f);boxCollider2D.isTrigger true;//绳索标签触发检测使用判定是否为绳索处理攀爬逻辑gameObject.tag Rope;} }HeroColliderController.cs 控制角色与单向平台是否忽略碰撞 using System.Collections; using System.Collections.Generic; using UnityEngine;public class HeroColliderController : MonoBehaviour {BoxCollider2D heroCollider;public bool isOn;Collider2D m_Collision;public bool isIgnoreCollision false;private void Awake(){heroCollider GetComponentBoxCollider2D();}IEnumerator StartIgnoreCollision(Collider2D collider2D){//Debug.Log(忽略碰撞);//等待人物完整地达到平台上 或 平台下时 退出死循环while (isOn){yield return new WaitForEndOfFrame();}//Debug.Log(恢复);Physics2D.IgnoreCollision(heroCollider, collider2D, false); //恢复isIgnoreCollision false;isOn false;}private void OnTriggerEnter2D(Collider2D collision){//实现从下往上跳跃穿过单向平台效果if (collision ! null collision.gameObject.tag SingleDirCollider !isOn){//this.transform.position.y 0.062f是人物minYif (collision.GetComponentSingleDirCollider().maxY (this.transform.position.y 0.062f)){IgnoreCollision(collision);}}}private void OnCollisionStay2D(Collision2D collision){//实现按下↓键位 让角色从单方向平台往下掉效果if (Input.GetKeyDown(KeyCode.DownArrow) collision.gameObject.tag SingleDirCollider){IgnoreCollision(collision.collider);}}public void IgnoreCollision(Collider2D collision){isOn true;m_Collision collision;Physics2D.IgnoreCollision(heroCollider, collision); //这2个碰撞体互相忽略碰撞isIgnoreCollision true;StartCoroutine(StartIgnoreCollision(collision));}public void ResumeCollider(){Physics2D.IgnoreCollision(heroCollider, m_Collision, false); //恢复isOn false;isIgnoreCollision false;}private void OnTriggerExit2D(Collider2D collision){if (collision ! null collision.gameObject.tag SingleDirCollider isOn){var singleDirCollider collision.GetComponentSingleDirCollider();//this.transform.position.y 0.062f是人物minY, this.transform.position.y 1.31f是人物maxY//当人物完整地位于平台之上 或 之下时if (singleDirCollider.maxY (this.transform.position.y 0.062f) || singleDirCollider.minY (this.transform.position.y 1.31f)){//协程死循环退出isOn false;}}} }HeroClampController.cs 控制角色攀爬 OnTriggerEnter2D方法 当某个触发器检测到单向平台持有它 并 triggerCount计数1 OnTriggerStay2D方法 当角色检测到绳索时角色底部在绳索顶部之上需要按↓键才开始往下爬此时需要立刻将角色底部瞬移到绳索顶部之下避免与结束攀爬条件3冲突即 //3.接触单向平台 且人物在单向平台之上时 离开攀爬 lastIsTouchSingleDirPlatform (singleDirCollider.maxY) (heroKnight.transform.position.y 0.062f); 角色底部在绳索顶部之下需要按↑键才开始往上爬。  OnTriggerExit2D方法 检测到某个触发器离开单向平台时triggerCount计数-1当triggerCount为0时需要进行结束攀爬条件2判定 //2.接触单向平台 且人物在单向平台之上时 离开攀爬 lastIsTouchSingleDirPlatform (singleDirCollider.maxY) (heroKnight.transform.position.y 0.062f); 并且将持有的单向平台脚本置空 singleDirCollider null; Update方法 检查到攀爬中会使用角色类heroKnight.MoveY移动角色进行匀速运动上下攀爬。 进行结束攀爬条件12种情况 1、isGrounds !singleDirCollider 在地面且没有接触中的单向平台结束攀爬 2、isGrounds singleDirCollider (singleDirCollider.maxY) (heroKnight.transform.position.y 0.062f)在地面且接触单向平台中且角色在平台之上结束攀爬。 开始攀爬 需要立即忽略重力影响以及接触中的单向平台碰撞体否则会发生异常。 结束攀爬 需要立即恢复重力以及碰撞体 using System.Collections; using System.Collections.Generic; using UnityEngine;public class HeroClampController : MonoBehaviour {//英雄类对象 控制移动HeroKnight heroKnight;//是否处于攀爬状态public bool isOn;//仅用于观察、调试参数public bool heroGround;//仅用于观察 绳索Y参数public float ropeY;//攀爬速度public float speed 2f;//攀爬达到的单向平台private SingleDirCollider singleDirCollider;private int triggerCount 0; //可能会有多个触发检测到平台需要用计数形式来检测 是否完全离开平台//一个控制是否忽略角色与平台碰撞的控制器攀爬开始 检测到平台会立刻忽略碰撞 防止角色和平台发生碰撞 以及结束攀爬时立即恢复碰撞 让玩家站在上面private HeroColliderController heroColliderController;//仅用于观测数据 调试 : 上次是否触碰到单向平台 并恰好离开了平台 标记public bool lastIsTouchSingleDirPlatform;void Start(){heroKnight GetComponentHeroKnight();heroColliderController GetComponentHeroColliderController();}public float InputY{get{return Input.GetAxis(Vertical);}}private void Update(){heroGround heroKnight.IsGrounded();if (isOn){//攀爬移动float inputY InputY;heroKnight.MoveY(inputY * speed * Time.deltaTime);//Debug.Log(攀爬: (inputY * speed * Time.deltaTime) , posY: (heroKnight.transform.position.y 0.062f));bool isGrounds heroKnight.IsGrounded();//1.接触地面 离开攀爬//2.接触单向平台 且人物在单向平台之上时 离开攀爬bool isTouchGround isGrounds !singleDirCollider;bool isTouchSingleDirPlatform isGrounds singleDirCollider (singleDirCollider.maxY) (heroKnight.transform.position.y 0.062f);if (isTouchGround || isTouchSingleDirPlatform){EndClamp();//Debug.LogError(攀爬结束 isOn: isOn , isTouchGround: isTouchGround , isTouchSingleDirPlatform: isTouchSingleDirPlatform// singleDirCollider.maxY: singleDirCollider?.maxY , posY: (heroKnight.transform.position.y 0.062f));}}}private void OnTriggerEnter2D(Collider2D collision){//触发检测到平台 持有它if (collision.tag SingleDirCollider){triggerCount;singleDirCollider collision.transform.GetComponentSingleDirCollider();}}private void OnTriggerStay2D(Collider2D collision){if (isOn singleDirCollider ! null){//3.接触单向平台 且人物在单向平台之上时 离开攀爬lastIsTouchSingleDirPlatform (singleDirCollider.maxY) (heroKnight.transform.position.y 0.062f);//Debug.LogError(离开时: (singleDirCollider.maxY) , HeroY: (heroKnight.transform.position.y 0.062f)); if (lastIsTouchSingleDirPlatform){EndClamp();//Debug.LogError( 3333 攀爬结束 isOn: isOn , isTouchSingleDirPlatform: lastIsTouchSingleDirPlatform// singleDirCollider.maxY: singleDirCollider?.maxY , posY: (heroKnight.transform.position.y 0.062f));}}if (collision.tag Rope !isOn){float inputY InputY;bool hasInput Mathf.Abs(inputY) 0;bool isGrounds heroKnight.IsGrounded();bool isValidInput !isGrounds; //非站立地面则允许攀爬float heroY heroKnight.transform.position.y 0.062f;float ropeY collision.transform.position.y;float deltaY Mathf.Abs(heroY - ropeY); //绳索顶部和英雄底部的差值//若站立地面上if (hasInput isGrounds){this.ropeY ropeY;if (heroY ropeY){isValidInput inputY 0; //角色位于绳索上方,按↓键才能攀爬}else{isValidInput inputY 0; //角色位于绳索下方,按↑键才能攀爬}}//Debug.Log(isValidInput: isValidInput inputY : inputY , heroY: heroY , ropeY: ropeY);if (hasInput isValidInput) //可以检测角色中心点x是否在绳索范围内才进入攀爬状态{var hero heroKnight.transform;var rope collision.transform;int dir (inputY 0 ? 0 : -1); //按↑时不需要偏移Y值按↓时进行偏移//Debug.LogError(攀爬开始 heroY: heroY , ropeY: ropeY , inputY: inputY , isGrounds: isGrounds);//当角色从绳索顶部往下爬时需要增加一个Y轴偏移 使得角色底部位于绳索顶部之下 避免发生临界点问题//避免开始攀爬 又会检测到物体在绳索上而结束攀爬的情况float offsetY 0f;if (heroY ropeY){offsetY -deltaY - 0.01f;}hero.position new Vector3(rope.position.x, hero.position.y offsetY, 0);isOn true;heroKnight.isClamp true;heroKnight.BlockGravity(true); //禁用重力影响if (singleDirCollider ! null){heroColliderController.IgnoreCollision(singleDirCollider.GetComponentBoxCollider2D()); //主动忽略碰撞体}//heroKnight.MoveY(inputY * speed * Time.deltaTime);//Debug.LogError(攀爬开始 isOn: isOn , heroY: (hero.position.y 0.062f) , dir * deltaY: dir * deltaY);}}//Debug.Log(heroKnight.transform.position.y 0.062f: (heroKnight.transform.position.y 0.062f));}private void OnTriggerExit2D(Collider2D collision){if (collision.tag SingleDirCollider singleDirCollider ! null collision.gameObject singleDirCollider.gameObject){triggerCount--;if (triggerCount 0){if (isOn){//2.接触单向平台 且人物在单向平台之上时 离开攀爬lastIsTouchSingleDirPlatform (singleDirCollider.maxY) (heroKnight.transform.position.y 0.062f);//Debug.LogError(离开时: (singleDirCollider.maxY) , HeroY: (heroKnight.transform.position.y 0.062f)); if (lastIsTouchSingleDirPlatform){EndClamp();//Debug.LogError( 2222 攀爬结束 isOn: isOn , isTouchSingleDirPlatform: lastIsTouchSingleDirPlatform// singleDirCollider.maxY: singleDirCollider?.maxY , posY: (heroKnight.transform.position.y 0.062f));}}singleDirCollider null;}}//还有其他的情况 退出攀爬状态的比如攀爬中允许跳出去之类的 就还要写类似计数形式的 检测是否完全离开了绳索再结束攀爬状态isOn false//if (collision.tag Rope)//{// isOn false;//}}/// summary/// 结束攀爬/// /summaryprivate void EndClamp(){isOn false;heroKnight.isClamp false;heroKnight.BlockGravity(false); //恢复重力影响if (heroColliderController ! null){heroColliderController.ResumeCollider(); //恢复碰撞体}} }Sensor_HeroKnight.cs 角色触发器 主要是忽略对Rope绳索层的检测否则角色会认为绳索是地面或障碍物。 using UnityEngine; using System.Collections;public class Sensor_HeroKnight : MonoBehaviour {public int m_ColCount 0;public float m_DisableTimer;public bool m_State;private void OnEnable(){m_ColCount 0;}public bool State(){if (m_DisableTimer 0){m_State false;return m_State;}m_State m_ColCount 0;return m_State;}void OnTriggerEnter2D(Collider2D other){if (other.tag ! Rope){m_ColCount;}}void OnTriggerExit2D(Collider2D other){if (other.tag ! Rope){m_ColCount--;}}void Update(){m_DisableTimer - Time.deltaTime;}public void Disable(float duration){m_DisableTimer duration;} }HeroKnight.cs 角色类 如下是部分代码新增isClamp是否攀爬中标记Move和Roll判定要加上非攀爬中才允许进行新增MoveY攀爬时上下移动使用、BlockGravity禁用重力影响 攀爬时会禁用、IsGrounded获取是否真正在地面上 public bool isClamp;// Moveif (!m_rolling !isClamp )m_body2d.velocity new Vector2(inputX * m_speed, m_body2d.velocity.y);// Rollelse if (Input.GetKeyDown(left shift) !m_rolling !isClamp){m_rolling true;m_animator.SetTrigger(Roll);m_body2d.velocity new Vector2(m_facingDirection * m_rollForce, m_body2d.velocity.y);}public void MoveY(float y){m_body2d.MovePosition(new Vector2(transform.position.x, transform.position.y y));}public void BlockGravity(bool isStatic){float oldScale m_body2d.gravityScale;float newScale isStatic ? 0f : 1f;if (Mathf.Abs(oldScale - newScale) 0.0001){m_body2d.gravityScale newScale;m_body2d.velocity new Vector2(0, 0);}}public bool IsGrounded() { return m_groundSensor.State(); }
http://www.dnsts.com.cn/news/110898.html

相关文章:

  • 常规做网站要在工信部认证吗新闻投稿平台
  • 外贸型网站推广与监测促销策划方案
  • 点菜网站模板长沙seo关键词排名优化
  • 杭州建站平台怎么制作游戏地图
  • 品牌网站建设j小蝌蚪j晓风彩票门户网站建设
  • 旅游网站开发设计文档中小企业网站多大空间
  • 顺德乐从有做阿里巴巴的网站吗德尔普网络做网站怎么样
  • zhongwen网站模板怎么用网站赚钱
  • 天津网站制作软件做网站是通过怎么挣钱
  • 移动电商网站设计免费二维码在线制作
  • 做网站 单页数量公司网站建立的建议
  • 博宇娱乐网站建设百度网页版首页
  • 网站怎么让百度收录一张图做封面重庆网站建设公司 十年
  • 360云主机可以建设网站吗茂名网站建设方案书
  • 做网站收获了什么企业形象设计包括哪些方面
  • 制作网站的基本步骤网站设计遇到的问题
  • 搜款网站一起做网店营销型 展示类网站
  • 家电网站建设需求分析阿里云域名注册官网入口
  • 用dedecms做的网站福田庆三
  • 网站策划需求网站建设的步骤以及流程
  • 网站设计哪家口碑好泰安人才网招聘信息网电焊工
  • 临沧建设局网站WordPress的light
  • 免费seo网站推荐一下网站建设需要多久
  • 外网访问不了内网建设的网站thinkphp大型网站开发
  • 图片做网站网络网站是多少钱一年
  • 汇鑫网站建设北京装修公司哪家性价比高
  • 移动建站平台有哪些建设门户网站需要注意什么意思
  • 上海网站建设门户网站建设客户分析
  • 给网站做优化怎么做数字营销包括什么
  • 自己的网站统计输入词网站交换链接怎么做