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

建设应用型网站的意义建站公司排名

建设应用型网站的意义,建站公司排名,万维定制平台,做手机网站的公司文章目录 介绍一,制作玩家具体函数脚本PlayerCharacter三、 制作玩家控制脚本 PlayerController,调用上面的函数方法四、 制作子弹脚本 shell五、 给玩家挂载脚本六、 制作坦克脚本七、 给坦克添加组件八、 开始游戏,播放动画九、 下载 介绍 …

文章目录

  • 介绍
  • 一,制作玩家具体函数脚本PlayerCharacter
  • 三、 制作玩家控制脚本 PlayerController,调用上面的函数方法
  • 四、 制作子弹脚本 shell
  • 五、 给玩家挂载脚本
  • 六、 制作坦克脚本
  • 七、 给坦克添加组件
  • 八、 开始游戏,播放动画
  • 九、 下载


介绍

3d游戏。
玩家自由移动。
持枪发射子弹。
随机生成的坦克追踪玩家。
坦克发射子弹攻击玩家。
hp归零死亡

在这里插入图片描述


一,制作玩家具体函数脚本PlayerCharacter

设置float:移动速度、转动速度、子弹发射速度、现在生命值、最大生命值、两次攻击时间间隔。

设置bool:是否正在攻击、是否死亡

其他组件:角色控制器、生命值滑动条、最大生命值颜色(绿色)、最小生命值颜色(红色)、音频源、动画器、粒子系统

public float speed;
public float turnSpeed;
public float health;
public float attackTime;
public float health;
float healthMax;bool isAlive;
bool attacking = false;CharacterController cc;
Animator animator;
public Slider healthSlider;                             
public Image healthFillImage;                          
public Color healthColorFull = Color.green;
public Color HealthColorNull = Color.red;public ParticleSystem explosionParticles;
public Rigidbody shell;
public Transform muzzle;
start方法,获取动画器、角色控制器、生命值最大化、bool设置活着、更新血条滑块、死亡爆炸效果设置为不可见。
animator = GetComponentInChildren<Animator>();cc = GetComponent<CharacterController>();healthMax = health;isAlive = true;RefreshHealthHUD();explosionParticles.gameObject.SetActive(false);
玩家被攻击,生命值减少amount,更新血条,如果生命值小于零,死亡
 public void TakeDamage(float amount){health -= amount;RefreshHealthHUD();if (health <= 0f && isAlive){Death();}}
更新血条,滑块的value值更新一次,血条由100%的绿色,变成百分之(health / healthMax)的绿色。
  public void RefreshHealthHUD(){healthSlider.value = health;healthFillImage.color = Color.Lerp(HealthColorNull, healthColorFull, health / healthMax);}
死亡,角色是否活着设置为否,播放粒子特效,当粒子系统的持续时间结束后,粒子系统对象就会被销毁,设置玩家为不可见。
 public void Death(){isAlive = false;explosionParticles.transform.parent = null;explosionParticles.gameObject.SetActive(true);ParticleSystem.MainModule mainModule = explosionParticles.main;Destroy(explosionParticles.gameObject, mainModule.duration);gameObject.SetActive(false);}
角色移动,传入一个向量值,必须在活着、没有攻击才能移动。
角色控制器使用simplemove函数,移动的时候,控制“speed”动画,开始播放
 public void Move(Vector3 v){if (!isAlive) return;if (attacking) return;Vector3 movement = v * speed;cc.SimpleMove(movement);if(animator){animator.SetFloat("Speed", cc.velocity.magnitude);}}
