unity怎么用C#写个发射子弹的脚本?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity怎么用C#写个发射子弹的脚本?相关的知识,希望对你有一定的参考价值。
如题
参考技术A 我这边不好打代码,我用文字给你描述一下,你直接替换成代码就好:将下面脚本挂在你的枪上定义一个gameobject类型的子弹;//可以在编辑器中拖拽一个子弹物体给他,例如:一个小球
void update()
if(按下鼠标左键)
用上面创建的子弹克隆一个新子弹,最好用一个临时变量装起来,好方便下面的操作;
在枪的前方向附加一个力给新克隆的子弹;
本回答被提问者和网友采纳 参考技术B 不就是按键时实例化一下子弹而已。追问
能演示下吗?拜托了,谢谢
参考技术C gameObject obj=GameObject.Instantiate(子弹); 参考技术D using System.Collections;using System.Collections.Generic;
using UnityEngine;
public class sheji : MonoBehaviour
// Use this for initialization
void Start ()
int speed = 5;
GameObject a;
// Update is called once per frame
void Update ()
float x = Input.GetAxis("Horizontal") * Time.deltaTime * speed;
float z = Input.GetAxis("Vertical") * Time.deltaTime * speed;
transform.Translate(x, 0, z);
//print(x);
if (Input.GetButtonDown("Fire1"))
GameObject n = (GameObject)Instantiate(a,new Vector3(a.transform.position.x,a.transform.position.y,a.transform.position.z), Quaternion.identity);
Vector3 fwd = transform.TransformDirection(Vector3.forward);
n.GetComponent<Rigidbody>().AddForce(fwd * 28000);
第5个回答 2015-03-23 是要有发射子弹的效果吗 还是说要有碰撞
Ruby‘s Adventrue游戏制作笔记Unity角色攻击——发射子弹
Ruby's Adventrue游戏制作笔记(十一)Unity角色攻击——发射子弹
前言
本文章是我学习Unity官方项目项目所做笔记,作为学习Unity的游戏笔记,在最后一章会发出源码,如果等不及可以直接看源码,里面也有很多注释相关,话不多说,让Ruby动起来!
游戏引擎:Unity2020.3
一、编辑子弹
将子弹拖入编辑器编辑
调整尺寸
使用刚体控制子弹
添加碰撞器,稍微调整一下碰撞范围
二、创建脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 控制子弹的移动
public class BulletController : MonoBehaviour
// 获取刚体
private Rigidbody2D rbody;
void Start()
rbody = GetComponent<Rigidbody2D>();
void Update()
// 控制子弹的移动
public void Move(Vector2 moveDirection,float moveForce)
rbody.AddForce(moveDirection * moveForce);
三、修改玩家攻击脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
// 玩家速度
public float speed = 5f;
// 玩家最大生命值
private int maxHealth = 5;
// 当前生命值
private int currentHealth;
// 受到伤害后的无敌时间 无敌时间2秒
private float invincibleTime = 2f;
// 无敌计时器
private float invincibleTimer;
// 是否无敌
private bool isInvincible;
// 玩家的朝向信息
// 默认朝向右方
private Vector2 lookDirection = new Vector2(1, 0);
// 用于创建动画
private Animator anim;
// 子弹速度
private int bulletSpeed;
// 获得最大生命值
public int myMaxHealth
get
return maxHealth;
// 获得当前生命值
public int myCurrentHealth
get
return currentHealth;
// 获得玩家刚体
private Rigidbody2D rbody;
// 获取子弹,按下J键发射子弹
public GameObject bulletPrefab;
void Start()
currentHealth = 2;
invincibleTimer = 0;
// 获得玩家刚体
rbody = GetComponent<Rigidbody2D>();
anim = GetComponent<Animator>();
// Update is called once per frame
void Update()
float moveX = Input.GetAxisRaw("Horizontal"); // 控制水平移动方向 按下A时返回 -1,按下D时返回 1
float moveY = Input.GetAxisRaw("Vertical"); // 控制垂直方向 W:1 S:-1
// 改变朝向信息
Vector2 moveVerctor = new Vector2(moveX, moveY);
if(moveVerctor.x !=0 || moveVerctor.y != 0)
lookDirection = moveVerctor;
// 设置动画
anim.SetFloat("Look X", lookDirection.x);
anim.SetFloat("Look Y", lookDirection.y);
// 根据向量大小判断
anim.SetFloat("Speed", moveVerctor.magnitude);
// 创建position坐标,存储玩家输入的坐标
Vector2 position = rbody.position;
// position.x += moveX * speed * Time.deltaTime;
// position.y += moveY * speed * Time.deltaTime;
//使用向量尝试
position += moveVerctor * speed * Time.deltaTime;
// 将最终坐标赋值给玩家
// transform.position = position;
// 使用刚体
rbody.position = position;
// 无敌计时
if (isInvincible)
invincibleTimer -= Time.deltaTime;
if (invincibleTimer < 0)
// 倒计时结束后取消无敌状态
isInvincible = false;
// 按下J键进行攻击
if (Input.GetKeyDown(KeyCode.J))
// 创建物体
GameObject bullet = Instantiate(bulletPrefab, rbody.position + Vector2.up * 0.5f, Quaternion.identity);
BulletController bc = bullet.GetComponent<BulletController>();
if(bc != null)
bc.Move(lookDirection, bulletSpeed);
// 改变玩家生命值
public void ChangeHealth(int amount)
// 如果受到伤害,判断是否无敌
if(amount < 0)
// 无敌,不执行
if (isInvincible == true) return;
// 不无敌,执行,并且设定为无敌状态
isInvincible = true;
invincibleTimer = invincibleTime;
Debug.Log(currentHealth + "/" + maxHealth);
// 把玩家的生命值约束在 0 和 最大值 之间
currentHealth = Mathf.Clamp(currentHealth + amount, 0, maxHealth);
//currentHealth += amount;
Debug.Log(currentHealth + "/" + maxHealth);
四、将子弹拖入玩家脚本
五、让子弹碰撞到该碰撞的东西
使用Layer进行管理
将玩家放在第8层,子弹设为第9层(层数随意,但是顺序不能变)
点击Edit-project Setting-physic 2D
设置子弹和玩家、子弹和子弹之间不能碰撞
六、编辑子弹
获得刚体,将子弹脚本中的Start函数中的获得刚体移动到Awake函数中
让子弹碰撞后消失
让子弹在飞一段时间后消失
七、增加修复(击杀)敌人函数
检测与敌人的碰撞
八、给发射添加动画
系列链接
Ruby‘s Adventrue游戏制作笔记(一)Unity创建项目
Ruby‘s Adventrue游戏制作笔记(二)Unity控制ruby移动
Ruby‘s Adventrue游戏制作笔记(三)Unity使用tilemap绘制场景
Ruby‘s Adventrue游戏制作笔记(四)Unity绘制其他元素
Ruby‘s Adventrue游戏制作笔记(五)Unity解决碰撞抖动和旋转问题
Ruby‘s Adventrue游戏制作笔记(六)Unity相机跟随玩家移动
Ruby‘s Adventrue游戏制作笔记(七)Unity采集生命道具
Ruby‘s Adventrue游戏制作笔记(八)Unity伤害陷阱
Ruby‘s Adventrue游戏制作笔记(九)Unity添加敌人
Ruby‘s Adventrue游戏制作笔记(十)Unity添加动画
Ruby‘s Adventrue游戏制作笔记(十一)Unity角色攻击——发射子弹
Ruby‘s Adventrue游戏制作笔记(十二)Unity给角色添加简单的特效
Ruby‘s Adventrue游戏制作笔记(十三)Unity血条UI的显示
Ruby‘s Adventrue游戏制作笔记(十四)Unity播放游戏音效
Ruby‘s Adventrue游戏制作笔记(十五)UnityNPC对话
Ruby‘s Adventrue游戏制作笔记(十六)Unity子弹数量及其UI
Ruby‘s Adventrue游戏制作笔记(十七)Unity添加游戏胜利条件和失败条件和导出游戏
以上是关于unity怎么用C#写个发射子弹的脚本?的主要内容,如果未能解决你的问题,请参考以下文章
Ruby‘s Adventrue游戏制作笔记Unity角色攻击——发射子弹
Ruby‘s Adventrue游戏制作笔记Unity角色攻击——发射子弹
Ruby‘s Adventrue游戏制作笔记Unity角色攻击——发射子弹