unity 简单的射击
时间: 2023-09-15 12:19:52 浏览: 185
Unity3D射击游戏
这是一个简单的Unity射击游戏的代码示例,它包括一个玩家、敌人和子弹。请注意,这只是一个基础示例,您可以根据需要进行扩展和修改。
首先,您需要在Unity中创建一个空的场景,然后将玩家、敌人和子弹模型导入到场景中。您可以使用Unity Asset Store中的免费或付费资源包来获取这些模型。接下来,创建一个名为“Player”的空对象,并将其添加到场景中。
在“Player”对象上添加一个“Character Controller”组件,这将允许玩家在场景中移动。然后,在“Player”对象上添加一个脚本组件,以下是示例代码:
```csharp
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float moveSpeed = 5f;
public GameObject bulletPrefab;
public Transform firePoint;
private void Update()
{
float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");
Vector3 moveDirection = new Vector3(horizontalInput, 0f, verticalInput).normalized;
transform.Translate(moveDirection * moveSpeed * Time.deltaTime);
if (Input.GetButtonDown("Fire1"))
{
Shoot();
}
}
private void Shoot()
{
Instantiate(bulletPrefab, firePoint.position, firePoint.rotation);
}
}
```
该脚本允许玩家在场景中移动,并在按下左鼠标键时发射子弹。在“Player”对象上添加一个名为“FirePoint”的空对象,将其放置在玩家模型的前方,并将其分配给“PlayerController”脚本中的“firePoint”变量。还需要将子弹模型导入到场景中,并将其分配给“bulletPrefab”变量。
接下来,创建一个名为“Enemy”的空对象,并将其添加到场景中。在“Enemy”对象上添加一个脚本组件,以下是示例代码:
```csharp
using UnityEngine;
public class EnemyController : MonoBehaviour
{
public float moveSpeed = 3f;
public float stoppingDistance = 5f;
public float retreatDistance = 3f;
private Transform player;
private void Start()
{
player = GameObject.FindGameObjectWithTag("Player").transform;
}
private void Update()
{
if (Vector3.Distance(transform.position, player.position) > stoppingDistance)
{
transform.position = Vector3.MoveTowards(transform.position, player.position, moveSpeed * Time.deltaTime);
}
else if (Vector3.Distance(transform.position, player.position) < stoppingDistance && Vector3.Distance(transform.position, player.position) > retreatDistance)
{
transform.position = transform.position;
}
else if (Vector3.Distance(transform.position, player.position) < retreatDistance)
{
transform.position = Vector3.MoveTowards(transform.position, player.position, -moveSpeed * Time.deltaTime);
}
}
}
```
该脚本允许敌人在场景中移动,并在玩家靠近时停止移动。在“Enemy”对象上添加一个名为“EnemyBody”的子对象,并将敌人模型作为其子对象。您还需要将一个名为“EnemyHead”的子对象添加到“EnemyBody”对象上,并将其放置在敌人模型的顶部。
最后,在场景中创建一个名为“Bullet”的空对象,并将其添加到场景中。在“Bullet”对象上添加一个脚本组件,以下是示例代码:
```csharp
using UnityEngine;
public class BulletController : MonoBehaviour
{
public float speed = 10f;
public float lifeTime = 2f;
public float damage = 1f;
private void Start()
{
Destroy(gameObject, lifeTime);
}
private void Update()
{
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Enemy"))
{
other.GetComponent<EnemyHealth>().TakeDamage(damage);
Destroy(gameObject);
}
}
}
```
该脚本允许子弹在场景中移动,并在与敌人碰撞时造成伤害。在敌人模型上添加一个名为“EnemyHealth”的脚本组件,该组件允许敌人受到伤害并在生命值为零时死亡。
现在您已经创建了一个简单的射击游戏,您可以在Unity编辑器中按下“Play”按钮进行测试。
阅读全文