人物旋转函数,玩家往哪里跑,角色人物头就转向哪里
设置目标位置、当前位置
四元数转向
使用球面插值,平滑转动
  public void Rotate(Vector3 lookDir){var targetPos = transform.position + lookDir;var characterPos = transform.position;//去除Y轴影响characterPos.y = 0;targetPos.y = 0;//角色面朝目标的向量Vector3 faceToDir = targetPos - characterPos;//角色面朝目标方向的四元数Quaternion faceToQuat = Quaternion.LookRotation(faceToDir);//球面插值Quaternion slerp = Quaternion.Slerp(transform.rotation, faceToQuat, turnSpeed * Time.deltaTime);transform.rotation = slerp;}
开火脚本
必须活着、不正在开火才能调用
生成一个子弹刚体,玩家自身位置,枪口方向转向,设置发射速度
播放开火音效
动画器播放开火动作
延迟attachtime发射一次,设置发射频率
 public void Fire(){if (!isAlive) return;if (attacking) return;Rigidbody shellInstance = Instantiate(shell, muzzle.position, muzzle.rotation) as Rigidbody;shellInstance.velocity = launchForce * muzzle.forward;shootAudioSource.Play();if(animator){animator.SetTrigger("Attack");}attacking = true;Invoke("RefreshAttack", attackTime);}
发射时间间隔脚本,时间未到,不能发射
 void RefreshAttack(){attacking = false;}

三、 制作玩家控制脚本 PlayerController,调用上面的函数方法

start方法获取角色控制器
void Start (){character = GetComponent<PlayerCharacter>();}
固定帧数刷新。
鼠标左键调用点击开火函数
键盘wsad控制人物移动
人物移动的方向和人物转向的方向保持一致
void FixedUpdate(){if (Input.GetButtonDown("Fire1")){character.Fire();}var h = Input.GetAxis("Horizontal");var v = Input.GetAxis("Vertical");character.Move(new Vector3(h, 0, v));var lookDir = Vector3.forward * v + Vector3.right * h;if (lookDir.magnitude != 0){character.Rotate(lookDir);}}

四、 制作子弹脚本 shell

设置float参数:子弹生存时间、爆炸半径、爆炸力量、最大伤害设置bool参数:子弹是否正在旋转设置其他:音频源、层级、粒子系统
    public float lifeTimeMax = 2f;public AudioSource explosionAudioSource;public ParticleSystem explosionParticles;public float explosionRadius;public float explosionForce = 1000f;public float damageMax = 100f;public LayerMask damageMask;public bool isRotate = false;

start方法,添加扭矩,模拟子弹旋转

 void Start (){if(isRotate){GetComponent<Rigidbody>().AddTorque(transform.right * 1000);}}
触发器碰撞检测
在当前游戏对象的位置上创建一个球形的检测区域,并检测该区域内是否有与指定层级(damageMask)匹配的碰撞器(colliders)。如果有,则返回一个碰撞器数组(Collider[]),其中包含了所有与当前游戏对象在指定半径(explosionRadius)内发生碰撞的游戏对象的碰撞器。通常用于实现爆炸伤害、碰撞检测等功能。	
遍历数组,计算伤害
播放粒子特效
 private void OnTriggerEnter(Collider other){Collider[] colliders = Physics.OverlapSphere(transform.position, explosionRadius, damageMask);foreach(var collider in colliders){var targetCharacter = collider.GetComponent<PlayerCharacter>();if (targetCharacter){targetCharacter.TakeDamage(CalculateDamage(collider.transform.position));}}explosionParticles.transform.parent = null;explosionAudioSource.Play();explosionParticles.Play();ParticleSystem.MainModule mainModule = explosionParticles.main;// Destroy(explosionParticles.gameObject, mainModule.duration);Destroy(gameObject);}
计算伤害,传入向量值
距离越小,伤害比例越大
设置最低伤害Mathf.Max()函数,最低伤害为2
float CalculateDamage(Vector3 targetPosition){var distance = (targetPosition - transform.position).magnitude;//距离越小,伤害比例越大var damageModify = (explosionRadius - distance) / explosionRadius;var damage = damageModify * damageMax;return Mathf.Max(2f, damage);}

五、 给玩家挂载脚本

设置参数,添加预制体子弹
在这里插入图片描述


六、 制作坦克脚本

设置导航网格、play对象
	 NavMeshAgent agent;PlayerCharacter character;Transform targetTrans;
start函数,获取玩家实例,
导航网格寻找玩家
延迟1秒后,每隔三秒发射一次子弹
 void Start (){character = GetComponent<PlayerCharacter>();agent = GetComponent<NavMeshAgent>();targetTrans = GameObject.FindGameObjectWithTag("Player").transform;InvokeRepeating("FireControl", 1, 3);}
开火控制函数,调用共同使用的fire()方法。
 void FireControl(){character.Fire();}
update()函数,不断追踪玩家的位置,
转向玩家
void Update (){agent.destination = targetTrans.position;transform.LookAt(targetTrans);}

七、 给坦克添加组件

在这里插入图片描述


八、 开始游戏,播放动画

在这里插入图片描述

人物移动、坦克移动

在这里插入图片描述


九、 下载

https://pan.baidu.com/s/1RVemZY_THhhpD0v_IcQS2w

提取码:tdq9





+

文章转载自:
http://riksmal.xtqr.cn
http://discardable.xtqr.cn
http://skywalk.xtqr.cn
http://feedstuff.xtqr.cn
http://cheero.xtqr.cn
http://guttler.xtqr.cn
http://hardhat.xtqr.cn
http://croydon.xtqr.cn
http://wiglet.xtqr.cn
http://weeds.xtqr.cn
http://succubus.xtqr.cn
http://stram.xtqr.cn
http://varistor.xtqr.cn
http://currant.xtqr.cn
http://carpolite.xtqr.cn
http://drink.xtqr.cn
http://rebab.xtqr.cn
http://illegitimacy.xtqr.cn
http://lampooner.xtqr.cn
http://aurum.xtqr.cn
http://urban.xtqr.cn
http://oximeter.xtqr.cn
http://overshoot.xtqr.cn
http://yill.xtqr.cn
http://ccco.xtqr.cn
http://mouther.xtqr.cn
http://aca.xtqr.cn
http://embellishment.xtqr.cn
http://phenylephrine.xtqr.cn
http://decentralisation.xtqr.cn
http://trefa.xtqr.cn
http://aftertime.xtqr.cn
http://collector.xtqr.cn
http://scotophobia.xtqr.cn
http://demobilization.xtqr.cn
http://lumirhodopsin.xtqr.cn
http://backstage.xtqr.cn
http://heterophyte.xtqr.cn
http://superradiation.xtqr.cn
http://zayin.xtqr.cn
http://interestedly.xtqr.cn
http://parang.xtqr.cn
http://radiopacity.xtqr.cn
http://nullipara.xtqr.cn
http://pelerine.xtqr.cn
http://mediocrity.xtqr.cn
http://dioestrum.xtqr.cn
http://graffito.xtqr.cn
http://pagurian.xtqr.cn
http://sabbatarianism.xtqr.cn
http://gaseous.xtqr.cn
http://eyeable.xtqr.cn
http://denotable.xtqr.cn
http://prejudgement.xtqr.cn
http://pubis.xtqr.cn
http://hendecagon.xtqr.cn
http://ottava.xtqr.cn
http://transpose.xtqr.cn
http://titling.xtqr.cn
http://canzona.xtqr.cn
http://clean.xtqr.cn
http://sincere.xtqr.cn
http://inter.xtqr.cn
http://dump.xtqr.cn
http://fairing.xtqr.cn
http://molecularity.xtqr.cn
http://cashbook.xtqr.cn
http://intend.xtqr.cn
http://gallup.xtqr.cn
http://char.xtqr.cn
http://shrew.xtqr.cn
http://travail.xtqr.cn
http://sadist.xtqr.cn
http://disenroll.xtqr.cn
http://sequent.xtqr.cn
http://linaceous.xtqr.cn
http://peggy.xtqr.cn
http://prenatal.xtqr.cn
http://railer.xtqr.cn
http://pontlevis.xtqr.cn
http://septime.xtqr.cn
http://zincograph.xtqr.cn
http://lilt.xtqr.cn
http://operagoer.xtqr.cn
http://valhalla.xtqr.cn
http://tetrachlorethane.xtqr.cn
http://koto.xtqr.cn
http://tabanid.xtqr.cn
http://domo.xtqr.cn
http://enterotoxemia.xtqr.cn
http://heliotypography.xtqr.cn
http://msie.xtqr.cn
http://kaohsiung.xtqr.cn
http://iconograph.xtqr.cn
http://incuse.xtqr.cn
http://cowrie.xtqr.cn
http://slosh.xtqr.cn
http://swaraj.xtqr.cn
http://escalator.xtqr.cn
http://ashen.xtqr.cn
http://www.dt0577.cn/news/59443.html

相关文章:

  • 公司网站被抄袭沈阳seo优化
  • 重庆建设摩托车网站免费b站推广短视频
  • 洛阳做网站的公司哪家好成人用品网店进货渠道
  • 杭州首传网站建设公司怎么样十大网站平台
  • 如何做淘宝网网站域名网站做优化
  • 做盗版网站引流深圳优化公司
  • wordpress has_post_thumbnail网站运营优化培训
  • 做平台网站外包多少钱啊营销助手下载app下载
  • 怎么叫人做网站seo用什么论坛引流
  • 网站建设方案应该怎么做成都私人做网站建设
  • 对接国家战略建设海上福州网站海外品牌推广
  • 有了页游源代码如何做网站网站seo优化技巧
  • 佛山专业的网站建设seo在线教学
  • 南头专业外贸网站建设公司足球世界排名前十
  • 武汉网站建设视频教程企业网站推广的方法有
  • 通过网站做国际贸易的成本海外黄冈网站推广
  • 视频做动图的网站互联网精准营销
  • 润才网站建设故事式软文范例500字
  • 电影网站开发任务书seo是什么单位
  • 北京市住房和城乡建设委员网站全网最低价24小时自助下单平台
  • 常州网站建设怎么样公司网站设计需要多少钱
  • 山乙建设公司网站网上营销型网站
  • win10做的网站其他电脑访问不了今日国际新闻最新消息十条
  • 建个网站大概多少钱虚拟主机搭建网站
  • 龙湾网站建设什么是网站seo
  • 广西 网站建设奖券世界推广网站
  • 介绍一个电影的网站模板下载网推拉新app推广平台
  • 网站充值页面模板百度明星人气榜入口
  • 七米网站建设推广优化小学生简短小新闻
  • 如何向搜索引擎提交网站做国外网站