使用Unity3D做一个伪3D游戏吧!(2)——shoot!

在上一次我们的不懈努力几行代码下,方块君想要移动的愿望算是满足了,然而第二个愿望——射击,算是暂时把神大人难住了:

  

作为一个伪3D游戏,假透视是绝对有必要去做的,但是随着方块君的左右移动量不同,子弹射出的角度也不同

不过现在先把发射子弹的函数做出来再说,船到桥头自然直嘛!于是将这个shoot()函数放进方块君的操作脚本里

 void shoot(GameObject bul)
    {
        Instantiate(bul, transform.position, Quaternion.identity);
    }

蓝鹅……至少现在并没有什么用处……

让我们再度分析一下吧:


我们可以得出一个三角形的两边三角,于是乎,由于速度是矢量可以平移,我们可以用两个方向的Translate()来对子弹运动进行模拟:

此外,我们还需要判断子弹前进的大方向:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class bullet : MonoBehaviour {
    public float speedy, speedx, xsetoff, xangle;
    public string dir;
	void FixedUpdate () {
        transform.Translate(Vector2.up * Time.deltaTime * speedy);//子弹的向前(上)移动
        if (dir == "left")
        {
            transform.Translate(Vector2.left * Time.deltaTime * speedx);
        }
        else if (dir == "right")
        {
            transform.Translate(Vector2.right * Time.deltaTime * speedx);//子弹的左或右移动
        }
        if(transform.position.y>=2.5f){
            Destroy(gameObject);//子弹出界,立刻销毁
        }
	}

    public void makeMove(float x)
    {
        if (x > 0)//判断玩家所在位置是y轴左边还是右边
        {
            dir = "left";
        }
        else if (x < 0)
        {
            dir = "right";
        }
        else
        {
            dir = "up";//强迫症发作……
        }
        xangle = 45f * (1 - Mathf.Abs(x) / 8.0f) + 45f;//这个角是子弹射击方向和x轴的夹角
        xsetoff = 5.0f / Mathf.Tan(xangle * Mathf.Deg2Rad);//注意⚠️Mathf关于三角函数的计算必须使用弧度制(曾经被坑过)
        speedx = xsetoff / 0.5f;//常数
        speedy = 5.0f / 0.5f;//强迫症
    }
}

于是,这个设计子弹的代码就(暂时)完成了.dalao们也可以把这个看起来不漂亮的代码进行各种处理xi

我们在方块君的操控脚本里,只需要再改一下shoot()函数即可:

void shoot(GameObject bul)
    {
        shootTime = 0.5f;//这里是射击间隔时间
        Instantiate(bul, transform.position, Quaternion.identity).GetComponent<bullet>().makeMove(transform.position.x);
        //这回的Instantiate是不是有点奇怪?其实它的机制上还返回生成的物体,我们既可以用一个临时的GameObject储存它,如果只需要makeMove()一个
        //操作的话只需要直接点号调用即可
}

至于射击间隔时间,使用计时器,和跳跃是一样的,自己尝试一下吧!


至于那些图片资源嘛:链接:https://pan.baidu.com/s/1f7rtLk5mmf7sO-LEeZA5Dw  密码:m4ko

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值