查看: 54980|回复: 195

【飞机大战】开发手记(二)飞机移动控制

[复制链接]

1

主题

338

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
74666
发表于 2014-9-4 04:49:21 | 显示全部楼层 |阅读模式
在上一篇手记中笔者用tk2D的精灵集合和精灵动画特性制作了《飞机大战》中飞机飞行的动画。本篇将使用C#脚本令飞机随着玩家触摸屏幕的位置而移动。由于之前已经为飞机的精灵创建了碰撞器用于检测机体和子弹,因此在此之前需要对现有的飞机进行改造。
按Ctrl+Shift+N创建一个新的对象,重命名为Aircraft,并将原有的Aircraft对象重命名为Body拖入作为它的子物体。

创建AircraftController.cs脚本,用于控制飞机的移动:



namespace Frederick.ProjectAircraft{
    using UnityEngine;

    ///
    /// 玩家飞机控制器。
    ///
    [RequireComponent(typeof (BoxCollider))]
    public class AircraftController : MonoBehaviour
    {
        ///
        /// 将飞机移动到指定位置。
        ///
        ///目标位置
        public void MoveTo(Vector3 pos)
        {
            mAircraft.localPosition = pos;
        }

        protected void Awake()
        {
            mAircraft = transform;
        }

        protected void OnMouseDown()
        {
            mIsDragging = true;
            mOffset = Input.mousePosition - mAircraft.localPosition;
        }

        protected void OnMouseUp()
        {
            mIsDragging = false;
        }

        protected void Update()
        {
            if (mIsDragging && Input.GetMouseButton(0))
            {
                var pos = Input.mousePosition - mOffset;
                MoveTo(pos);
            }
        }

        private Transform mAircraft;
        private bool mIsDragging;
        private Vector3 mOffset;
    }
}


将脚本附加到Aircraft对象上,并设置好碰撞器的大小和位置,注意不要被机体本身的碰撞器遮挡住,否则无法响应鼠标按下事件。 【飞机大战】开发手记(二)飞机移动控制
点击运行游戏,在游戏窗口中的飞机上按住鼠标左键并拖动,可以看到飞机已经完全跟着鼠标位置走了。敌方飞机的控制器也是一样的原理,那就顺手再做个EnemyAircraftController。


namespace Frederick.ProjectAircraft
{
    using UnityEngine;

    ///
    /// 敌方飞机控制器。
    ///
    public class EnemyAircraftController : MonoBehaviour
    {
        public float SpeedRate = 1.0f;
        public float StantardSpeed = 100;

        protected void Awake()
        {
            mTransform = transform;
        }

        protected void Update()
        {
            var position = mTransform.localPosition + mDirection * StantardSpeed * SpeedRate * Time.deltaTime;
            if (position.y < 0)
            {
                Destroy(gameObject);
                return;
            }
            mTransform.localPosition = position;
        }

        private readonly Vector3 mDirection = Vector3.down;
        private Transform mTransform;
    }
}


按照第一篇的步骤创建好敌方飞机Aircraft_Small,并把控制器附加上去,保存为预设。已经有那么点游戏的感觉了:) 【飞机大战】开发手记(二)飞机移动控制 图中的Missile是用来测试导弹发射的,将在下一篇手记中记录。


回复

使用道具 举报

ngk02lds78 该用户已被删除
发表于 2014-12-28 02:51:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

xbit 该用户已被删除
发表于 2014-12-28 02:53:25 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

1259

帖子

3929

积分

vip会员

Rank: 1

积分
3929
发表于 2015-4-6 00:45:52 来自手机 | 显示全部楼层
1v1飘过
回复 支持 反对

使用道具 举报

希望 该用户已被删除
发表于 2015-4-11 06:28:15 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

1305

帖子

4142

积分

vip会员

Rank: 1

积分
4142
发表于 2015-4-11 22:30:48 来自手机 | 显示全部楼层
看起来不错
回复 支持 反对

使用道具 举报

0

主题

1308

帖子

4012

积分

vip会员

Rank: 1

积分
4012
发表于 2015-4-13 05:56:14 来自手机 | 显示全部楼层
众里寻他千百度,蓦然回首在这里!
回复 支持 反对

使用道具 举报

0

主题

1253

帖子

3948

积分

vip会员

Rank: 1

积分
3948
发表于 2015-4-14 03:30:46 来自手机 | 显示全部楼层
:lol
回复 支持 反对

使用道具 举报

忐忑幽灵 该用户已被删除
发表于 2015-4-15 14:34:06 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

1242

帖子

3895

积分

vip会员

Rank: 1

积分
3895
发表于 2015-4-17 22:29:55 来自手机 | 显示全部楼层
好帖必须得顶起
回复 支持 反对

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部