预设体
预设体能够使游戏对象和资源重复使用
相同的游戏对象可以使用同一个预设体来创建
对预设体进行修改后,所有的同一预设体游戏对象都会相应改变
要区分 预设体 与 预设体游戏对象!!!
在create栏把游戏对象拖到project栏即可创建预设体
预设体扩展名为.prefab
然后就可以把预设体拖到场景中创建预设体游戏对象
对预设体游戏对象可以单个的修改
//常用
用脚本在游戏时动态创建创建预设体游戏对象
先在create创建一个空gameobject
为此对象添加脚本:
public Gameobject playerPrefab;用来记录需要作为预设体的对象
fun里:
Instantiate(playerPrefab);//但是这种方法无法控制创建的位置
Vector3 pos = new Vector3();
pos.y = 0.5f;//让对象在地面之上
pos.x = Random.Range(-5f,5f);//使用随机数 -5.0~5.0之间
pos.z = Random.Range(-5f,5f);
float angel = Random.Range(0f,360f);//角度随机
Instantiate(playerPrefab,pos,Quatenion.AngelAxis(angel,Vector.up));
预设体 位置 角度
创建一个对象在pos位置,旋转角度为正y轴angel度
Instantiate返回值为Object,可以用转换为gameobject:
Gameobject g = Instantiate(...) as Gameobject;
p.AddComponent<TestSP>();//为其添加脚本
Class Inptu
用于获取用户事件,如按键、鼠标
一般写在Update里
每帧监听用户事件
if(Input.GetKeyDown(KeyCode.W));
当用户按下W时返回true,否则返回false,KeyCode.W是枚举
因为是在Update中,所以是每帧检查用户是否按下W
if(Input.GetKeyUp(KeyCode.Alpha1));
按下并松开 1 时
if(Input.GetKey(KeyCode.Q));
持续按下按钮时持续触发
但是应该使用:
if(Input.GetButton("Jump"))...
Input.GetMouseButtonDown(0);
参数0监听鼠标左键按下,1监听鼠标右键
同理GetMouseButtonUp与GetMouseButton对应GetKeyUp与GetKey
Input.GetMouseButton(0);单击鼠标左键,1为右键 2...
获取某个坐标轴上的一个方向
float h = Input.GetAxis("Horizontal");//当按下a时返回-1,d返回1
float v = Input.GetAxis("Vertical");//w、s同上
射线
虚拟射线能够检测所有碰撞到的物体
使用Physics类的Raycast方法实现射线碰撞检测功能
Vector3 target;//目标点
bool isOverMove=true;//是否到达目标
RaycastHit hitinfo = new RaycastHit();
punlic float speed;//速度
void Update(){
if(Input.GetMouseButtonDown(0)){
//创建一条从摄像机开始经过鼠标当前位置的射线
Ray ray = Camera.main.ScreenPoingToRay(Input.GetMousePosition);
//发射射线 是否发射碰撞
if(Physics.Raycast(ray,out hitinfo)){//保存碰撞点信息到hitinfo
//Physics.RaycastAll()会返回射线经过的所有游戏对象
if(hitinfo.collider.name = "Plane"){//是否与地面发生碰撞
target=hitinfo;
target.y=0.5f;//因为碰撞点是地面,所以y为0
isOverMove=false;
}
}
}
//移动对象
MoveTo(target);
}
void MoveTo(Vector3 target){//移动
if(!isOverMove)