文章目录
- Unity+C# 初入(一)
- 系统环境
- 1 旋转立方体
- 对象创建
- 脚本攥写
- 脚本集成到对象
- 2 角色漫游
- 物品配置
- 脚本创建
- 脚本集成到物品上
- 问题记录
- 参考教程
Unity+C# 初入(一)
系统环境
系统:win10 专业版
Unity版本: 2019
C# 编辑器:rider
1 旋转立方体
对象创建
新建3D项目——>创建一个平面——>创建一个立方体
如下图所示
脚本攥写
在project中添加一个C#脚本,取名为"MyScript"
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyScript : MonoBehaviour
{
// Start is called before the first frame update
//public GameObject Cube;
public int transSpeed = 100;
public float rotaSpeed = 10.5f;
public float scale = 3;
public void OnGUI()
{
if (GUILayout.Button("移动立方体"))
{
// GameObject.Find("Cube").GetComponent<Transform>().transform.Translate(Vector3.forward*transSpeed*Time.deltaTime,Space.World);
Cube.transform.Translate(Vector3.forward*transSpeed*Time.deltaTime,Space.World);
}
if (GUILayout.Button("旋转立方体"))
{
GameObject.Find("Cube").GetComponent<Transform>().transform.Rotate(Vector3.up*rotaSpeed,Space.World);
}
if (GUILayout.Button("缩放立方体"))
{
// Cube.transform.localScale = new Vector3(scale,scale,scale);
GameObject.Find("Cube").GetComponent<Transform>().transform.localScale= new Vector3(scale,scale,scale);;
}
// throw new NotImplementedException();
}
}
脚本集成到对象
直接把脚本添加到main相机的组件里面就可以
2 角色漫游
物品配置
- 一个地面平面
- 一个empty的物品,取消重力作用和添加运动学作用,取名为player,并添加标签名称player。如下图
3.地面平面上添加几个物品,球体什么的 无所谓
最终效果如下图
![在这里插入图片描述](
脚本创建
创建脚本,取名为”player“
里面的代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
// 摄像机属性
private Transform m_camTransform;
// 相机旋转角度
private Vector3 m_camRot;
// 相谁相机高度
private float m_camHeiht = 1.4f;
public Transform m_transform;
private CharacterController m_ch;
private float m_movSpeed = 3.0f;
private float m_gravity = 2.0f;
// Start is called before the first frame update
void Start()
{
m_transform = this.transform;
m_ch = this.GetComponent<CharacterController>();
// 获取摄像机
m_camTransform = Camera.main.transform;
Vector3 pos = m_transform.position;
pos.y += m_camHeiht;
// 设置摄像机的旋转方向与主角一直
m_camTransform.rotation = m_transform.rotation;
m_camRot = m_camTransform.eulerAngles;
// 锁定鼠标
// Cursor.lockState = CursorLockMode.Locked;
}
// Update is called once per frame
void Update()
{
Control();
}
void Control()
{
// 定义三个值控制运动
float xm = 0, ym = 0, zm = 0;
// 重力运动
ym -= m_gravity * Time.deltaTime;
// 前后左右移动
if (Input.GetKey(KeyCode.W))
{
zm += m_movSpeed * Time.deltaTime;
}
else if (Input.GetKey(KeyCode.S))
{
zm -= m_movSpeed * Time.deltaTime;
}
else if (Input.GetKey(KeyCode.A))
{
xm -= m_movSpeed * Time.deltaTime;
}
else if (Input.GetKey(KeyCode.D))
{
xm += m_movSpeed * Time.deltaTime;
}
// 获取鼠标移动距离
float rh = Input.GetAxis("Mouse X"); // 返回鼠标在这个轴上的值,鼠标移动的时候才会触发,这边的值应该是相对之前的距离,而不是绝对的距离
float rv = Input.GetAxis("Mouse Y"); // 返回鼠标在这个轴上的值
// 旋转摄像头
m_camRot.x -= rv; //这个画图解释比较方便
m_camRot.y += rh; //
m_camTransform.eulerAngles = m_camRot;
// 使角色的面向方向与相机一致
Vector3 camrot = m_camTransform.eulerAngles;
camrot.x = 0;
camrot.z = 0;
m_transform.eulerAngles = camrot;
// 操作角色移动代码
// 使相机位置和角色一样
Vector3 pos = m_transform.position;
pos.y += m_camHeiht;
m_camTransform.position = pos;
// 使用角色控制器提供的move函数进行移动
m_ch.Move(m_transform.TransformDirection(new Vector3(xm, ym, zm)));
}
}
脚本集成到物品上
将player脚本集成到player对象上即可
问题记录
问题 1. 按照参考教程里面的代码写的时候,一直提示mycube这个对象在引用前没有注册。
解决:因为采用rider的编辑器,在生成C#代码的时候,会自动填写start() 和update()函数,然后我并没有删掉,直接在下面开始写上面的代码,所以导致没有注册。
问题2:脚本改了好多次,发现鼠标指向功能一直没反应。
措施:是因为我自己是远程控制另外一台电脑写代码的,原来是远程软件的问题。 在原电脑上移动鼠标就可以。。尴尬