嗨,在上一篇文章中,我们两个敌人都是随机移动的(请检查github中的先前代码)。 现在,让他们向我们射击。
步骤#01 —在Unity应用程序中 1)选择Soldier(1)并在Animator选项卡中; 2)从Asset> ToonSoldiers_demo> animation > assault_combat_shoot添加动画3)通过将其拖动到Animator ; 4)右键单击assalt_combat_idle并选择进行转换,然后5)将其拖动到assault_combat_shoot ;
步骤#02 —在“ 项目”视图 (在场景视图下)中选择动画,然后在检查器中单击1)“ 编辑” ,然后选中2)“ 循环时间”复选框,然后按3)“ 应用”按钮;
步骤#03 —选择1)转换(空闲☞拍摄), 2)单击+按钮并添加布尔拍摄 ; 3)在Inspector上单击+按钮,然后4)添加Shoot = true ; 这是所选过渡发生的条件; 5)希望有退出时间;
步骤#04 —与1)逆向转换相同(拍摄☞空闲),但现在2)选择Shoot = false ; 我们会控制敌人必须向我们开枪的正确时间;
步骤#05 —打开Soldier.cs ,并添加一个属性以访问Animator对象:
private Animator mAnimator = null;
步骤#06 —在Soldier.Awake()及以下mEnemy = transform…中,输入以下代码:
注意 :如果将mAnimator放在mEnemy的位置之前,它将不起作用…
我们还将更改这3个 变量的时间(在Inspector中,您可以尝试使用以下值):
公共浮动RightTime = 3.0f ;
公共浮动ShootTime = 1.0f ;
public float LeftTime = 2.0f ; //获取敌人实际的gameObjectmEnemy = transform.GetChild(0).gameObject; mAnimator = mEnemy.GetComponent ();
步骤#07 —在Soldier.Activate()类型中(此布尔值控制空闲☞射击过渡动画):
mAnimator.SetBool(“ shoot”,true);
步骤#08 —在Soldier.MoveRightwards()中键入以下内容(这将激活后向拍摄☞空闲过渡):
mAnimator.SetBool(“ shoot”,false);
步骤#09 —在Animator中,选择assault_combat_shoot动画并进行设置:
速度= 2
这将加快拍摄动画的速度(根据您的喜好进行调整);
在Visual Studio上,单击SaveAll 。
运行动画;
敌人正在向我们开枪!
好!
现在,让我们添加一个Capsule Collider,以便可以击中敌人。
步骤#10 —要添加光线投射,我们需要有一个碰撞对象。 为此, 1)在Inspector中选择ToonSoldier_demo_1 (而不是它的控制器是Soldier(1)对象); 2) 添加组件,然后3)选择Capsule Collider; 4)像这样调整数据: Y = 1.32; 半径 = 0.44, 高度 = 1.63,5 ),这样胶囊就可以遮盖敌人的躯干(这是只让专业玩家玩游戏的一种方法🏅);
步骤#11 —让我们标记敌人; 1) 选择ToonSoldier并在检查器中查找Tag , 2) 添加Tag… ,键入敌人,然后3) 返回选择ToonSoldier并4) 检查敌人作为其标签; 在脚本中,我们将使用敌人标签来引用该对象; 对其他ToonSoldier重复此操作;
现在,将其复制到其他士兵(2); 做到:选择ToonSoldier_demo_1,单击检查器上的“应用”按钮; 现在选择ToonSoldier_demo_2 ,然后再次单击Apply ; 所有设置都复制到另一名士兵。 这是预制件! 酷吧?
步骤#12 —现在,让我们添加攻击敌人的逻辑; 转到Crosshair.Update() ,这是完整的方法:
//每个框架调用一次更新,而无需更新(){this.transform.position = Input.mousePosition; 如果(Input.GetMouseButtonDown(0)){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit热门歌曲; 如果(Physics.Raycast(ray,out hit)){//Debug.Log(hit.transform.gameObject.tag); if(hit.transform.gameObject.tag ==“敌人”){//销毁(hit.transform.gameObject); hit.transform.parent.GetComponent ()。Hit(); }}}}
步骤#13 —转到Soldier.cs并创建此方法; 当我们用十字准线击中敌人时,这将被称为;
内部无效Hit()
{
mAnimator.SetTrigger(“ fall”); Invoke(“ MoveRightwards”,1.5f);
}
好! 现在,当我们击中敌人时,将调用动画倒下,然后1.5秒后,MoveRightwards()使敌人的生活恢复原状……
这对于今天的帖子来说足够了……我们准备了可以实际运行秋季动画的基础结构,因此完成了一项关键任务。
在下一篇文章中,我们将带Blender制作自定义动画 !
再见了,谢谢,给我您的反馈;)
感谢您的光临! 敬请关注!
Github
#0#1#2#3#4#5#6#7#8#9#10
参考和学分
用Unity制作游戏(1–10):Jayanam的基础知识