1.代码~
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ContralMove : MonoBehaviour
{
//控制人物移动鼠标控制人物旋转
public float Movespeed = 10f;
public float Rotatespeed = 10f;
float RotationX;
float RotationY;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.W))
{
this.transform.Translate(new Vector3(0, 0, 1 * Movespeed * Time.deltaTime));
}
if (Input.GetKey(KeyCode.S))
{
this.transform.Translate(new Vector3(0, 0, -1 * Movespeed * Time.deltaTime));
}
if (Input.GetKey(KeyCode.A))
{
this.transform.Translate(new Vector3(-1 * Movespeed * Time.deltaTime, 0, 0));
}
if (Input.GetKey(KeyCode.D))
{
this.transform.Translate(new Vector3(1 * Movespeed * Time.deltaTime, 0, 0));
}
float RotateX = Input.GetAxis("Mouse X");
float RotateY = Input.GetAxis("Mouse Y");
RotationX += RotateX * Rotatespeed * Time.deltaTime;
RotationY += RotateY* Rotatespeed * Time.deltaTime;
this.transform.rotation = Quaternion.Euler(RotationX, RotationY, 0);
}
//旋转角度限制
void LimitRotateX()
{
RotationX = Mathf.Clamp(RotationX, -30f, 30f);
}
}
2.摄像机平滑跟踪
向屏幕中间发射射线代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RayToscreenMid : MonoBehaviour
{
Camera MianCamea;
Vector3 ScreenMidPos;
// Start is called before the first frame update
void Start()
{
ScreenMidPos = new Vector3(Screen.width / 2, Screen.height/2,0);
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
RayShot();
}
}
private void RayShot()
{
Ray OneShotRay = Camera.main.ScreenPointToRay(ScreenMidPos);
RaycastHit OnEnemy;
if(Physics.Raycast(OneShotRay,out OnEnemy))
{
Debug.Log("发射射线成功");
if(OnEnemy.transform.name!="Terrain"&& OnEnemy.transform.name != "Role"&&OnEnemy.transform.name!= "MonsterCenterPOS"&&OnEnemy.transform.name!= "OneMonsterPre")
{
Destroy(OnEnemy.transform.gameObject);
Debug.Log("销毁对方");
if(ScreenMidPos!=null)
{
Debug.DrawLine(Camera.main.transform.position, ScreenMidPos, Color.red, 10000f);
}
}
}
}
}
自动刷怪代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CreatMonster : MonoBehaviour
{
// S这个脚本间隔一点时间生成怪物
/*1.程序逻辑
* 1. 设计一个计时器
* 2.间隔一段时间3s执行一下 *
*/
float SaveTime = 0f;
public GameObject OneMonsterPre;
public Transform MonsterCenterPOS;
float CloneX;
float CloneZ;
// Update is called once per frame
void Update()
{
SaveTime += Time.deltaTime;
if (SaveTime >= 3)
{
Debug.Log("时间超过3秒");
SaveTime = 0;
CloneMonster();
}
}//endupdate
void CloneMonster()
{
Debug.Log("生成随机数");
for (int i = 0; i < 10; i++)
{
CloneX = Random.Range(1f, 100f) + MonsterCenterPOS.position.x;
CloneZ = Random.Range(1f, 300f) + MonsterCenterPOS.position.z;
Vector3 TempPos = new Vector3(CloneX, MonsterCenterPOS.position.y, CloneZ);
Debug.Log("随机坐标" + TempPos);
GameObject TempOBJ = GameObject.Instantiate(OneMonsterPre, TempPos, Quaternion.Euler(new Vector3(Random.Range(10, 80), 0, Random.Range(10, 80))));
Destroy(TempOBJ, 3f);
}
}
}//endclass
加分,暂未实现🤫🤫